-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
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)
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;
{
int i;
TheArgs theArgsS, *theArgs = &theArgsS;
+ TheStats theStatsS, *theStats = &theStatsS;
ShmTrans **shmTrans;
HadTuQueue **hadTuQueue;
Worker *worker;
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);
}
}
- 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);
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)) {
}
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) {
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);