- improvements in logger mechanism

This commit is contained in:
zolliker
2012-06-19 06:57:54 +00:00
parent dd1dba8298
commit 8a817c5e30
3 changed files with 48 additions and 10 deletions

View File

@ -153,6 +153,8 @@ int LoggerWrite0(Logger * log, time_t now, int period, char *value)
FILE *fil; FILE *fil;
time_t beforenow; time_t beforenow;
if (log->name[0] == '\0')
return 0;
LoggerGetDir(); LoggerGetDir();
if (dir == NULL) if (dir == NULL)
return 0; return 0;
@ -250,8 +252,10 @@ int LoggerWrite(Logger * log, time_t now, int period, char *value)
char path[256]; char path[256];
char tim[256]; char tim[256];
if (log->name[0] == '\0')
return 0;
tm = localtime(&now); tm = localtime(&now);
if (tm->tm_yday != yday) { if (tm->tm_yday != yday) { /* new day */
tm->tm_hour = 0; tm->tm_hour = 0;
tm->tm_min = 0; tm->tm_min = 0;
tm->tm_sec = 0; tm->tm_sec = 0;
@ -291,7 +295,7 @@ int LoggerWrite(Logger * log, time_t now, int period, char *value)
} }
if (now < log->last + log->period && strcmp(log->old, value) != 0) { if (now < log->last + log->period && strcmp(log->old, value) != 0) {
log->omitValue = strtod(value, &valp); log->omitValue = strtod(value, &valp);
if (value != valp) { if (value != valp && valp[0] == '\0') { /* value was a plain number */
log->omitTime = now; log->omitTime = now;
return 1; return 1;
} }
@ -327,9 +331,38 @@ int LoggerPeriod(Logger * log)
} }
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
void LoggerSetPeriod(Logger * log, int period) void LoggerChange(Logger * log, int period, char *newname)
{ {
LoggerWrite0(log, time(NULL), period, log->old); Logger *other;
time_t t;
if (period < 0) {
period = log->period;
}
if (strcasecmp(newname, log->name) != 0) {
if (log->name[0] != '\0') { /* was not defunct */
LoggerWrite0(log, time(NULL), log->period, log->old);
LoggerWrite0(log, time(NULL), log->period, "");
}
other = LoggerFind(newname); /* look if logger with new name already exists */
if (other) {
/* make defunct */
LoggerWrite0(other, time(NULL), other->period, other->old);
LoggerWrite0(other, time(NULL), other->period, "");
other->name[0] = '\0';
}
free(log->name);
log->name = strdup(newname);
t = time(NULL) - 1;
if (lastLife != 0 && lastLife + period < t) {
t = lastLife + period;
}
LoggerWrite(log, t, period, ""); /* value was undefined since last life of server */
} else {
LoggerWrite0(log, time(NULL), period, log->old);
}
} }
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
@ -424,7 +457,7 @@ Logger *LoggerMake(char *name, int period, int exact)
} }
LoggerWrite(log, t, period, ""); /* value was undefined since last life of server */ LoggerWrite(log, t, period, ""); /* value was undefined since last life of server */
} else { } else {
LoggerSetPeriod(log, period); LoggerWrite0(log, time(NULL), period, log->old);
} }
return log; return log;
} }

View File

@ -253,6 +253,7 @@ static int LogReader(SConnection * pCon, SicsInterp * pSics, void *pData,
int idir; int idir;
char *colon; char *colon;
/* argtolower(argc, argv); */ /* argtolower(argc, argv); */
if (argc < 4) if (argc < 4)
goto illarg; goto illarg;

View File

@ -32,9 +32,13 @@ static hdbCallbackReturn LoggerUpdateCallback(pHdb node,
time(&now); time(&now);
if (now > LoggerLastTime(logger)) { /* never write more than once per second */ if (now > LoggerLastTime(logger)) { /* never write more than once per second */
str = formatValue(value, node); if (GetHdbProp(node, "geterror") == NULL) {
LoggerWrite(logger, time(NULL), LoggerPeriod(logger), GetCharArray(str)); str = formatValue(value, node);
DeleteDynString(str); LoggerWrite(logger, time(NULL), LoggerPeriod(logger), GetCharArray(str));
DeleteDynString(str);
} else {
LoggerWrite(logger, time(NULL), LoggerPeriod(logger), "");
}
} }
return hdbContinue; return hdbContinue;
} }
@ -110,8 +114,8 @@ static int LogSetup(SConnection * pCon, SicsInterp * pSics, void *pData,
} }
period = atoi(argv[2]); period = atoi(argv[2]);
} }
if (logger != 0) { /* logger exists already, changed only period */ if (logger != 0) { /* logger exists already */
LoggerSetPeriod(logger, period); LoggerChange(logger, period, name);
} else { } else {
logger = LoggerMake(name, period, !numeric); logger = LoggerMake(name, period, !numeric);
LoggerSetNumeric(logger, numeric); LoggerSetNumeric(logger, numeric);