1 /*----------------------------------------------------------------------------*/
2 /* Xymon RRD handler module.                                                  */
3 /*                                                                            */
4 /* Copyright (C) 2004-2006 Francesco Duranti <fduranti@q8.it>                 */
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 beastat_rcsid[] = "$Id: do_beastat.c 7999 2017-01-06 02:00:06Z jccleaver $";
12 
do_beastat_jta_rrd(char * hostname,char * testname,char * classname,char * pagepaths,char * msg,time_t tstamp)13 int do_beastat_jta_rrd(char *hostname, char *testname, char *classname, char *pagepaths, char *msg, time_t tstamp)
14 {
15 static char *beastat_jta_params[] = { "DS:ActiveTrans:GAUGE:600:0:U",
16 					"DS:SecondsActive:DERIVE:600:0:U",
17 					"DS:TransAbandoned:DERIVE:600:0:U",
18 					"DS:TransCommitted:DERIVE:600:0:U",
19 					"DS:TransHeuristics:DERIVE:600:0:U",
20 					"DS:TransRBackApp:DERIVE:600:0:U",
21 					"DS:TransRBackResource:DERIVE:600:0:U",
22 					"DS:TransRBackSystem:DERIVE:600:0:U",
23 					"DS:TransRBackTimeout:DERIVE:600:0:U",
24 					"DS:TransRBack:DERIVE:600:0:U",
25 					"DS:TransTotCount:DERIVE:600:0:U",
26                                      NULL };
27 static void *beastat_jta_tpl      = NULL;
28 
29 	unsigned long heapfree=0, heapsize=0;
30 	unsigned long acttrans=0, secact=0, trab=0, trcomm=0, trheur=0, totot=0;
31 	unsigned long trrbapp=0, trrbres=0, trrbsys=0, trrbto=0, trrb=0, trtot=0;
32 
33 	dbgprintf("beastat: host %s test %s\n",hostname, testname);
34 
35 	if (strstr(msg, "beastat.pl")) {
36 		setupfn("%s.rrd",testname);
37 		if (beastat_jta_tpl == NULL) beastat_jta_tpl = setup_template(beastat_jta_params);
38 		acttrans=get_long_data(msg,"ActiveTransactionsTotalCount");
39 		secact=get_long_data(msg,"SecondsActiveTotalCount");
40 		trab=get_long_data(msg,"TransactionAbandonedTotalCount");
41 		trcomm=get_long_data(msg,"TransactionCommittedTotalCount");
42 		trheur=get_long_data(msg,"TransactionHeuristicsTotalCount");
43 		trrbapp=get_long_data(msg,"TransactionRolledBackAppTotalCount");
44 		trrbres=get_long_data(msg,"TransactionRolledBackResourceTotalCount");
45 		trrbsys=get_long_data(msg,"TransactionRolledBackSystemTotalCount");
46 		trrbto=get_long_data(msg,"TransactionRolledBackTimeoutTotalCount");
47 		trrb=get_long_data(msg,"TransactionRolledBackTotalCount");
48 		trtot=get_long_data(msg,"TransactionTotalCount");
49 		dbgprintf("beastat: host %s test %s acttrans %ld secact %ld\n",
50 			 hostname, testname, acttrans, secact);
51 		dbgprintf("beastat: host %s test %s TRANS: aband %ld comm %ld heur %ld total\n",
52 			hostname, testname, trab, trcomm, trheur, trtot);
53 		dbgprintf("beastat: host %s test %s RB: app %ld res %ld sys %ld timeout %ld total %ld\n",
54 			hostname, testname, trrbapp, trrbres, trrbsys, trrbto, trrb);
55 		snprintf(rrdvalues, sizeof(rrdvalues), "%d:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld",
56 			(int) tstamp, acttrans, secact, trab, trcomm, trheur, trrbapp,
57 			trrbres, trrbsys, trrbto, trrb, trtot);
58 		create_and_update_rrd(hostname, testname, classname, pagepaths, beastat_jta_params, beastat_jta_tpl);
59 	}
60 	return 0;
61 }
62 
63 
do_beastat_jvm_rrd(char * hostname,char * testname,char * classname,char * pagepaths,char * msg,time_t tstamp)64 int do_beastat_jvm_rrd(char *hostname, char *testname, char *classname, char *pagepaths, char *msg, time_t tstamp)
65 {
66 static char *beastat_jvm_params[] = { "DS:HeapFreeCurrent:GAUGE:600:0:U",
67                                      "DS:HeapSizeCurrent:GAUGE:600:0:U",
68                                      NULL };
69 static void *beastat_jvm_tpl      = NULL;
70 
71 	unsigned long heapfree=0, heapsize=0;
72 
73 	dbgprintf("beastat: host %s test %s\n",hostname, testname);
74 
75 	if (strstr(msg, "beastat.pl")) {
76 		setupfn("%s.rrd",testname);
77 		if (beastat_jvm_tpl == NULL) beastat_jvm_tpl = setup_template(beastat_jvm_params);
78 		heapfree=get_long_data(msg, "HeapFreeCurrent");
79 		heapsize=get_long_data(msg,"HeapSizeCurrent");
80 		dbgprintf("beastat: host %s test %s heapfree %ld heapsize %ld\n",
81 			hostname, testname, heapfree, heapsize);
82 		snprintf(rrdvalues, sizeof(rrdvalues), "%d:%ld:%ld",
83 			(int) tstamp, heapfree, heapsize);
84 		create_and_update_rrd(hostname, testname, classname, pagepaths, beastat_jvm_params, beastat_jvm_tpl);
85 	}
86 	return 0;
87 }
88 
89 
do_beastat_jms_rrd(char * hostname,char * testname,char * classname,char * pagepaths,char * msg,time_t tstamp)90 int do_beastat_jms_rrd(char *hostname, char *testname, char *classname, char *pagepaths, char *msg, time_t tstamp)
91 {
92 static char *beastat_jms_params[] = { "DS:CurrConn:GAUGE:600:0:U",
93                                      "DS:HighConn:GAUGE:600:0:U",
94                                      "DS:TotalConn:DERIVE:600:0:U",
95                                      "DS:CurrJMSSrv:GAUGE:600:0:U",
96                                      "DS:HighJMSSrv:GAUGE:600:0:U",
97                                      "DS:TotalJMSSrv:DERIVE:600:0:U",
98                                      NULL };
99 static void *beastat_jms_tpl      = NULL;
100 
101         unsigned long conncurr=0, connhigh=0, conntotal=0, jmscurr=0, jmshigh=0, jmstotal=0;
102 
103 	dbgprintf("beastat: host %s test %s\n",hostname, testname);
104 
105 	if (strstr(msg, "beastat.pl")) {
106 		setupfn("%s.rrd",testname);
107 		if (beastat_jms_tpl == NULL) beastat_jms_tpl = setup_template(beastat_jms_params);
108 		conncurr=get_long_data(msg, "ConnectionsCurrentCount");
109 		connhigh=get_long_data(msg,"ConnectionsHighCount");
110 		conntotal=get_long_data(msg,"ConnectionsTotalCount");
111 		jmscurr=get_long_data(msg,"JMSServersCurrentCount");
112 		jmshigh=get_long_data(msg,"JMSServersHighCount");
113 		jmstotal=get_long_data(msg,"JMSServersTotalCount");
114 		dbgprintf("beastat: host %s test %s conncurr %ld connhigh %ld conntotal %ld\n",
115 			hostname, testname, conncurr, connhigh, conntotal);
116 		dbgprintf("beastat: host %s test %s jmscurr %ld jmshigh %ld jmstotal %ld\n",
117 			hostname, testname, jmscurr, jmshigh,jmstotal);
118 		snprintf(rrdvalues, sizeof(rrdvalues), "%d:%ld:%ld:%ld:%ld:%ld:%ld",
119 			(int) tstamp, conncurr, connhigh, conntotal, jmscurr, jmshigh, jmstotal);
120 		create_and_update_rrd(hostname, testname, classname, pagepaths, beastat_jms_params, beastat_jms_tpl);
121 	}
122 	return 0;
123 }
124 
do_beastat_exec_rrd(char * hostname,char * testname,char * classname,char * pagepaths,char * msg,time_t tstamp)125 int do_beastat_exec_rrd(char *hostname, char *testname, char *classname, char *pagepaths, char *msg, time_t tstamp)
126 {
127 static char *beastat_exec_params[] = { "DS:ExecThrCurrIdleCnt:GAUGE:600:0:U",
128 					"DS:ExecThrTotalCnt:GAUGE:600:0:U",
129 					"DS:PendReqCurrCnt:GAUGE:600:0:U",
130 					"DS:ServReqTotalCnt:DERIVE:600:0:U",
131 					NULL };
132 static void *beastat_exec_tpl		= NULL;
133 static char *checktest			= "Type=ExecuteQueueRuntime";
134 
135 	char *curline;
136 	char *eoln;
137 	dbgprintf("beastat: host %s test %s\n",hostname, testname);
138 
139 	if (strstr(msg, "beastat.pl")) {
140 		if (beastat_exec_tpl == NULL) beastat_exec_tpl = setup_template(beastat_exec_params);
141 /*
142 ---- Full Status Report ----
143 	Type=ExecuteQueueRuntime - Location=admin - Name=weblogic.kernel.System
144 */
145                 curline=strstr(msg, "---- Full Status Report ----");
146                 if (curline) {
147 			eoln = strchr(curline, '\n');
148                 	curline = (eoln ? (eoln+1) : NULL);
149 		}
150 		while (curline)	{
151 			unsigned long currthr=0, totthr=0,currprq=0,totservrq=0;
152 			char *start=NULL, *execname=NULL, *nameptr=NULL;
153 			if ((start = strstr(curline,checktest))==NULL) break;
154 			if ((eoln = strchr(start, '\n')) == NULL) break;
155 			*eoln = '\0';
156 			if ((nameptr=strstr(start,"Name=")) == NULL ) {
157 				dbgprintf("do_beastat.c: No name found in  host %s test %s line %s\n",
158 					hostname,testname,start);
159 				goto nextline;
160 			}
161 			execname=xstrdup(nameptr+5);
162 	                *eoln = '\n';
163 			start=eoln+1;
164 			if ((eoln = strstr(start,checktest))==NULL) eoln=strstr(start,"dbcheck.pl");
165 			if (eoln)  *(--eoln)='\0';
166 			setupfn2("%s,%s.rrd",testname,execname);
167 			currthr=get_long_data(start, "ExecuteThreadCurrentIdleCount");
168 			totthr=get_long_data(start,"ExecuteThreadTotalCount");
169 			currprq=get_long_data(start,"PendingRequestCurrentCount");
170 			totservrq=get_long_data(start,"ServicedRequestTotalCount");
171 			dbgprintf("beastat: host %s test %s name %s currthr %ld totthr %ld currprq %ld totservrq %ld\n",
172 				hostname, testname, execname, currthr, totthr, currprq, totservrq);
173 			snprintf(rrdvalues, sizeof(rrdvalues), "%d:%ld:%ld:%ld:%ld",
174 				(int) tstamp, currthr, totthr, currprq, totservrq);
175 			create_and_update_rrd(hostname, testname, classname, pagepaths, beastat_exec_params, beastat_exec_tpl);
176 			if (execname) { xfree(execname); execname = NULL; }
177 nextline:
178 			if (eoln) *(eoln)='\n';
179 			curline = (eoln ? (eoln+1) : NULL);
180 		}
181 	}
182 	return 0;
183 }
184 
do_beastat_jdbc_rrd(char * hostname,char * testname,char * classname,char * pagepaths,char * msg,time_t tstamp)185 int do_beastat_jdbc_rrd(char *hostname, char *testname, char *classname, char *pagepaths, char *msg, time_t tstamp)
186 {
187 static char *beastat_jdbc_params[] = { "DS:ActConnAvgCnt:GAUGE:600:0:U",
188 					"DS:ActConnCurrCnt:GAUGE:600:0:U",
189 					"DS:ActConnHighCnt:GAUGE:600:0:U",
190 					"DS:WtForConnCurrCnt:GAUGE:600:0:U",
191 					"DS:ConnDelayTime:GAUGE:600:0:U",
192 					"DS:ConnLeakProfileCnt:GAUGE:600:0:U",
193 					"DS:LeakedConnCnt:GAUGE:600:0:U",
194 					"DS:MaxCapacity:GAUGE:600:0:U",
195 					"DS:NumAvailable:GAUGE:600:0:U",
196 					"DS:NumUnavailable:GAUGE:600:0:U",
197 					"DS:HighNumAvailable:GAUGE:600:0:U",
198 					"DS:HighNumUnavailable:GAUGE:600:0:U",
199 					"DS:WaitSecHighCnt:GAUGE:600:0:U",
200 					"DS:ConnTotalCnt:DERIVE:600:0:U",
201 					"DS:FailToReconnCnt:DERIVE:600:0:U",
202 					"DS:WaitForConnHighCnt:GAUGE:600:0:U",
203 					NULL };
204 static void *beastat_jdbc_tpl		= NULL;
205 static char *checktest			= "Type=JDBCConnectionPoolRuntime";
206 
207 	char *curline;
208 	char *eoln;
209 	dbgprintf("beastat: host %s test %s\n",hostname, testname);
210 
211 	if (strstr(msg, "beastat.pl")) {
212 		if (beastat_jdbc_tpl == NULL) beastat_jdbc_tpl = setup_template(beastat_jdbc_params);
213 /*
214 ---- Full Status Report ----
215 	Type=ExecuteQueueRuntime - Location=admin - Name=weblogic.kernel.System
216 */
217                 curline=strstr(msg, "---- Full Status Report ----");
218                 if (curline) {
219 			eoln = strchr(curline, '\n');
220                 	curline = (eoln ? (eoln+1) : NULL);
221 		}
222 		while (curline)	{
223 			unsigned long acac=0, accc=0, achc=0, wfccc=0, cdt=0, clpc=0, lcc=0;
224 			unsigned long mc=0, na=0, nu=0, hna=0, hnu=0, wshc=0, ctc=0, ftrc=0, wfchc=0;
225 			char *start=NULL, *execname=NULL, *nameptr=NULL;
226 			if ((start = strstr(curline,checktest))==NULL) break;
227 			if ((eoln = strchr(start, '\n')) == NULL) break;
228 			*eoln = '\0';
229 			if ((nameptr=strstr(start,"Name=")) == NULL ) {
230 				dbgprintf("do_beastat.c: No name found in  host %s test %s line %s\n",
231 					hostname,testname,start);
232 				goto nextline;
233 			}
234 			execname=xstrdup(nameptr+5);
235 	                *eoln = '\n';
236 			start=eoln+1;
237 			if ((eoln = strstr(start,checktest))==NULL) eoln=strstr(start,"dbcheck.pl");
238 			if (eoln)  *(--eoln)='\0';
239 			setupfn2("%s,%s.rrd",testname,execname);
240 			acac=get_long_data(start,"ActiveConnectionsAverageCount");
241 			accc=get_long_data(start,"ActiveConnectionsCurrentCount");
242 			achc=get_long_data(start,"ActiveConnectionsHighCount");
243 			wfccc=get_long_data(start,"WaitingForConnectionCurrentCount");
244 			cdt=get_long_data(start,"ConnectionDelayTime");
245 			clpc=get_long_data(start,"ConnectionLeakProfileCount");
246 			lcc=get_long_data(start,"LeakedConnectionCount");
247 			mc=get_long_data(start,"MaxCapacity");
248 			na=get_long_data(start,"NumAvailable");
249 			nu=get_long_data(start,"NumUnavailable");
250 			hna=get_long_data(start,"HighestNumAvailable");
251 			hnu=get_long_data(start,"HighestNumUnavailable");
252 			wshc=get_long_data(start,"WaitSecondsHighCount");
253 			ctc=get_long_data(start,"ConnectionsTotalCount");
254 			ftrc=get_long_data(start,"FailuresToReconnectCount");
255 			wfchc=get_long_data(start,"WaitingForConnectionHighCount");
256 
257 
258 			dbgprintf("beastat: host %s test %s name %s acac %ld accc %ld achc %ld wfccc %ld cdt %ld clpc %ld lcc %ld\n", hostname, testname, execname, acac, accc, achc, wfccc, cdt, clpc, lcc);
259 			dbgprintf("beastat: host %s test %s name %s mc %ld na %ld nu %ld hna %ld hnu %ld wshc %ld ctc %ld ftrc %ld wfchc %ld\n",hostname, testname, execname, mc, na, nu, hna, hnu, wshc, ctc, ftrc, wfchc);
260 
261 			snprintf(rrdvalues, sizeof(rrdvalues), "%d:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld",
262 				(int) tstamp, acac, accc, achc, wfccc, cdt, clpc, lcc,
263 				mc, na, nu, hna, hnu, wshc, ctc, ftrc, wfchc);
264 			create_and_update_rrd(hostname, testname, classname, pagepaths, beastat_jdbc_params, beastat_jdbc_tpl);
265 			if (execname) { xfree(execname); execname = NULL; }
266 nextline:
267 			if (eoln) *(eoln)='\n';
268 			curline = (eoln ? (eoln+1) : NULL);
269 		}
270 	}
271 	return 0;
272 }
273 
274