From 8a817c5e30d54174a064306e38df49698038890d Mon Sep 17 00:00:00 2001 From: zolliker Date: Tue, 19 Jun 2012 06:57:54 +0000 Subject: [PATCH] - improvements in logger mechanism --- logger.c | 43 ++++++++++++++++++++++++++++++++++++++----- logreader.c | 1 + logsetup.c | 14 +++++++++----- 3 files changed, 48 insertions(+), 10 deletions(-) diff --git a/logger.c b/logger.c index 1b5cd406..37d0d631 100644 --- a/logger.c +++ b/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,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; } diff --git a/logreader.c b/logreader.c index 7dd3bb20..d9dbc08d 100644 --- a/logreader.c +++ b/logreader.c @@ -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; diff --git a/logsetup.c b/logsetup.c index a57c7ee6..a8394b97 100644 --- a/logsetup.c +++ b/logsetup.c @@ -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);