[hobbit] longer ack alerts

Henrik Stoerner henrik at hswn.dk
Fri Sep 29 12:32:28 CEST 2006


On Fri, Sep 29, 2006 at 10:02:00AM +0100, Jones, Jason (Altrincham) wrote:

> I know I've asked this before and I'm sorry to repeat but could someone
> tell me the steps to add a hour and days input field to the ack alert
> form?  (this is the first time I've altered anything on the hobbit
> webpage side of things), 

It's not quite what you want, but the attached patch lets you enter the
time as "6h" (6 hours) or "2d8h" (2 days + 8 hours).


> also would it be possible to not allow acks longer than 1 week?

That would need some more code in the bb-ack CGI to reject the too-long
acks. Some sort of configuration mechanism would also be needed to set
the maximum time - either globally, or per-host.


Regards,
Henrik

-------------- next part --------------
--- lib/timefunc.c	2006/07/20 16:06:41	1.31
+++ lib/timefunc.c	2006/09/29 10:21:23
@@ -245,6 +245,7 @@
 	return found;
 }
 
+#ifndef CLIENTONLY
 char *check_downtime(char *hostname, char *testname)
 {
 	namelist_t *hinfo = hostinfo(hostname);
@@ -300,6 +301,7 @@
 
 	return NULL;
 }
+#endif
 
 int periodcoversnow(char *tag)
 {
@@ -415,20 +417,30 @@
 	 */
 
 	int result = 0;
-	char *p;
-	char modifier;
+	char *startofval;
 
-	p = dur + strspn(dur, "0123456789");
-	modifier = *p;
-	*p = '\0';
-	result = atoi(dur);
-	*p = modifier;
+	startofval = dur;
+
+	while (startofval && (isdigit((int)*startofval))) {
+		char *p;
+		char modifier;
+		int oneval = 0;
+
+		p = startofval + strspn(startofval, "0123456789");
+		modifier = *p;
+		*p = '\0';
+		oneval = atoi(startofval);
+		*p = modifier;
+
+		switch (modifier) {
+		  case 'm': break;			/* minutes */
+		  case 'h': oneval *= 60; break;	/* hours */
+		  case 'd': oneval *= 1440; break;	/* days */
+		  case 'w': oneval *= 10080; break;	/* weeks */
+		}
 
-	switch (modifier) {
-	  case 'm': break;			/* minutes */
-	  case 'h': result *= 60; break;	/* hours */
-	  case 'd': result *= 1440; break;	/* days */
-	  case 'w': result *= 10080; break;	/* weeks */
+		result += oneval;
+		if (*p) startofval = p+1;
 	}
 
 	return result;
--- web/bb-ack.c	2006/08/11 21:04:17	1.33
+++ web/bb-ack.c	2006/09/29 10:22:07
@@ -133,7 +133,7 @@
 				}
 
 				if (acknum) awalk->acknum = atoi(acknum);
-				if (validity) awalk->validity = atoi(validity);
+				if (validity) awalk->validity = durationvalue(validity);
 				if (ackmsg) awalk->ackmsg = strdup(ackmsg);
 				if (hostname) awalk->hostname = strdup(hostname);
 				if (testname) awalk->testname = strdup(testname);
@@ -161,7 +161,7 @@
 
 	fprintf(output, "    <td>%s</td>\n", (hname ? hname : " "));
 	fprintf(output, "    <td>%s</td>\n", (tname ? tname : " "));
-	fprintf(output, "    <TD><INPUT TYPE=TEXT NAME=\"DELAY_%s\" SIZE=4 MAXLENGTH=4></TD>\n", numstr);
+	fprintf(output, "    <TD><INPUT TYPE=TEXT NAME=\"DELAY_%s\" SIZE=8 MAXLENGTH=20></TD>\n", numstr);
 	fprintf(output, "    <TD><INPUT TYPE=TEXT NAME=\"MESSAGE_%s\" SIZE=60 MAXLENGTH=80></TD>\n", numstr);
 
 	fprintf(output, "    <TD>\n");
@@ -316,7 +316,7 @@
 
 			if (reqtype == ACK_MANY) {
 				if (!awalk->ackmsg) awalk->ackmsg = ackmsgall;
-				if (!awalk->validity && validityall) awalk->validity = atoi(validityall);
+				if (!awalk->validity && validityall) awalk->validity = durationvalue(validityall);
 			}
 
 			count++;


More information about the Xymon mailing list