liblog-bdm/util/logresolve.c
2000-07-31 13:15:35 +00:00

188 lines
4.5 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <stdarg.h>
#include <ver.h>
#define ND_MODE 1
#include <node.h>
#define LOG_MODE 1
#include <log.h>
VER_INFO_EXPORT (logresolve, "$Revision: 1.1 $", "$Name: $", __FILE__, "$Author: smas $")
typedef struct {
double sec;
struct timeval start;
struct timeval stop;
} cpt;
#define t_start(x){gettimeofday (&(x.start), NULL);}
#define t_stop(x){gettimeofday (&(x.stop), NULL); x.sec = (double)(x.stop.tv_sec) - (double)(x.start.tv_sec) + \
((double)(x.stop.tv_usec) - (double)(x.start.tv_usec)) / 1000000;}
cpt t_exec;
char * Get_Rooting (LOGT_Rooting);
char * Get_RC (LOGT_RC);
#define USAGE "Usage : %s [ --help | --version [-v] | --event <event name> ]\n"
int main (int argc, char **argv)
{
LOGT_Info * Info;
char * Event;
int i;
if (argc >= 2)
{
if (!strcmp (argv [1], "--help"))
{
fprintf (stderr, USAGE, argv [0]);
return 1;
}
else if (!strcmp (argv [1], "--version"))
{
if (argc >= 3 && !strcmp (argv [2], "-v"))
return VER_Object_Print (stdout, VERD_VERBOSE);
else
return VER_Object_Print (stdout, VERD_MINIMAL);
}
else if (!strcmp (argv [1], "--event"))
{
if (argc != 3)
{
fprintf (stderr, USAGE, argv [0]);
return 0;
}
Event = argv [2];
}
else
{
fprintf (stderr, USAGE, argv [0]);
return 0;
}
}
else
{
fprintf (stderr, USAGE, argv [0]);
return 0;
}
/* Récupération des informations sur un événement */
Info = (LOGT_Info *) malloc (sizeof (LOGT_Info));
if (LOG_Library_Open (0, NULL, LOGD_OPEN | LOGD_DEBUG_ALL) != LOGS_OK)
{
fprintf (stderr, "=> Ouverture de la librairie LIBLOG impossible\n");
return 0;
}
t_start (t_exec);
if (LOG_Event_Info_Get (NULL, &Info, Event) != LOGS_OK)
{
t_stop (t_exec);
fprintf (stderr, "=> Impossible de résoudre l'événement \"%s\"\n", Event);
}
else
{
NDT_Node * Node;
t_stop (t_exec);
fprintf (stdout, "\nEvénement \"%s\" résolu en %.4f sec :\n", Event, t_exec.sec);
fprintf (stdout, "\t- Type : %s (Id=%d)\n", Info->Event_Name, Info->Event_Type);
fprintf (stdout, "\t- Routage : %s\n", Get_Rooting (Info->Rooting));
fprintf (stdout, "\t- Gravité : %c\n", (char)Info->Gravite);
fprintf (stdout, "\t- Code retour : %s\n", Get_RC (Info->RC));
fprintf (stdout, "\t- Format :");
if (Info->Data_List)
{
ND_Node_First_Get (Info->Data_List, &Node);
i = 0;
while (Node)
{
if (i > 0) fprintf (stdout, ",");
fprintf (stdout, " %s", (char *)(Node->Value));
ND_Node_Next_Get (Node, &Node);
i++;
}
}
fprintf (stdout, "\n\n");
}
LOG_Library_Close (LOGD_CLOSE);
free (Info);
return 0;
}
char * Get_Rooting (LOGT_Rooting Rooting)
{
static char lib [20];
switch ((int)Rooting)
{
case LOGD_ROOTING_NULL:
strcpy (lib, "NULL");
break;
case LOGD_ROOTING_STDERR:
strcpy (lib, "STDERR");
break;
case LOGD_ROOTING_DATABASE:
strcpy (lib, "BASE");
break;
case LOGD_ROOTING_DEFAULT:
strcpy (lib, "DEFAULT");
break;
case LOGD_ROOTING_PREVIOUS:
strcpy (lib, "PREVIOUS");
break;
default:
strcpy (lib, "unknown");
break;
}
return lib;
}
char * Get_RC (LOGT_RC RC)
{
static char lib [20];
switch ((int)RC)
{
case LOGD_RC_OK:
strcpy (lib, "OK");
break;
case LOGD_RC_ANOERR:
strcpy (lib, "ANOERR");
break;
case LOGD_RC_REJDON:
strcpy (lib, "REJDON");
break;
case LOGD_RC_REJENR:
strcpy (lib, "REJENR");
break;
case LOGD_RC_WARNING:
strcpy (lib, "WARNING");
break;
case LOGD_RC_RECYCLE:
strcpy (lib, "RECYCLE");
break;
case LOGD_RC_EXIT:
strcpy (lib, "EXIT");
break;
case LOGD_RC_ABEND:
strcpy (lib, "ABEND");
break;
default:
strcpy (lib, "unknown");
break;
}
return lib;
}