- improvements in logger mechanism
This commit is contained in:
41
logger.c
41
logger.c
@ -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,11 +331,40 @@ int LoggerPeriod(Logger * log)
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
void LoggerSetPeriod(Logger * log, int period)
|
||||
void LoggerChange(Logger * log, int period, char *newname)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
void LoggerKill(Logger * log)
|
||||
{
|
||||
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -32,9 +32,13 @@ static hdbCallbackReturn LoggerUpdateCallback(pHdb node,
|
||||
|
||||
time(&now);
|
||||
if (now > LoggerLastTime(logger)) { /* never write more than once per second */
|
||||
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);
|
||||
|
Reference in New Issue
Block a user