]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
Logging of messages to the logfile. Sergey.
authorhadaq <hadaq>
Wed, 4 Aug 2010 09:16:37 +0000 (09:16 +0000)
committerhadaq <hadaq>
Wed, 4 Aug 2010 09:16:37 +0000 (09:16 +0000)
hadaq/netmem.c

index a2b0bda8d3cc793cb929558054e988df0df206f7..bc095de9f33fd22218434d6bed58da07c2d11b33 100644 (file)
@@ -1,4 +1,4 @@
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/netmem.c,v 6.43 2010-07-30 09:19:31 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/netmem.c,v 6.44 2010-08-04 09:16:37 hadaq Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #define SYSLOG_NAMES
@@ -21,6 +21,8 @@ static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hada
 
 #define MAXINPATH 100
 
+static char msglog[300];
+
 typedef struct TheArgsS {
        char inPathS[MAXINPATH][PARAM_MAX_NAME_LEN];
        char *inPath[MAXINPATH];
@@ -38,7 +40,8 @@ typedef struct TheArgsS {
 
        char verbosity[PARAM_MAX_VALUE_LEN];
        char shmname[PARAM_MAX_VALUE_LEN];
-       char evtstat[PARAM_MAX_VALUE_LEN];
+       char logname[PARAM_MAX_VALUE_LEN];
+       char hostname[PARAM_MAX_VALUE_LEN];
 
        unsigned long portNr[MAXINPATH];
        int portNrCnt;
@@ -151,7 +154,10 @@ static void argsDefault(TheArgs *my)
 
        strcpy(my->shmname, "");
 
-       sprintf(my->evtstat, "%s_evtstat.txt", getenv("DAQ_SETUP"));
+       sprintf(my->logname, "%s%s_log.txt", getenv("DAQ_SETUP"), my->shmname);
+
+       /* Get host name */
+       gethostname(my->hostname, 30);
 }
 
 static int argsFromCL(TheArgs *my, int argc, char *argv[])
@@ -204,6 +210,8 @@ static int argsFromCL(TheArgs *my, int argc, char *argv[])
                my->inPathCnt = inPathCntFromParam;
        }
 
+       sprintf(my->logname, "%s%s_log.txt", getenv("DAQ_SETUP"), my->shmname);
+
        /* Extract port numbers */
        char fam[32];
        char pa[32];
@@ -268,6 +276,19 @@ static char *unit(unsigned long v)
        return retVal;
 }
 
+static void storeLogInfo(TheArgs *theArgs, const char *msg)
+{
+
+       FILE *fp;
+       char ltime[20];                         /* local time */
+       time_t t = time(NULL);
+       strftime(ltime, 20, "%b %2d %2H:%2M:%2S", localtime(&t));
+
+       fp = fopen(theArgs->logname, "a+");
+       fprintf(fp, "%s %10s %s %2s %13s %s\n", ltime, theArgs->hostname, "EB", theArgs->shmname, "daq_netmem:", msg);
+       fclose(fp);
+}
+
 static int checkDataSources(TheArgs *theArgs, TheStats *theStats)
 {
        int ready2check = 0;
@@ -303,7 +324,10 @@ static int checkDataSources(TheArgs *theArgs, TheStats *theStats)
                if (ready2check) {
                        for (i = 0; i < theArgs->nrOfMsgs; i++) {
                                if (dataSources[i] == 0) {
-                                       fprintf(stderr, "<E> daq_netmem: source %d, port %d: no data received.\n", i, theArgs->portNr[i]);
+                                       sprintf(msglog, "<E> daq_netmem: source %d, port %d: no data received.", i, theArgs->portNr[i]);
+                                       fprintf(stderr, "%s\n", msglog);
+                                       storeLogInfo(theArgs, msglog);
+
                                        go2exit = 1;
                                }
                        }
@@ -352,6 +376,9 @@ static void add2Stat(TheArgs *theArgs, TheStats *my, float interval, ShmTrans **
        /* Add statistic for fill levels of buffers in percentage. */
 
        static time_t t_0 = 0;
+       static time_t t_q = 0;
+       int alarm_fillLevel = 0;
+
        unsigned long buffSize, queueSize;
        time_t t, dT;
        int i;
@@ -383,6 +410,18 @@ static void add2Stat(TheArgs *theArgs, TheStats *my, float interval, ShmTrans **
                                (*my->recvBytesRate[i]) = *nettr[i]->bytesReceived;
                        }
                        lastBytesRecv[i] = *nettr[i]->bytesReceived;
+
+                       if (fillLevel > 95)
+                               alarm_fillLevel = 1;
+               }
+
+               /* Store error message once per minite */
+               if (alarm_fillLevel) {
+                       if (t - t_q > 60) {
+                               storeLogInfo(theArgs, "<E> queue fill level exceeded 95%");
+                               alarm_fillLevel = 0;
+                               t_q = t;
+                       }
                }
 
                t_0 = t;
@@ -396,19 +435,6 @@ static void add2Stat(TheArgs *theArgs, TheStats *my, float interval, ShmTrans **
        }
 }
 
-static void storeEvtStat(TheArgs *myArgs, unsigned long pktsDiscard, unsigned long msgsDiscard, unsigned long queue)
-{
-
-       FILE *fp;
-       char ltime[20];                         /* local time */
-       time_t t = time(NULL);
-       strftime(ltime, 20, "%Y-%m-%d %H:%M:%S", localtime(&t));
-
-       fp = fopen(myArgs->evtstat, "a+");
-       fprintf(fp, "%s %d %s %d %d %d\n", "daq_netmem:  ", (int) getpid(), ltime, queue, pktsDiscard, msgsDiscard);
-       fclose(fp);
-}
-
 static void statsDump(TheArgs *theArgs, NetTrans **my, int interval)
 {
        static unsigned long lastPR[MAXINPATH];
@@ -441,9 +467,6 @@ static void statsDump(TheArgs *theArgs, NetTrans **my, int interval)
                                lastMD[i] = 0;
                        }
 
-                       if ((*my[i]->pktsDiscarded - lastPD[i]) > 0 || (*my[i]->msgsDiscarded - lastMD[i]) > 0)
-                               storeEvtStat(theArgs, *my[i]->pktsDiscarded - lastPD[i], *my[i]->msgsDiscarded - lastMD[i], i);
-
                        lastPR[i] = *my[i]->pktsReceived;
                        lastPD[i] = *my[i]->pktsDiscarded;
                        lastMD[i] = *my[i]->msgsDiscarded;
@@ -542,6 +565,8 @@ int main(int argc, char *argv[])
        sprintf(buf, "%s%s", argv[0], theArgs->shmname);
 
        if (NULL == (worker = Worker_initBegin(buf, sigHandler, theArgs->priority, theArgs->isStandalone))) {
+               sprintf(msglog, "<E> %s, %d: Worker_initBegin: failed to init: %s", __FILE__, __LINE__, strerror(errno));
+               storeLogInfo(theArgs, msglog);
                syslog(LOG_ERR, "%s, %d: %s", __FILE__, __LINE__, strerror(errno));
                exit(EXIT_FAILURE);
        }
@@ -550,6 +575,9 @@ int main(int argc, char *argv[])
 
                netTrans[i] = NetTrans_create(theArgs->inPath[i], 0, worker);
                if (netTrans[i] == NULL) {
+                       sprintf(msglog, "<E> %s, %d: NetTrans_create: failed to create %s: %s", __FILE__, __LINE__, theArgs->inPath[i],
+                                       strerror(errno));
+                       storeLogInfo(theArgs, msglog);
                        syslog(LOG_ERR, "%s, %d: %s", __FILE__, __LINE__, strerror(errno));
                        exit(EXIT_FAILURE);
                }
@@ -560,6 +588,9 @@ int main(int argc, char *argv[])
                shmTrans[i] = ShmTrans_open(buf, 2 * theArgs->queueSize[i]);
 
                if (shmTrans[i] == NULL) {
+                       sprintf(msglog, "<E> %s, %d: ShmTrans_open: failed to open shmem segment %d: %s", __FILE__, __LINE__, i,
+                                       strerror(errno));
+                       storeLogInfo(theArgs, msglog);
                        syslog(LOG_ERR, "%s, %d: %s", __FILE__, __LINE__, strerror(errno));
                        exit(EXIT_FAILURE);
                }