1 /*----------------------------------------------------------------------------*/
2 /* Xymon RRD handler module. */
3 /* */
4 /* Copyright (C) 2004-2011 Henrik Storner <henrik@hswn.dk> */
5 /* */
6 /* This program is released under the GNU General Public License (GPL), */
7 /* version 2. See the file "COPYING" for details. */
8 /* */
9 /*----------------------------------------------------------------------------*/
10
11 static char apache_rcsid[] = "$Id: do_apache.c 7026 2012-07-13 14:05:20Z storner $";
12
do_apache_rrd(char * hostname,char * testname,char * classname,char * pagepaths,char * msg,time_t tstamp)13 int do_apache_rrd(char *hostname, char *testname, char *classname, char *pagepaths, char *msg, time_t tstamp)
14 {
15 static char *apache_params[] = { "DS:TA:DERIVE:600:0:U",
16 "DS:TKB:DERIVE:600:0:U",
17 "DS:BW:GAUGE:600:1:U",
18 "DS:IW:GAUGE:600:1:U",
19 "DS:CPU:GAUGE:600:0:U",
20 "DS:REQPERSEC:GAUGE:600:0:U",
21 NULL };
22 static void *apache_tpl = NULL;
23
24 char *markers[] = { "Total Accesses:", "Total kBytes:",
25 "BusyWorkers:", "IdleWorkers:", "CPULoad:", "ReqPerSec:", NULL };
26 int i;
27 char *p, *eoln;
28
29 if (apache_tpl == NULL) apache_tpl = setup_template(apache_params);
30
31 /* Apache 1.x uses BusyServers/IdleServers. Convert the status to Apache 2.0 format */
32 if ((p = strstr(msg, "BusyServers:")) != NULL) memcpy(p, "BusyWorkers:", strlen("BusyWorkers:"));
33 if ((p = strstr(msg, "IdleServers:")) != NULL) memcpy(p, "IdleWorkers:", strlen("IdleWorkers:"));
34
35 setupfn("%s.rrd", "apache");
36 snprintf(rrdvalues, sizeof(rrdvalues), "%d", (int)tstamp);
37 i = 0;
38 while (markers[i]) {
39 strcat(rrdvalues, ":");
40 p = strstr(msg, markers[i]);
41 if (p) {
42 eoln = strchr(p, '\n');
43 if (eoln) *eoln = '\0';
44 p = strchr(p, ':')+1;
45 p += strspn(p, " ");
46 strcat(rrdvalues, p);
47 if (eoln) *eoln = '\n';
48 }
49 else {
50 strcat(rrdvalues, "U");
51 }
52 i++;
53 }
54
55 return create_and_update_rrd(hostname, testname, classname, pagepaths, apache_params, apache_tpl);
56 }
57
58