From 037dde2ac45d6800ae9847f59e4cc8e7581fec77 Mon Sep 17 00:00:00 2001 From: hadaq Date: Wed, 4 Aug 2010 09:16:37 +0000 Subject: [PATCH] Logging of messages to the logfile. Sergey. --- hadaq/netmem.c | 71 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 51 insertions(+), 20 deletions(-) diff --git a/hadaq/netmem.c b/hadaq/netmem.c index a2b0bda..bc095de 100644 --- a/hadaq/netmem.c +++ b/hadaq/netmem.c @@ -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, " daq_netmem: source %d, port %d: no data received.\n", i, theArgs->portNr[i]); + sprintf(msglog, " 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, " 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, " %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, " %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, " %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); } -- 2.43.0