Bug in downtime display on info-page
Hi.
This might already be fixed in 4.3, but I'll report it anyway. The info page in 4.2.3 shows the downtime information in the wrong order. In bb-host I added "DOWNTIME=*:5:0445:0555:reboot" to schedule a downtime each Friday morning for a reboot of a server. I know this downtime works as intended, and the field order is according to the man-page. But on the info-page, the downtime is shown as "Planned downtime:All days:5:0445:0555:reboot", so the "day" and "service" fields are mixed up.
/Johan
In <B08F3F3D67451844A7A8A029FCC71E4C164233112E at WIN01.ad.deltamanagement.se> =?iso-8859-1?Q?Johan_Sj=F6berg?= <johan.sjoberg at deltamanagement.se> writes:
This might already be fixed in 4.3, but I'll report it anyway. The info page in 4.2.3 shows the downtime information in the wrong order. In bb-host I added "DOWNTIME=*:5:0445:0555:reboot" to schedule a downtime each Friday morning for a reboot of a server. I know this downtime works as intended, and the field order is according to the man-page. But on the info-page, the downtime is shown as "Planned downtime:All days:5:0445:0555:reboot", so the "day" and "service" fields are mixed up.
Thanks for reporting this - the routine handling the time-display had not been updated to support the extended format. Fixed now. The patch below can be applied to 4.2.3 also, if you want to. Regards, Henrik Index: lib/timefunc.c =================================================================== --- lib/timefunc.c (revision 6532) +++ lib/timefunc.c (working copy) @@ -97,6 +97,7 @@ static strbuffer_t *result = NULL; char *sCopy; char *sItem; + char *itmstbuf; if (result == NULL) result = newstrbuffer(0); clearstrbuffer(result); @@ -120,12 +121,36 @@ } sCopy = strdup(spec); - sItem = strtok(sCopy, ","); + sItem = strtok_r(sCopy, ",", &itmstbuf); while (sItem) { + char *tok, *onebuf, *e1, *e2, *e3, *e4, *e5; + char *days, *starttime, *endtime, *columns, *cause; char *oneday, *dtext; - int daysdone = 0, firstday = 1; - oneday = sItem; + int daysdone = 0, firstday = 1, ecount; + e1 = e2 = e3 = e4 = e5 = NULL; ecount = 0; + e1 = strtok_r(sItem, ":", &onebuf); + if (e1) { ecount++; e2 = strtok_r(NULL, ":", &onebuf); } + if (e2) { ecount++; e3 = strtok_r(NULL, ":", &onebuf); } + if (e3) { ecount++; e4 = strtok_r(NULL, ":", &onebuf); } + if (e4) { ecount++; e5 = strtok_r(NULL, ":", &onebuf); } + if (e5) { ecount++; } + + if (ecount == 3) { + /* Old format: e1=day, e2 = starttime, e3 = endtime */ + days = e1; starttime = e2; endtime = e3; columns = NULL; cause = NULL; + } + else if (ecount == 5) { + columns = e1; days = e2; starttime = e3; endtime = e4; cause = e5; + } + else { + addtobuffer(result, "[Malformed timespec]"); + sItem = NULL; + continue; + } + + oneday = days; + while (!daysdone) { switch (*oneday) { case '*': dtext = "All days"; break; @@ -141,12 +166,25 @@ } if (!firstday) addtobuffer(result, "/"); + addtobuffer(result, dtext); oneday++; firstday = 0; } - sItem = strtok(NULL, ","); + addtobuffer(result, ":"); addtobuffer(result, starttime); + addtobuffer(result, ":"); addtobuffer(result, endtime); + if (columns) { + addtobuffer(result, " (status:"); + if (strcmp(columns, "*") == 0) + addtobuffer(result, "All"); + else + addtobuffer(result, columns); + addtobuffer(result, ")"); + } + if (cause) { addtobuffer(result, " (cause:"); addtobuffer(result, cause); addtobuffer(result, ")"); } + + sItem = strtok_r(NULL, ",", &itmstbuf); if (sItem) addtobuffer(result, ", "); } xfree(sCopy);
participants (2)
-
henrik@hswn.dk
-
johan.sjoberg@deltamanagement.se