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