Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

msgLogger.c

Go to the documentation of this file.
00001 /*
00002  *Caius Howcroft<howcroft@hep.phy.cam.ac.uk>
00003  */
00004 
00005 #include "minosDaq.h"
00006 #include "msgLog.h"
00007 #include <unistd.h>
00008 #include <stdlib.h>
00009 #include <string.h>
00010 #include <stdio.h>
00011 #include <argp.h>
00012  #include <time.h>
00013 const char* argp_program_bug_address = "Caius Howcroft<howcroft@hep.phy.cam.ac.uk>";
00014 const char* argp_program_version  = "msgLogger 0.1";
00015 static char args_doc[] = "USER MESSAGE";
00016 
00017 typedef struct arguments_t
00018 {
00019   char prio[5];
00020   char message[100];   /*the user message*/
00021   int  nodeId;         /*current node id */         
00022   long pid;            /*Process ID*/
00023   char procname[126];  /*The prcess name*/
00024   long count;          /*the process count*/
00025   long stime;          /*the message timestamp*/
00026   int echo;            /*echo message to stdout*/
00027 
00028 }arguments;
00029 
00030 
00031 static const struct argp_option options[] =
00032 {
00033   {"priority", 'l', "D1/D2/D3/I/N/W/E/C", 0, "Message Priority", 0},
00034   {"node", 'n', "INT", 0, "Minos Node ID", 0},
00035   {"name", 's', "PROCNAME", 0, "Process Name", 0},
00036   {0,  0, 0, 0,"Expert Actions:",0},
00037   {"count", 'c', "INT", 0, "Set message count number", 1},
00038   {"time", 't', "INT", 0, "Set message time (UNIX time)", 1},
00039   {"echo", 'e', 0, 0, "Echo message to stdout", 1},
00040   {"pid", 'p', "INT", 0, "Process PID", 0},
00041   {0}
00042 };
00043 
00044 static error_t parse_opt (int key, char *arg, struct argp_state *state)
00045 {
00046   arguments* args = (arguments*)state->input;
00047   switch (key)
00048     {
00049     case 'l':
00050       strncpy(args->prio, arg, 5);
00051       break;
00052     case 'e':    
00053       args->echo = 1;
00054       break;
00055     case 'c':
00056       args->count = strtol(arg, (char**)NULL, 0);
00057       break;
00058     case 't':
00059       args->stime = strtol(arg, (char**)NULL, 0);
00060       break;
00061     case 's':
00062       strncpy(args->procname,arg , 126);
00063       break;
00064     case 'n':
00065       args->nodeId = strtol(arg, (char**)NULL, 0);
00066       break;
00067     case 'p':
00068       args->pid = strtol(arg, (char**)NULL, 0);
00069       break;
00070     case ARGP_KEY_ARG:
00071       return ARGP_ERR_UNKNOWN;
00072       break;
00073     case ARGP_KEY_ARGS:
00074       { 
00075         int i=0;
00076         for(i=state->next ; i<state->argc;++i)
00077           {
00078             strncat(args->message, " ", 100);
00079             strncat(args->message, state->argv[i], 100);        
00080           }
00081         break;
00082       }
00083     case ARGP_KEY_END:
00084       break;
00085     default:
00086       return ARGP_ERR_UNKNOWN;
00087     }
00088   return 0;
00089 }
00090 
00091 static const char doc[] =
00092 "msgLogger - MINOS Logger script\v Forwards messages to Run Control over UDP.";
00093 
00094 static struct argp argparms = {options, 
00095                                parse_opt, 
00096                                args_doc, 
00097                                doc};
00098 
00099 
00100 int main(int argc, char** argv)
00101 {
00102   long defaultId = MINOS_QUASI_ONLINE;
00103   //default args
00104   arguments dargs;
00105   strcpy(dargs.prio, "I");
00106   dargs.pid=getppid();
00107   strcpy(dargs.procname, "?");
00108   dargs.count=-1;
00109   dargs.stime = time(NULL);
00110   dargs.echo=0;
00111   dargs.nodeId = defaultId;
00112   strcpy(dargs.message, "");
00113   //process args
00114   argp_parse (&argparms, argc, argv, 0, 0, &dargs);
00115   
00116   msgLogInit(dargs.procname);
00117   msgLogNodeIdSet(dargs.nodeId);
00118   logDebugLevelSet(10);
00119   if(dargs.count!=-1) msgLogResetMsgCount(dargs.count);
00120   msgLogPidSet(dargs.pid);
00121   if(dargs.echo)msgLogLocalEchoSet(1);
00122   else msgLogLocalEchoSet(0);
00123   switch(dargs.prio[0])
00124     {
00125     case 'I':
00126     case 'i':
00127       logInfo("%s", dargs.message);
00128       break;
00129     case 'N':
00130     case 'n':
00131       logNotice("%s", dargs.message);
00132       break;
00133     case 'W':
00134     case 'w':
00135       logWarn("%s", dargs.message);
00136       break;
00137     case 'E':
00138     case 'e':
00139       logError("%s", dargs.message);
00140       break;
00141     case 'C':
00142     case 'c':
00143       logCritical("%s", dargs.message);
00144       break;
00145     case 'D':
00146     case 'd':
00147       {
00148         int dbl=0;
00149         switch(dargs.prio[1]){
00150         case '3':dbl=3; break;
00151         case '2':dbl=2; break;
00152         case '1':dbl=3; break;
00153         default: break;
00154         };
00155         logDebug(dbl, "%s", dargs.message);
00156         break;
00157       }
00158     };
00159   msgLogCleanup();
00160   return msgLogGetMsgCount();
00161 }

Generated on Mon Nov 23 05:27:25 2009 for loon by  doxygen 1.3.9.1