]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
More verbose output for evtbuild
authorhadaq <hadaq>
Wed, 27 Feb 2002 12:53:19 +0000 (12:53 +0000)
committerhadaq <hadaq>
Wed, 27 Feb 2002 12:53:19 +0000 (12:53 +0000)
hadaq/evtbuild.c
hadaq/worker.h

index 821abb6acb834ac5b56326844ff181be93ca3940..7921e3aa7b654856c22443a98db577dc8150cfa7 100644 (file)
@@ -1,4 +1,4 @@
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evtbuild.c,v 6.36 2001-12-01 22:03:31 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evtbuild.c,v 6.37 2002-02-27 12:53:19 hadaq Exp $";
 
 
 #define _POSIX_C_SOURCE 199506L
@@ -53,6 +53,14 @@ typedef struct TheArgsS {
        char verbosity[PARAM_MAX_VALUE_LEN];
 } TheArgs;
 
+typedef struct TheStatsS {
+       unsigned long *evtsDiscarded;
+       unsigned long *evtsComplete;
+       unsigned long *bytesWritten;
+       unsigned long *triggerType[NTRIGTYPES];
+       unsigned long *trigNr[32];
+} TheStats;
+
 static jmp_buf terminateJmp;
 
 void sigHandler(int sig)
@@ -222,6 +230,86 @@ static int argsFromParam(TheArgs *my, int argc, char *argv[]) {
        desParam(param);
 }
 
+static char *unit(unsigned long v) {
+       static char retVal[6];
+       static char u[] = " kM";
+       int i;
+
+       for (i = 0; v >= 10000 && i < sizeof(u) - 2; v /= 1000, i++) {
+       }
+       sprintf(retVal, "%4d%c", v, u[i]);
+
+       return retVal;
+}
+
+static void statsDump(TheArgs *theArgs, TheStats *my, int interval) {
+       static unsigned long lastEC;
+       static unsigned long lastED;
+       static unsigned long lastBW;
+       static time_t lastTime = 0;
+       time_t dT = time(NULL) - lastTime;
+       int i;
+
+       
+       if (theArgs->isStandalone && dT >= interval) {
+               int col = 0;
+               int row = 0;
+
+               printf("%19s:%6s", "evtsComplete  ", unit(*my->evtsComplete));
+               printf("%19s:%6s", "evtsDiscarded  ", unit(*my->evtsDiscarded));
+               printf("%19s:%6s", "bytesWritten  ", unit(*my->bytesWritten));
+               putchar('\n');
+               row++;
+
+
+               printf("%19s:%6s", "evtsComplete/s", unit(*my->evtsComplete - lastEC));
+               printf("%19s:%6s", "evtsDiscarded/s", unit(*my->evtsDiscarded) - lastED);
+               printf("%19s:%6s", "bytesWritten/s", unit(*my->bytesWritten - lastBW));
+               putchar('\n');
+               row++;
+               lastEC = *my->evtsComplete;
+               lastED = *my->evtsDiscarded;
+               lastBW = *my->bytesWritten;
+
+               col = 0;
+               for (i = 0; i < NTRIGTYPES; i++) {
+                       if (*my->triggerType[i] != 0) {
+                               printf("%17s%02d:%6s", "triggerType", i, unit(*my->triggerType[i]));
+                               if (++col == 3) {
+                                       putchar('\n');
+                                       row++;
+                                       col = 0;
+                               }
+                       }
+               }
+               if (col != 0) {
+                       putchar('\n');
+                       row++;
+               }
+               col = 0;
+
+               for (i = 0; i < theArgs->nrOfMsgs; i++) {
+                       printf("%12s%02d: 0x%08x", "trigNr", i, *my->trigNr[i]);
+                       if (++col == 3) {
+                               putchar('\n');
+                               row++;
+                               col = 0;
+                       }
+               }
+               if (col != 0) {
+                       putchar('\n');
+                       row++;
+               }
+               while(row < 23) {
+                       putchar('\n');
+                       row++;
+               }
+                       
+
+               lastTime += dT;
+       }
+}
+
 
 static void storeInfoStart(const char *n, time_t t, TheArgs *my) {
        Param pS, *p = &pS;
@@ -273,6 +361,7 @@ int main(int argc, char *argv[])
 {
        int i;
        TheArgs theArgsS, *theArgs = &theArgsS;
+       TheStats theStatsS, *theStats = &theStatsS;
        ShmTrans **shmTrans;
        HadTuQueue **hadTuQueue;
        Worker *worker;
@@ -286,10 +375,6 @@ int main(int argc, char *argv[])
        uint32_t currTrigNr;
        uint32_t currId;
 
-       unsigned long *evtsDiscarded;
-       unsigned long *evtsComplete;
-       unsigned long *bytesWritten;
-
        ourTime = time(NULL);
 
        openlog(argv[0], LOG_PID|LOG_PERROR, LOG_LOCAL0);
@@ -393,9 +478,21 @@ int main(int argc, char *argv[])
                }
        }
 
-       evtsDiscarded = Worker_addStatistic(worker, "evtsDiscarded");
-       evtsComplete = Worker_addStatistic(worker, "evtsComplete");
-       bytesWritten = Worker_addStatistic(worker, "bytesWritten");
+       theStats->evtsDiscarded = Worker_addStatistic(worker, "evtsDiscarded");
+       theStats->evtsComplete = Worker_addStatistic(worker, "evtsComplete");
+       theStats->bytesWritten = Worker_addStatistic(worker, "bytesWritten");
+       for (i = 0; i < NTRIGTYPES; i++) {
+               char buf[WORKER_MAX_NAME_LEN];
+
+               sprintf(buf, "triggerType%d", i);
+               theStats->triggerType[i] = Worker_addStatistic(worker, buf);
+       }
+       for (i = 0; i < theArgs->nrOfMsgs; i++) {
+               char buf[WORKER_MAX_NAME_LEN];
+
+               sprintf(buf, "trigNr%d", i);
+               theStats->trigNr[i] = Worker_addStatistic(worker, buf);
+       }
 
        argsDump(theArgs);
        storeInfoStart(argv[0], ourTime, theArgs);
@@ -418,10 +515,7 @@ int main(int argc, char *argv[])
                int step;
                int evtIsBroken = 0;
 
-               Worker_dump(worker, 1);
-#ifndef NDEBUG
-               syslog(LOG_DEBUG, "evtsComplete: %d, evtsDiscarded %d", *evtsComplete, *evtsDiscarded);
-#endif
+               statsDump(theArgs, theStats, 1);
                evt = newEvt(EvtDecoding_64bitAligned, EvtId_data, theArgs->runNr, theArgs->expId);
                for (i = 0; i < theArgs->nrOfMsgs && !evtIsBroken; i += step) {
                        if (theArgs->skipMsgs[currId] & (1 << i)) {
@@ -436,13 +530,19 @@ int main(int argc, char *argv[])
                                }
                                subEvt = HadTuQueue_front(hadTuQueue[i]);
 #ifndef NDEBUG
-                               syslog(LOG_DEBUG, "hadTuQueue[%d]: %p = subEvt: %s", i, subEvt, SubEvt_2charP(subEvt));
+                               syslog(LOG_DEBUG,
+                                       "hadTuQueue[%d]: %p = subEvt: %s",
+                                       i, subEvt, SubEvt_2charP(subEvt));
 #endif
+
+                               (*theStats->trigNr[i]) = SubEvt_trigNr(subEvt);
+
                                if (i == 0) {
                                        currTrigNr = SubEvt_trigNr(subEvt);
                                        currId = SubEvt_id(subEvt);
 #ifndef NDEBUG
-                               syslog(LOG_DEBUG, "currTrigNr: 0x%08x, currId 0x%08x", currTrigNr, currId);
+                               syslog(LOG_DEBUG,
+                                       "currTrigNr: 0x%08x, currId 0x%08x", currTrigNr, currId);
 #endif
                                }
                                if (SubEvt_trigNr(subEvt) == currTrigNr) {
@@ -471,14 +571,15 @@ int main(int argc, char *argv[])
                                writeAnsiTape(outTape, evt, Evt_paddedSize(evt));
                        }
                        Evt_online(evt);
-                       (*evtsComplete)++;
-                       (*bytesWritten) += Evt_size(evt);
+                       (*theStats->evtsComplete)++;
+                       (*theStats->triggerType[currId])++;
+                       (*theStats->bytesWritten) += Evt_size(evt);
                } else {
-                       (*evtsDiscarded)++;
+                       (*theStats->evtsDiscarded)++;
                }
                deleteEvt(evt);
        }
-       Worker_dump(worker, 0);
+       statsDump(theArgs, theStats, 0);
 
        ourTime = time(NULL);
        storeInfoStop(argv[0], ourTime, worker);
index d71a41ebd9aa817383abbca2abd3f24476649f1b..b1ce58b3130eaa50af8192e9682ded3c6c84db98 100644 (file)
@@ -7,9 +7,10 @@
 #include "psxshm.h"
 
 #define WORKER_MAX_NUM_STATS 80
+#define WORKER_MAX_NAME_LEN 32
 
 typedef struct StatisticS {
-       char name[256];
+       char name[WORKER_MAX_NAME_LEN];
        unsigned long value;
 } Statistic;