- improvements in logger mechanism
This commit is contained in:
43
logger.c
43
logger.c
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
14
logsetup.c
14
logsetup.c
@ -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);
|
||||||
|
Reference in New Issue
Block a user