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