- 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;
time_t beforenow;
if (log->name[0] == '\0')
return 0;
LoggerGetDir();
if (dir == NULL)
return 0;
@ -250,8 +252,10 @@ int LoggerWrite(Logger * log, time_t now, int period, char *value)
char path[256];
char tim[256];
if (log->name[0] == '\0')
return 0;
tm = localtime(&now);
if (tm->tm_yday != yday) {
if (tm->tm_yday != yday) { /* new day */
tm->tm_hour = 0;
tm->tm_min = 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) {
log->omitValue = strtod(value, &valp);
if (value != valp) {
if (value != valp && valp[0] == '\0') { /* value was a plain number */
log->omitTime = now;
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 */
} else {
LoggerSetPeriod(log, period);
LoggerWrite0(log, time(NULL), period, log->old);
}
return log;
}

View File

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

View File

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