Commit | Line | Data |
---|---|---|
ad787160 C |
1 | ## $Revision: 1.7 $ |
2 | ## @(#) newsinfo.awk falcon@cats.ucsc.edu (jon r. luini) 7/4/92 | |
3 | ## Modified by Robert Elz to understand more reports. | |
4 | ## Modified by Rich $alz for consistent formatting. | |
5 | ## Modified by Chris Schmidt to sort output. | |
6 | BEGIN { | |
7 | unknowns = 0; | |
8 | batcher = 0; | |
9 | client_timeout = 0; | |
10 | ctlinnd_new = 0; | |
11 | ctlinnd_rmg = 0; | |
12 | ctlinnd_seen = 0; | |
13 | innd = 0; | |
14 | innd_bad_ihaves = 0; | |
15 | innd_bad_msgids = 0; | |
16 | innd_bad_sendmes = 0; | |
17 | innd_blockeds = 0; | |
18 | innd_change_groups = 0; | |
19 | innd_newgroups = 0; | |
20 | innd_pauses = 0; | |
21 | innd_points = 0; | |
22 | innd_reloads = 0; | |
23 | innd_restarts = 0; | |
24 | innd_rmgroups = 0; | |
25 | innd_shutdowns = 0; | |
26 | innd_throttles = 0; | |
27 | innxmit = 0; | |
28 | invalid = "~~~~~~~~~~~~~~~~~~~~~~~~" | |
29 | mthreads = 0; | |
30 | mthreads_added = 0; | |
31 | mthreads_expired = 0; | |
32 | mthreads_started = 0; | |
33 | mthreads_turned_off = 0; | |
34 | mthreads_turned_on = 0; | |
35 | nnrp = 0; | |
36 | nnrp_gethostfails = 0; | |
37 | nnrp_noperms = 0; | |
38 | nnrp_readers = 0; | |
39 | nnrp_unrecs = 0; | |
40 | nntplink = 0; | |
41 | rnews_bad = 0; | |
42 | rnews_bad_date = 0; | |
43 | rnews_bad_dist = 0; | |
44 | rnews_bad_ng = 0; | |
45 | rnews_host = 0; | |
46 | rnews_host = 0; | |
47 | rnews_rejects = 0; | |
48 | server_timeout = 0; | |
49 | ||
50 | ctlinnd["a"] = "addhist"; | |
51 | ctlinnd["D"] = "allow"; | |
52 | ctlinnd["b"] = "begin"; | |
53 | ctlinnd["c"] = "cancel"; | |
54 | ctlinnd["u"] = "changegroup"; | |
55 | ctlinnd["d"] = "checkfile"; | |
56 | ctlinnd["e"] = "drop"; | |
57 | ctlinnd["f"] = "flush"; | |
58 | ctlinnd["g"] = "flushlogs"; | |
59 | ctlinnd["h"] = "go"; | |
60 | ctlinnd["i"] = "hangup"; | |
61 | ctlinnd["s"] = "mode"; | |
62 | ctlinnd["j"] = "name"; | |
63 | ctlinnd["k"] = "newgroup"; | |
64 | ctlinnd["l"] = "param"; | |
65 | ctlinnd["m"] = "pause"; | |
66 | ctlinnd["v"] = "readers"; | |
67 | ctlinnd["t"] = "refile"; | |
68 | ctlinnd["C"] = "reject"; | |
69 | ctlinnd["o"] = "reload"; | |
70 | ctlinnd["n"] = "renumber"; | |
71 | ctlinnd["z"] = "reserve"; | |
72 | ctlinnd["p"] = "rmgroup"; | |
73 | ctlinnd["A"] = "send"; | |
74 | ctlinnd["q"] = "shutdown"; | |
75 | ctlinnd["B"] = "signal"; | |
76 | ctlinnd["r"] = "throttle"; | |
77 | ctlinnd["w"] = "trace"; | |
78 | ctlinnd["x"] = "xabort"; | |
79 | ctlinnd["y"] = "xexec"; | |
80 | } | |
81 | ||
82 | ||
83 | ## | |
84 | ## SYSLOG | |
85 | ## | |
86 | $5 == "last" && $6 == "message" && $7 == "repeated" { | |
87 | ## Skip. | |
88 | next; | |
89 | } | |
90 | ||
91 | ||
92 | ## | |
93 | ## NNRP | |
94 | ## | |
95 | $5 ~ /nnrpd.*/ { | |
96 | host = $6; | |
97 | ||
98 | if ($7 == "connect") { | |
99 | nnrp_connect[host]++; | |
100 | nnrp = 1; | |
101 | next; | |
102 | } | |
103 | ||
104 | if ($7 == "exit") { | |
105 | nnrp_articles[host] += $9; | |
106 | nnrp_groups[host] += $11; | |
107 | next; | |
108 | } | |
109 | ||
110 | if ($7 == "posts") { | |
111 | nnrp_posts[host] += $9; | |
112 | nnrp_rejected[host] += $11; | |
113 | next; | |
114 | } | |
115 | ||
116 | if ($7 == "times") { | |
117 | nnrp_times_user[host] += $9; | |
118 | nnrp_times_sys[host] += $11; | |
119 | nnrp_times_elapsed[host] += $13; | |
120 | next; | |
121 | } | |
122 | ||
123 | if ($7 == "group") { | |
124 | nnrp_readers = 1; | |
125 | nnrp_group_request[$8]++; | |
126 | next; | |
127 | } | |
128 | ||
129 | if ($7 == "post") { | |
130 | ## Skip; handled in "posts" above. | |
131 | next; | |
132 | } | |
133 | ||
134 | if ($7 == "unrecognized") { | |
135 | nnrp_unrecs = 1; | |
136 | nnrp_unrec[host]++; | |
137 | next; | |
138 | } | |
139 | ||
140 | if ($7 == "no_permission") { | |
141 | nnrp_noperms = 1; | |
142 | nnrp_noperm[host]++; | |
143 | next; | |
144 | } | |
145 | ||
146 | if ($7 == "timeout") { | |
147 | client_timeout = 1; | |
148 | nnrp_timeout[host]++; | |
149 | next; | |
150 | } | |
151 | ||
152 | if ($6 == "gethostbyaddr:") { | |
153 | nnrp_gethostfails = 1; | |
154 | nnrp_gethostfail[$7]++; | |
155 | next; | |
156 | } | |
157 | ||
158 | if ($7 == "cant" && $8 == "gethostbyaddr") { | |
159 | ## Skip; handled in "gethostbyaddr:" above. | |
160 | next; | |
161 | } | |
162 | } | |
163 | ||
164 | ||
165 | ## | |
166 | ## INND | |
167 | ## | |
168 | $5 == "innd:" { | |
169 | innd = 1; | |
170 | if ( $6 ~ /^[a-zA-Z]:.*/ || $6 ~ /^[dgs]$/ ) { | |
171 | ## A ctlinnd command. | |
172 | ## Note that the last parameter in $6 may be continued in $7 etc | |
173 | n = split($6, ctl, ":"); | |
174 | if (ctlinnd[ctl[1]] == "") { | |
175 | ## Unknown; update this script! | |
176 | print; | |
177 | next; | |
178 | } | |
179 | ctlinnd_type[ctl[1]]++; | |
180 | ctlinnd_seen++; | |
181 | ||
182 | if (ctl[1] == "k") { | |
183 | ## Newgroup. Process it here so we can get the creator. | |
184 | ctlinnd_new++; | |
185 | ctlinnd_newgroups[ctl[2]] = ctl[4]; | |
186 | next; | |
187 | } | |
188 | if (ctl[1] == "p") { | |
189 | ## Rmgroup. Process it here for symmetry. | |
190 | ctlinnd_rmg++; | |
191 | ctlinnd_rmgroups[ctl[2]] = 1; | |
192 | next; | |
193 | } | |
194 | ||
195 | ## Skip others for now. | |
196 | next; | |
197 | } | |
198 | ||
199 | if ( $6 ~ /.*:.*/ ) { | |
200 | n = split($6, path, ":"); | |
201 | host = path[1]; | |
202 | } | |
203 | else | |
204 | host = $6; | |
205 | ||
206 | if ($7 == "connected") { | |
207 | ## Account for the fact that innd says "local connected ##" | |
208 | ## and then "localhost:## closed" | |
209 | if (host == "local") { | |
210 | host = "localhost"; | |
211 | } | |
212 | innd_connect[host]++; | |
213 | next; | |
214 | } | |
215 | ||
216 | if ($7 == "closed") { | |
217 | innd_seconds[host] += $9; | |
218 | innd_accepted[host] += $11; | |
219 | innd_refused[host] += $13; | |
220 | innd_rejected[host] += $15; | |
221 | innd_chkp[host] = 0; | |
222 | if (cp_innd_chkp[host] == 1) { | |
223 | cp_innd_chkp[host] = 0; | |
224 | innd_points--; | |
225 | } | |
226 | next; | |
227 | } | |
228 | if ($7 == "checkpoint") { | |
229 | cp_innd_seconds[host] = $9; | |
230 | cp_innd_accepted[host] = $11; | |
231 | cp_innd_refused[host] = $13; | |
232 | cp_innd_rejected[host] = $15; | |
233 | if (cp_innd_chkp[host] == 0) { | |
234 | cp_innd_chkp[host] = 1; | |
235 | innd_points++; | |
236 | } | |
237 | next; | |
238 | } | |
239 | ||
240 | if ($6 ~ /\/.*/) { | |
241 | ## Skip; handled by "opened/spawned" below. | |
242 | next; | |
243 | } | |
244 | ||
245 | if ($7 == "flush") { | |
246 | innd_flush[host]++; | |
247 | next; | |
248 | } | |
249 | ||
250 | if ($7 == "timeout") { | |
251 | innd_timeout[host]++; | |
252 | next; | |
253 | } | |
254 | ||
255 | if ($7 == "opened" || $7 == "spawned") { | |
256 | n = split($8, blarg, ":"); | |
257 | innd_feed[host] = blarg[n]; | |
258 | next; | |
259 | } | |
260 | ||
261 | if ($7 == "newgroup") { | |
262 | innd_newgroups++; | |
263 | next; | |
264 | } | |
265 | ||
266 | if ($7 == "rmgroup") { | |
267 | innd_rmgroups++; | |
268 | next; | |
269 | } | |
270 | ||
271 | if ($7 == "paused") { | |
272 | innd_pauses++; | |
273 | next; | |
274 | } | |
275 | ||
276 | if ($7 == "throttled") { | |
277 | innd_throttles++; | |
278 | next; | |
279 | } | |
280 | ||
281 | if ($7 == "reload") { | |
282 | innd_reloads++; | |
283 | next; | |
284 | } | |
285 | ||
286 | if ($7 == "change_group") { | |
287 | innd_change_groups++; | |
288 | next; | |
289 | } | |
290 | ||
291 | if ($7 == "shutdown") { | |
292 | innd_shutdowns++; | |
293 | next; | |
294 | } | |
295 | ||
296 | if ($7 == "starting") { | |
297 | innd_restarts++; | |
298 | ||
299 | if (innd_points != 0) { | |
300 | ## Unfinished checkpoints from before; something crashed. | |
301 | for (s in cp_innd_chkp) { | |
302 | if (cp_innd_chkp[s] == 0) | |
303 | continue; | |
304 | innd_seconds[s] += cp_innd_seconds[s]; | |
305 | innd_accepted[s] += cp_innd_accepted[s]; | |
306 | innd_refused[s] += cp_innd_refused[s]; | |
307 | innd_rejected[s] += cp_innd_rejected[s]; | |
308 | cp_innd_chkp[s] = 0; | |
309 | } | |
310 | innd_points = 0; | |
311 | } | |
312 | next; | |
313 | } | |
314 | ||
315 | if ($7 == "bad_ihave") { | |
316 | innd_bad_ihave[host]++; | |
317 | innd_bad_ihaves = 1; | |
318 | next; | |
319 | } | |
320 | ||
321 | if ($7 == "ihave_from_me") { | |
322 | next; | |
323 | } | |
324 | ||
325 | if ($7 == "bad_messageid") { | |
326 | innd_bad_msgid[host]++; | |
327 | innd_bad_msgids = 1; | |
328 | next; | |
329 | } | |
330 | ||
331 | if ($7 == "bad_sendme") { | |
332 | innd_bad_sendme[host]++; | |
333 | innd_bad_sendmes = 1; | |
334 | next; | |
335 | } | |
336 | ||
337 | if ($7 == "blocked" && $8 == "sleeping") { | |
338 | innd_blocked[host]++; | |
339 | innd_blockeds = 1; | |
340 | next; | |
341 | } | |
342 | ||
343 | if ($7 == "exit" && $8 == "0") { | |
344 | ## Program or process finished normally; don't care. | |
345 | next; | |
346 | } | |
347 | ||
348 | if ($7 == "wakeup" || ($7 == "cant" && ($8 == "write" || $8 == "read"))) { | |
349 | ## Skip; handled by "blocked/sleeping" above. | |
350 | next; | |
351 | } | |
352 | ||
353 | if ($7 == "inactive" || $7 == "descriptors" \ | |
354 | || $7 == "outgoing" || $7 == "running" \ | |
355 | || $7 == "lcsetup" || $7 == "ccsetup" \ | |
356 | || $7 == "rcsetup" || $7 == "readclose" \ | |
357 | || $7 == "flush_all" \ | |
358 | ) { | |
359 | ## Skip; for now. | |
360 | next; | |
361 | } | |
362 | } | |
363 | ||
364 | ||
365 | ## | |
366 | ## BATCHER | |
367 | ## | |
368 | $5 ~ /batcher.*/ { | |
369 | host = $7; | |
370 | ||
371 | ## Since times lines are always followed by stats lines, we | |
372 | ## only do the batcher_site[host]++ and batcher=1 once | |
373 | if ($8 == "times") { | |
374 | batcher_times_user[host] += $10; | |
375 | batcher_times_sys[host] += $12; | |
376 | batcher_times_elapsed[host] += $14; | |
377 | batcher_site[host]++; | |
378 | batcher = 1; | |
379 | next; | |
380 | } | |
381 | ||
382 | if ($8 == "stats") { | |
383 | batcher_num[host] += $10; | |
384 | batcher_articles[host] += $12; | |
385 | batcher_bytes[host] += $14; | |
386 | next; | |
387 | } | |
388 | } | |
389 | ||
390 | ||
391 | ## | |
392 | ## INNXMIT | |
393 | ## | |
394 | $5 ~ /innxmit.*/ { | |
395 | if ( $6 ~ /:/ ) { | |
396 | n = split($6, path, ":"); | |
397 | host = path[1]; | |
398 | } | |
399 | else | |
400 | host = $6; | |
401 | ||
402 | if ($7 == "ihave" && $8 == "failed") { | |
403 | ## ihave failed occurs when the server rejects an article, | |
404 | ## and requests it to be resent at the ihave stage - this | |
405 | ## always indicates a server problem (all it has of the article | |
406 | ## is its message-id) most commonly "out of space" - in that | |
407 | ## case we don't really want to count this as an offered | |
408 | ## article, so remember this happened so we can reduce the | |
409 | ## offered count below. | |
410 | ||
411 | innxmit_ihfail[host] = 1; | |
412 | ||
413 | if ($9 == "436" && $11 == "NNTP" && $13 == "out" && $15 ~ /space/) { | |
414 | innxmit_nospace[host]++; | |
415 | next; | |
416 | } | |
417 | } | |
418 | ||
419 | ## Since stats lines are always followed by times lines we | |
420 | ## only do the innxmit_site[host]++ and innxmit=1 once | |
421 | if ($7 == "stats") { | |
422 | innxmit_offered[host] += $9 - innxmit_ihfail[host]; | |
423 | innxmit_accepted[host] += $11; | |
424 | innxmit_rejected[host] += $13; | |
425 | innxmit_failed[host] += $15; | |
426 | innxmit_ihfail[host] = 0; | |
427 | innxmit_site[host]++; | |
428 | innxmit = 1; | |
429 | next; | |
430 | } | |
431 | ||
432 | if ($7 == "times") { | |
433 | innxmit_times_user[host] += $9; | |
434 | innxmit_times_sys[host] += $11; | |
435 | innxmit_times_elapsed[host] += $13; | |
436 | next; | |
437 | } | |
438 | ||
439 | if ($7 == "requeued") { | |
440 | r = $9; | |
441 | for (i = 10; i < NF; i++) | |
442 | r = r " " $i; | |
443 | innxmit_reQ_host[host]++; | |
444 | innxmit_reQ_reason[r]++; | |
445 | next; | |
446 | } | |
447 | ||
448 | if ($7 == "connect" && $9 == "400" \ | |
449 | && (($10 == "No" && $11 == "space") \ | |
450 | || ($11 == "NNTP" && $13 == "out" && $15 ~ /space/))) { | |
451 | ## There is no startup marked for this. | |
452 | innxmit_site[host]++; | |
453 | innxmit_nospace[host]++; | |
454 | next; | |
455 | } | |
456 | ||
457 | if ($7 == "connect" && $9 == "400" && $10 == "loadav") { | |
458 | ## There is no startup marked for this. | |
459 | innxmit_site[host]++; | |
460 | innxmit_hiload[host]++; | |
461 | next; | |
462 | } | |
463 | ||
464 | if ($7 == "connect" && $9 == "400" && $0 ~ /[Ee][Xx][Pp][Ii][Rr]/) { | |
465 | ## There is no startup marked for this. | |
466 | innxmit_site[host]++; | |
467 | innxmit_expire[host]++; | |
468 | next; | |
469 | } | |
470 | ||
471 | if ($7 == "connect" && $9 == "400") { | |
472 | ## There is no startup marked for this. | |
473 | innxmit_site[host]++; | |
474 | innxmit_crefused[host]++; | |
475 | next; | |
476 | } | |
477 | ||
478 | if ($7 == "connect" && $8 == "failed") { | |
479 | ## There is no startup marked for this. | |
480 | innxmit_site[host]++; | |
481 | innxmit_cfail_host[host]++; | |
482 | ||
483 | ## Later, maybe. | |
484 | #r = $9; | |
485 | #for (i = 10; i < NF; i++) | |
486 | # r = r " " $i; | |
487 | #innxmit_cfail_reason[r]++; | |
488 | next; | |
489 | } | |
490 | ||
491 | if ($7 == "authenticate" && $8 == "failed") { | |
492 | ## There is no startup marked for this. | |
493 | innxmit_site[host]++; | |
494 | innxmit_afail_host[host]++; | |
495 | ||
496 | ## Later, maybe. | |
497 | #r = $9; | |
498 | #for (i = 10; i < NF; i++) | |
499 | # r = r " " $i; | |
500 | #innxmit_afail_reason[r]++; | |
501 | next; | |
502 | } | |
503 | } | |
504 | ||
505 | $5 ~ /rnews.*/ { | |
506 | if ($6 == "rejected") { | |
507 | if ($7 == "connection") { | |
508 | rnews_rejects++; | |
509 | i = 8; | |
510 | if ($8 == "400") | |
511 | i++; | |
512 | n = $i; | |
513 | for (i++; i <= NF; i++) | |
514 | n = n " " $i; | |
515 | rnews_r_reject[n]++; | |
516 | next; | |
517 | } | |
518 | if ($7 == "437") { | |
519 | rnews_bad++; | |
520 | if ($8 == "Unwanted" && $9 == "newsgroup") { | |
521 | rnews_bad_ng++; | |
522 | rnews_bng[$10]++; | |
523 | next; | |
524 | } | |
525 | if ($8 == "Unwanted" && $9 == "distribution") { | |
526 | rnews_bad_dist++; | |
527 | rnews_bdist[$10]++; | |
528 | next; | |
529 | } | |
530 | if ($8 == "Bad" && $9 == "\"Date\"") { | |
531 | rnews_bad_date++; | |
532 | next; | |
533 | } | |
534 | } | |
535 | } | |
536 | if ($6 == "offered") { | |
537 | rnews_hosts[$8]++; | |
538 | rnews_host = 1; | |
539 | next; | |
540 | } | |
541 | } | |
542 | ||
543 | ||
544 | ## | |
545 | ## NNTPLINK | |
546 | ## | |
547 | $5 ~ /.*nntplink.*/ { | |
548 | if ( $6 ~ /:/ ) { | |
549 | n = split($6, path, ":"); | |
550 | host = path[1]; | |
551 | } | |
552 | else | |
553 | host = $6; | |
554 | ||
555 | if ($7 == "EOF") { | |
556 | ## There is no startup marked for this. | |
557 | nntplink_site[host]++; | |
558 | nntplink_eof[host]++; | |
559 | next; | |
560 | } | |
561 | ||
562 | if ($10 == "Broken" && $11 == "pipe") { | |
563 | ## There is no startup marked for this. | |
564 | nntplink_site[host]++; | |
565 | nntplink_bpipe[host]++; | |
566 | next; | |
567 | } | |
568 | ||
569 | if ($7 == "greeted" && $10 == "400" \ | |
570 | && (($11 == "No" && $12 == "space") \ | |
571 | || ($12 == "NNTP" && $14 == "out" && $16 ~ /space/))) { | |
572 | ## There is no startup marked for this. | |
573 | nntplink_site[host]++; | |
574 | nntplink_nospace[host]++; | |
575 | next; | |
576 | } | |
577 | ||
578 | if ($7 == "greeted" && $10 == "400" && $11 == "loadav") { | |
579 | ## There is no startup marked for this. | |
580 | nntplink_site[host]++; | |
581 | nntplink_hiload[host]++; | |
582 | next; | |
583 | } | |
584 | ||
585 | if ($7 == "greeted" && $10 == "400" && $0 ~ /[Ee][Xx][Pp][Ii][Rr]/) { | |
586 | ## There is no startup marked for this. | |
587 | nntplink_site[host]++; | |
588 | nntplink_expire[host]++; | |
589 | next; | |
590 | } | |
591 | ||
592 | if ($7 == "greeted" && $10 == "400") { | |
593 | ## Some other failure, or innd throttle for some local reason. | |
594 | ## There is no startup marked for this. | |
595 | nntplink_site[host]++; | |
596 | nntplink_fail[host]++; | |
597 | next; | |
598 | } | |
599 | ||
600 | if ($7 == "socket():") { | |
601 | ## There is no startup marked for this. | |
602 | nntplink_site[host]++; | |
603 | nntplink_sockerr[host]++; | |
604 | next; | |
605 | } | |
606 | ||
607 | if ($7 == "connection" && $8 == "timed" && $9 == "out") { | |
608 | ## There is no startup marked for this. Fake reason. | |
609 | nntplink_bpipe[host]++; | |
610 | nntplink_site[host]++; | |
611 | next; | |
612 | } | |
613 | ||
614 | if ($7 == "sent" && $8 == "authinfo" && $10 == "exiting") { | |
615 | ## There is no startup marked for this. | |
616 | nntplink_site[host]++; | |
617 | nntplink_auth[host]++; | |
618 | } | |
619 | ||
620 | if ($7 == "sent" && $8 == "IHAVE") { | |
621 | ## An "ihave failure": site rejected the article after the | |
622 | ## IHAVE command; most likely it was out of space. Don't | |
623 | ## count this as an offered article, so remember it. Since | |
624 | ## nntplink keeps trying to send we could get many such | |
625 | ## failures in a single connection. For counting purposes | |
626 | ## we pretend that there were several separate connections. | |
627 | nntplink_ihfail[host]++; | |
628 | ||
629 | if ($11 == "436" && $13 == "NNTP" && $15 == "out" && $17 ~ /space/) { | |
630 | nntplink_fake_connects[host]++; | |
631 | nntplink_nospace[host]++; | |
632 | next; | |
633 | } | |
634 | } | |
635 | ||
636 | ## Since stats lines are always followed by xmit lines, we | |
637 | ## only do the nntplink_site[host]++ and nntplink=1 once | |
638 | if ($7 == "stats") { | |
639 | nntplink_offered[host] += $8 - nntplink_ihfail[host]; | |
640 | nntplink_accepted[host] += $10; | |
641 | nntplink_rejected[host] += $12; | |
642 | nntplink_failed[host] += $14; | |
643 | nntplink_ihfail[host] = 0; | |
644 | if (nntplink_fake_connects[host]) { | |
645 | nntplink_site[host] += nntplink_fake_connects[host]; | |
646 | nntplink_fake_connects[host] = 0; | |
647 | } else { | |
648 | nntplink_site[host]++; | |
649 | } | |
650 | nntplink = 1; | |
651 | next; | |
652 | } | |
653 | ||
654 | if ($7 == "xmit") { | |
655 | nntplink_times_user[host] += $9; | |
656 | nntplink_times_sys[host] += $11; | |
657 | nntplink_times_elapsed[host] += $13; | |
658 | next; | |
659 | } | |
660 | ||
661 | if ($7 == "xfer") { | |
662 | ## We can compute this if we need it, but there isn't | |
663 | ## space in the output table for it | |
664 | #nntplink_offer_min[host] += $9; | |
665 | #nntplink_accept_min[host] += $11; | |
666 | next; | |
667 | } | |
668 | ||
669 | ## 503 is the code for timeouts. | |
670 | if ($11 == "503" || $12 == "Timeout") { | |
671 | nntplink_timeout[host]++; | |
672 | timeout = 1; | |
673 | next; | |
674 | } | |
675 | } | |
676 | ||
677 | ||
678 | ## | |
679 | ## NNTPD | |
680 | ## | |
681 | $5 ~ /nntpd.*/ { | |
682 | if ( $6 ~ /.*:.*/ ) { | |
683 | n = split($6, path, ":"); | |
684 | host = path[1]; | |
685 | } | |
686 | else | |
687 | host = $6; | |
688 | ||
689 | if ($7 == "connect") { | |
690 | nntpd_connect[host]++; | |
691 | nntpd = 1; | |
692 | next; | |
693 | } | |
694 | ||
695 | if ($7 == "times") { | |
696 | nntpd_seconds[host] += $9 + $11; | |
697 | nntpd_elapsed[host] += $13; | |
698 | if (nntpd_connect[host] == 0) | |
699 | nntpd_connect[host]++; | |
700 | nntpd_done[host]++; | |
701 | next; | |
702 | } | |
703 | ||
704 | if ($7 == "ihave_stats") { | |
705 | nntpd_accepted[host] += $9; | |
706 | nntpd_refused[host] += $11; | |
707 | nntpd_rejected[host] += $13; | |
708 | next; | |
709 | } | |
710 | ||
711 | if ($7 == "no" && $8 == "space") { | |
712 | nntpd_nospace[host]++; | |
713 | if (nntpd_connect[host] == 0) | |
714 | nntpd_connect[host]++; | |
715 | nntpd_done[host]++; | |
716 | next; | |
717 | } | |
718 | ||
719 | if ($6 == "no" && $7 == "space") | |
720 | next; | |
721 | ||
722 | ## Rest is likely to be reader stuff; skip for now. | |
723 | } | |
724 | ||
725 | ||
726 | ||
727 | ## | |
728 | ## MTHREADS | |
729 | ## | |
730 | $5 ~ /mthreads.*/ { | |
731 | ||
732 | if ($6 == "Started" && $7 == "mthreads") { | |
733 | mthreads = 1; | |
734 | mthreads_started++; | |
735 | next; | |
736 | } | |
737 | ||
738 | if ($6 == "Processed" && $9 == "added" && $12 == "expired") { | |
739 | mthreads = 1; | |
740 | mthreads_added += $10; | |
741 | mthreads_expired += $13; | |
742 | next; | |
743 | } | |
744 | ||
745 | if ($6 == "Turned" && $8 == "groups" && $9 == "on.") { | |
746 | mthreads = 1; | |
747 | mthreads_turned_on += $7; | |
748 | next; | |
749 | } | |
750 | ||
751 | if ($6 == "Turned" && $8 == "groups" && $9 == "off.") { | |
752 | mthreads = 1; | |
753 | mthreads_turned_off += $7; | |
754 | next; | |
755 | } | |
756 | } | |
757 | ||
758 | ||
759 | ## | |
760 | ## UNKNOWN | |
761 | ## | |
762 | { | |
763 | if (unknowns == 0) { | |
764 | printf("Unknown entries from news log file:\n"); | |
765 | unknowns = 1; | |
766 | } | |
767 | print; | |
768 | } | |
769 | ||
770 | ||
771 | ## | |
772 | ## SUMMARIZE DATA | |
773 | ## NOTE: the following are collected but not used right now: | |
774 | ## innd_flush | |
775 | ## innd_feed | |
776 | ## innd_pauses | |
777 | ## innd_throttles | |
778 | ## innd_newgroups | |
779 | ## innd_rmgroups | |
780 | ## innd_reloads | |
781 | ## innd_timeout | |
782 | ## innd_change_groups | |
783 | ## | |
784 | END { | |
785 | printf("\n"); | |
786 | if (innd) { | |
787 | ## INND control statistics. | |
788 | if (ctlinnd_seen) { | |
789 | printf("Control commands to INND\t(%d total)\n\n", ctlinnd_seen); | |
790 | i = 0; | |
791 | for (m in ctlinnd_type) { | |
792 | printf("\t%13s %4d", ctlinnd[m], ctlinnd_type[m]); | |
793 | if (++i == 3) { | |
794 | i = 0; | |
795 | printf("\n"); | |
796 | } | |
797 | } | |
798 | if (i != 0) | |
799 | printf("\n"); | |
800 | printf("\n"); | |
801 | ||
802 | if (ctlinnd_new) { | |
803 | printf("Newsgroups created:\n"); | |
804 | for (m in ctlinnd_newgroups) | |
805 | printf("\t%-30.30s by %s\n", m, ctlinnd_newgroups[m]); | |
806 | printf("\n"); | |
807 | } | |
808 | ||
809 | if (ctlinnd_rmg) { | |
810 | printf("Newsgroups removed:\n"); | |
811 | for (m in ctlinnd_rmgroups) | |
812 | printf("\t%s\n", m); | |
813 | printf("\n"); | |
814 | } | |
815 | } | |
816 | ||
817 | ## INND exchange statistics. | |
818 | printf("Articles received by server\n"); | |
819 | printf("System Connects Offered Took Refuse Rejct Accpt Elapsed\n"); | |
820 | for ( ; ; ) { | |
821 | s = invalid; | |
822 | for (sortindex in innd_connect) | |
823 | if (innd_connect[sortindex] >= 0 && sortindex < s) | |
824 | s = sortindex; | |
825 | if (s == invalid) | |
826 | break; | |
827 | ||
828 | ninnd_connect += innd_connect[s]; | |
829 | ninnd_accept += innd_accepted[s]; | |
830 | ninnd_refuse += innd_refused[s]; | |
831 | ninnd_reject += innd_rejected[s]; | |
832 | ninnd_ela += innd_seconds[s]; | |
833 | offered = innd_accepted[s] + innd_refused[s] + innd_rejected[s]; | |
834 | ninnd_offered += offered; | |
835 | if (offered == 0) | |
836 | offered = 1; | |
837 | percent_accpt = (innd_accepted[s] * 100) / offered; | |
838 | e_hours = innd_seconds[s] / 3600; | |
839 | e_sec = innd_seconds[s] % 3600; | |
840 | e_min = e_sec / 60; | |
841 | e_sec %= 60; | |
842 | ||
843 | printf("%-20.20s %5d %6d %6d %6d %5d %3d%% %3d:%02d:%02d\n", \ | |
844 | s, innd_connect[s], \ | |
845 | innd_accepted[s] + innd_refused[s] + innd_rejected[s], \ | |
846 | innd_accepted[s], innd_refused[s], innd_rejected[s], \ | |
847 | percent_accpt, e_hours, e_min, e_sec); | |
848 | ||
849 | innd_connect[s] = -1; | |
850 | } | |
851 | ||
852 | e_hours = ninnd_ela / 3600; | |
853 | e_sec = ninnd_ela % 3600; | |
854 | e_min = e_sec / 60; | |
855 | e_sec %= 60; | |
856 | they_offered = ninnd_offered; | |
857 | if (they_offered == 0) | |
858 | they_offered = 1; | |
859 | percent_accpt = (ninnd_accept * 100.0)/ (they_offered + 0.1); | |
860 | ||
861 | printf("\n%-20s %5d %6d %6d %6d %5d %3d%% %3d:%02d:%02d\n\n", \ | |
862 | "TOTALS", ninnd_connect, ninnd_offered, ninnd_accept, \ | |
863 | ninnd_refuse, ninnd_reject, percent_accpt, e_hours, e_min, \ | |
864 | e_sec); | |
865 | } | |
866 | ||
867 | ## Miscellaneous innd statistics. | |
868 | if (innd_bad_msgids) { | |
869 | printf("Bad Message-ID's offered\n"); | |
870 | for ( ; ; ) { | |
871 | s = invalid; | |
872 | for (sortindex in innd_bad_msgid) | |
873 | if (innd_bad_msgid[sortindex] >= 0 && sortindex < s) | |
874 | s = sortindex; | |
875 | if (s == invalid) | |
876 | break; | |
877 | ||
878 | printf("%-20.20s %5d\n", s, innd_bad_msgid[s]); | |
879 | ||
880 | innd_bad_msgid[s] = -1; | |
881 | } | |
882 | printf("\n"); | |
883 | } | |
884 | if (innd_bad_ihaves) { | |
885 | printf("Bad ihave control messages received\n"); | |
886 | for ( ; ; ) { | |
887 | s = invalid; | |
888 | for (sortindex in innd_bad_ihave) | |
889 | if (innd_bad_ihave[sortindex] >= 0 && sortindex < s) | |
890 | s = sortindex; | |
891 | if (s == invalid) | |
892 | break; | |
893 | ||
894 | printf("%-20.20s %5d\n", s, innd_bad_ihave[s]); | |
895 | ||
896 | innd_bad_ihave[s] = -1; | |
897 | } | |
898 | printf("\n"); | |
899 | } | |
900 | if (innd_bad_sendmes) { | |
901 | printf("Ignored sendme control messages received\n"); | |
902 | for ( ; ; ) { | |
903 | s = invalid; | |
904 | for (sortindex in innd_bad_sendme) | |
905 | if (innd_bad_sendme[sortindex] >= 0 && sortindex < s) | |
906 | s = sortindex; | |
907 | if (s == invalid) | |
908 | break; | |
909 | ||
910 | printf("%-20.20s %5d\n", s, innd_bad_sendme[s]); | |
911 | ||
912 | innd_bad_sendme[s] = -1; | |
913 | } | |
914 | printf("\n"); | |
915 | } | |
916 | if (innd_blockeds) { | |
917 | printf("Blocked server feeds\n"); | |
918 | for ( ; ; ) { | |
919 | s = invalid; | |
920 | for (sortindex in innd_blocked) | |
921 | if (innd_blocked[sortindex] >= 0 && sortindex < s) | |
922 | s = sortindex; | |
923 | if (s == invalid) | |
924 | break; | |
925 | ||
926 | printf("%-20.20s %5d\n", s, innd_blocked[s]); | |
927 | ||
928 | innd_blocked[s] = -1; | |
929 | } | |
930 | printf("\n"); | |
931 | } | |
932 | ||
933 | ## NNTPD statistics. | |
934 | if (nntpd) { | |
935 | printf("Articles received by NNTPD\n"); | |
936 | printf("System Connects NSpc Fail Offered Took Refuse Rejct Accpt Elapsed\n"); | |
937 | for ( ; ; ) { | |
938 | s = invalid; | |
939 | for (sortindex in nntpd_connect) | |
940 | if (nntpd_connect[sortindex] >= 0 && sortindex < s) | |
941 | s = sortindex; | |
942 | if (s == invalid) | |
943 | break; | |
944 | ||
945 | nnntpd_connect += nntpd_connect[s]; | |
946 | nnntpd_nospace += nntpd_nospace[s]; | |
947 | nnntpd_accept += nntpd_accepted[s]; | |
948 | nnntpd_refuse += nntpd_refused[s]; | |
949 | nnntpd_reject += nntpd_rejected[s]; | |
950 | nnntpd_ela += nntpd_elapsed[s]; | |
951 | nnntpd_done += nntpd_done[s]; | |
952 | offered = nntpd_accepted[s] + nntpd_refused[s] + nntpd_rejected[s]; | |
953 | nnntpd_offered += offered; | |
954 | if (offered == 0) | |
955 | offered = 1; | |
956 | percent_accpt = (nntpd_accepted[s] * 100) / offered; | |
957 | e_hours = nntpd_elapsed[s] / 3600; | |
958 | e_sec = nntpd_elapsed[s] % 3600; | |
959 | e_min = e_sec / 60; | |
960 | e_sec %= 60; | |
961 | ||
962 | printf("%-20.20s %5d %4d %4d %6d %6d %6d %5d %3d%% %3d:%02d:%02d\n", \ | |
963 | s, nntpd_connect[s], nntpd_nospace[s], \ | |
964 | nntpd_connect[s] - nntpd_done[s], \ | |
965 | nntpd_accepted[s] + nntpd_refused[s] + nntpd_rejected[s], \ | |
966 | nntpd_accepted[s], nntpd_refused[s], nntpd_rejected[s], \ | |
967 | percent_accpt, e_hours, e_min, e_sec); | |
968 | ||
969 | nntpd_connect[s] = -1; | |
970 | } | |
971 | ||
972 | e_hours = nnntpd_ela / 3600; | |
973 | e_sec = nnntpd_ela % 3600; | |
974 | e_min = e_sec / 60; | |
975 | e_sec %= 60; | |
976 | they_offered = nnntpd_offered; | |
977 | if (they_offered == 0) | |
978 | they_offered = 1; | |
979 | percent_accpt = (nnntpd_accept * 100.0)/ (they_offered + 0.1); | |
980 | ||
981 | printf("\n%-20s %5d %4d %4d %6d %6d %6d %5d %3d%% %3d:%02d:%02d\n\n", \ | |
982 | "TOTALS", nnntpd_connect, nnntpd_nospace, \ | |
983 | nnntpd_connect - nnntpd_done, \ | |
984 | nnntpd_offered, nnntpd_accept, nnntpd_refuse, nnntpd_reject, \ | |
985 | percent_accpt, e_hours, e_min, e_sec); | |
986 | } | |
987 | ||
988 | ## Innxmit statistics. | |
989 | if (innxmit) { | |
990 | printf("Articles sent by innxmit\n"); | |
991 | printf("System Offrd Took Toss Fail Pct Elapsed CPU Pct\n"); | |
992 | ||
993 | for ( ; ; ) { | |
994 | s = invalid; | |
995 | for (sortindex in innxmit_site) | |
996 | if (innxmit_offered[sortindex] >= 0 && sortindex < s) | |
997 | s = sortindex; | |
998 | if (s == invalid) | |
999 | break; | |
1000 | ||
1001 | we_offered = innxmit_offered[s]; | |
1002 | if (we_offered == 0) | |
1003 | we_offered = 1; | |
1004 | they_take = (innxmit_accepted[s] * 100.0) / we_offered; | |
1005 | e_hours = innxmit_times_elapsed[s] / 3600; | |
1006 | e_sec = innxmit_times_elapsed[s] % 3600; | |
1007 | e_min = e_sec / 60; | |
1008 | e_sec %= 60; | |
1009 | c_hours = (innxmit_times_user[s] + innxmit_times_sys[host]) / 3600; | |
1010 | c_sec = (innxmit_times_user[s] + innxmit_times_sys[s]) % 3600; | |
1011 | c_min = c_sec / 60; | |
1012 | c_sec %= 60; | |
1013 | elapsed = innxmit_times_elapsed[s]; | |
1014 | if (elapsed == 0) | |
1015 | elapsed = 1; | |
1016 | pct = ((innxmit_times_user[s] + innxmit_times_sys[s]) * 100.0) / elapsed; | |
1017 | ||
1018 | printf("%-20.20s %6d %6d %6d %5d %3d%% %3d:%02d:%02d %3d:%02d:%02d %3d%%\n", \ | |
1019 | s, innxmit_offered[s], innxmit_accepted[s], \ | |
1020 | innxmit_rejected[s], innxmit_failed[s], they_take, \ | |
1021 | e_hours, e_min, e_sec, c_hours, c_min, c_sec, pct); | |
1022 | ||
1023 | ixmt += innxmit_offered[s]; | |
1024 | ixmt_accept += innxmit_accepted[s]; | |
1025 | ixmt_reject += innxmit_rejected[s]; | |
1026 | ixmt_failed += innxmit_failed[s]; | |
1027 | ixmt_ela += innxmit_times_elapsed[s]; | |
1028 | ixmt_cpu += innxmit_times_user[s] + innxmit_times_sys[s]; | |
1029 | ||
1030 | innxmit_offered[s] = -1; | |
1031 | } | |
1032 | ||
1033 | we_offered = ixmt; | |
1034 | if (we_offered == 0) | |
1035 | we_offered = 1; | |
1036 | they_take = (ixmt_accept * 100) / we_offered; | |
1037 | e_hours = ixmt_ela / 3600; | |
1038 | e_sec = ixmt_ela % 3600; | |
1039 | e_min = e_sec / 60; | |
1040 | e_sec %= 60; | |
1041 | c_hours = ixmt_cpu / 3600; | |
1042 | c_sec = ixmt_cpu % 3600; | |
1043 | c_min = c_sec / 60; | |
1044 | c_sec %= 60; | |
1045 | if (ixmt_ela == 0) | |
1046 | ixmt_ela = 1; | |
1047 | pct = (ixmt_cpu * 100.0) / ixmt_ela; | |
1048 | ||
1049 | printf("\n%-20.20s %6d %6d %6d %5d %3d%% %3d:%02d:%02d %3d:%02d:%02d %3d%%\n\n", \ | |
1050 | "TOTALS", ixmt, ixmt_accept, ixmt_reject, ixmt_failed, \ | |
1051 | they_take, e_hours, e_min, e_sec, c_hours, c_min, c_sec, pct); | |
1052 | ||
1053 | printf("\n"); | |
1054 | printf("Transmission Connection Attempts ------errors-------------------\n"); | |
1055 | printf("System Conn Ok Auth Load Space Expire Connct Other Pct\n"); | |
1056 | for ( ; ; ) { | |
1057 | s = invalid; | |
1058 | for (sortindex in innxmit_site) | |
1059 | if (innxmit_site[sortindex] >= 0 && sortindex < s) | |
1060 | s = sortindex; | |
1061 | if (s == invalid) | |
1062 | break; | |
1063 | ||
1064 | tot = innxmit_site[s]; | |
1065 | if (tot == 0) | |
1066 | tot = 1; | |
1067 | errs = innxmit_afail_host[s] + innxmit_hiload[s] + \ | |
1068 | innxmit_nospace[s] + innxmit_cfail_host[s] + \ | |
1069 | innxmit_expire[s] + innxmit_crefused[s]; | |
1070 | ok = (innxmit_site[s] - errs); | |
1071 | ||
1072 | printf("%-20.20s %4d %4d %4d %4d %5d %5d %5d %5d %3d%%\n", \ | |
1073 | s, innxmit_site[s], ok, innxmit_afail_host[s], \ | |
1074 | innxmit_hiload[s], innxmit_nospace[s], innxmit_expire[s], \ | |
1075 | innxmit_cfail_host[s], innxmit_crefused[s], \ | |
1076 | (100.0 * ok / tot)); | |
1077 | ||
1078 | ict_tot += innxmit_site[s]; | |
1079 | ict_ok += ok; | |
1080 | ict_afail += innxmit_afail_host[s]; | |
1081 | ict_hiload += innxmit_hiload[s]; | |
1082 | ict_nospace += innxmit_nospace[s]; | |
1083 | ict_expire += innxmit_expire[s]; | |
1084 | ict_crefused += innxmit_crefused[s]; | |
1085 | ict_cfail += innxmit_cfail_host[s]; | |
1086 | ||
1087 | innxmit_site[s] = -1; | |
1088 | } | |
1089 | tot = ict_tot; | |
1090 | if (tot == 0) | |
1091 | tot = 1; | |
1092 | errs = ict_afail + ict_nospace + ict_hiload + ict_cfail + ict_crefused; | |
1093 | ||
1094 | printf("\n%-20.20s %4d %4d %4d %4d %5d %5d %5d %5d %3d%%\n\n", \ | |
1095 | "TOTALS", ict_tot, ict_ok, ict_afail, ict_hiload, \ | |
1096 | ict_nospace, ict_expire, ict_cfail, ict_crefused, \ | |
1097 | (100.0 * ict_ok / tot)); | |
1098 | } | |
1099 | ||
1100 | ## Nntplink statistics. | |
1101 | if (nntplink) { | |
1102 | printf("Articles sent by nntplink\n"); | |
1103 | printf("System Offrd Took Toss Fail Pct Elapsed CPU Pct\n"); | |
1104 | ||
1105 | for ( ; ; ) { | |
1106 | s = invalid; | |
1107 | for (sortindex in nntplink_site) | |
1108 | if (nntplink_offered[sortindex] >= 0 && sortindex < s) | |
1109 | s = sortindex; | |
1110 | if (s == invalid) | |
1111 | break; | |
1112 | ||
1113 | we_offered = nntplink_offered[s]; | |
1114 | if (we_offered == 0) | |
1115 | we_offered = 1; | |
1116 | they_take = (nntplink_accepted[s] * 100.0) / we_offered; | |
1117 | e_hours = nntplink_times_elapsed[s] / 3600; | |
1118 | e_sec = nntplink_times_elapsed[s] % 3600; | |
1119 | e_min = e_sec / 60; | |
1120 | e_sec %= 60; | |
1121 | c_hours = (nntplink_times_user[s] + nntplink_times_sys[host]) / 3600; | |
1122 | c_sec = (nntplink_times_user[s] + nntplink_times_sys[s]) % 3600; | |
1123 | c_min = c_sec / 60; | |
1124 | c_sec %= 60; | |
1125 | elapsed = nntplink_times_elapsed[s]; | |
1126 | if (elapsed == 0) | |
1127 | elapsed = 1; | |
1128 | pct = ((nntplink_times_user[s] + nntplink_times_sys[s]) * 100.0) / elapsed; | |
1129 | ||
1130 | printf("%-20.20s %6d %6d %6d %5d %3d%% %3d:%02d:%02d %3d:%02d:%02d %3d%%\n", \ | |
1131 | s, nntplink_offered[s], nntplink_accepted[s], \ | |
1132 | nntplink_rejected[s], nntplink_failed[s], they_take, \ | |
1133 | e_hours, e_min, e_sec, c_hours, c_min, c_sec, pct); | |
1134 | ||
1135 | nxmt += nntplink_offered[s]; | |
1136 | nxmt_accept += nntplink_accepted[s]; | |
1137 | nxmt_reject += nntplink_rejected[s]; | |
1138 | nxmt_failed += nntplink_failed[s]; | |
1139 | nxmt_ela += nntplink_times_elapsed[s]; | |
1140 | nxmt_cpu += nntplink_times_user[s] + nntplink_times_sys[s]; | |
1141 | ||
1142 | nntplink_offered[s] = -1; | |
1143 | } | |
1144 | ||
1145 | we_offered = nxmt; | |
1146 | if (we_offered == 0) | |
1147 | we_offered = 1; | |
1148 | they_take = (nxmt_accept * 100) / we_offered; | |
1149 | e_hours = nxmt_ela / 3600; | |
1150 | e_sec = nxmt_ela % 3600; | |
1151 | e_min = e_sec / 60; | |
1152 | e_sec %= 60; | |
1153 | c_hours = nxmt_cpu / 3600; | |
1154 | c_sec = nxmt_cpu % 3600; | |
1155 | c_min = c_sec / 60; | |
1156 | c_sec %= 60; | |
1157 | if (nxmt_ela == 0) | |
1158 | nxmt_ela = 1; | |
1159 | pct = (nxmt_cpu * 100.0) / nxmt_ela; | |
1160 | ||
1161 | printf("\n%-20.20s %6d %6d %6d %5d %3d%% %3d:%02d:%02d %3d:%02d:%02d %3d%%\n\n", \ | |
1162 | "TOTALS", nxmt, nxmt_accept, nxmt_reject, nxmt_failed, \ | |
1163 | they_take, e_hours, e_min, e_sec, c_hours, c_min, c_sec, pct); | |
1164 | ||
1165 | printf("Transmission Connection Attempts ------errors-------\n"); | |
1166 | printf("System Conn Ok EOF Sock Load Bpipe Space Exp Auth Other Pct\n"); | |
1167 | for ( ; ; ) { | |
1168 | s = invalid; | |
1169 | for (sortindex in nntplink_site) | |
1170 | if (nntplink_site[sortindex] >= 0 && sortindex < s) | |
1171 | s = sortindex; | |
1172 | if (s == invalid) | |
1173 | break; | |
1174 | ||
1175 | tot = nntplink_site[s]; | |
1176 | if (tot == 0) | |
1177 | tot = 1; | |
1178 | errs = nntplink_eof[s] + nntplink_sockerr[s] + \ | |
1179 | nntplink_hiload[s] + nntplink_bpipe[s] + \ | |
1180 | nntplink_nospace[s] + nntplink_auth[s] + \ | |
1181 | nntplink_expire[s] + nntplink_fail[s]; | |
1182 | ok = (nntplink_site[s] - errs); | |
1183 | ||
1184 | printf("%-20.20s %4d %4d %3d %4d %4d %5d %5d %4d %4d %5d %3d%%\n", \ | |
1185 | s, nntplink_site[s], ok, nntplink_eof[s], \ | |
1186 | nntplink_sockerr[s], nntplink_hiload[s], \ | |
1187 | nntplink_bpipe[s], nntplink_nospace[s], \ | |
1188 | nntplink_expire[s], nntplink_auth[s], nntplink_fail[s], \ | |
1189 | (100.0 * ok / tot)); | |
1190 | ||
1191 | ct_tot += nntplink_site[s]; | |
1192 | ct_ok += ok; | |
1193 | ct_eof += nntplink_eof[s]; | |
1194 | ct_sockerr += nntplink_sockerr[s]; | |
1195 | ct_hiload += nntplink_hiload[s]; | |
1196 | ct_bpipe += nntplink_bpipe[s]; | |
1197 | ct_nospace += nntplink_nospace[s]; | |
1198 | ct_auth += nntplink_auth[s]; | |
1199 | ct_expire += nntplink_expire[s]; | |
1200 | ct_fail += nntplink_fail[s]; | |
1201 | ||
1202 | nntplink_site[s] = -1; | |
1203 | } | |
1204 | tot = ct_tot; | |
1205 | if (tot == 0) | |
1206 | tot = 1; | |
1207 | ||
1208 | printf("\n%-20.20s %4d %4d %3d %4d %4d %5d %5d %4d %4d %5d %3d%%\n\n", \ | |
1209 | "TOTALS", ct_tot, ct_ok, ct_eof, ct_sockerr, ct_hiload, \ | |
1210 | ct_bpipe, ct_nospace, ct_expire, ct_auth, ct_fail, \ | |
1211 | (100.0 * ct_ok / tot)); | |
1212 | } | |
1213 | ||
1214 | ## Batcher statistics. | |
1215 | if (batcher) { | |
1216 | printf("UUCP batches created\n"); | |
1217 | printf("System Offrd Arts Bytes Elapsed Cpu Pct\n"); | |
1218 | ||
1219 | for ( ; ; ) { | |
1220 | s = invalid; | |
1221 | for (sortindex in batcher_site) | |
1222 | if (batcher_site[sortindex] >= 0 && sortindex < s) | |
1223 | s = sortindex; | |
1224 | if (s == invalid) | |
1225 | break; | |
1226 | ||
1227 | e_hours = batcher_times_elapsed[s] / 3600; | |
1228 | e_sec = batcher_times_elapsed[s] % 3600; | |
1229 | e_min = e_sec / 60; | |
1230 | e_sec %= 60; | |
1231 | c_hours = (batcher_times_user[s] + batcher_times_sys[s]) / 3600; | |
1232 | c_sec = (batcher_times_user[s] + batcher_times_sys[s]) % 3600; | |
1233 | c_min = c_sec / 60; | |
1234 | c_sec %= 60; | |
1235 | elapsed = batcher_times_elapsed[s]; | |
1236 | if (elapsed == 0) | |
1237 | elapsed = 1; | |
1238 | pct = ((batcher_times_user[s] + batcher_times_sys[s]) * 100.0) / elapsed; | |
1239 | ||
1240 | printf("%-20.20s %6d %6d %10d %3d:%02d:%02d %3d:%02d:%02d %3d%%\n",\ | |
1241 | s, batcher_num[s], batcher_articles[s], batcher_bytes[s], \ | |
1242 | e_hours, e_min, e_sec, c_hours, c_min, c_sec, pct); | |
1243 | ||
1244 | nbatch += batcher_num[s]; | |
1245 | nbatch_articles += batcher_articles[s]; | |
1246 | nbatch_bytes += batcher_bytes[s]; | |
1247 | nbatch_ela += batcher_times_elapsed[s]; | |
1248 | nbatch_cpu += batcher_times_user[s] + batcher_times_sys[s]; | |
1249 | ||
1250 | batcher_site[s] = -1; | |
1251 | } | |
1252 | ||
1253 | e_hours = nbatch_ela / 3600; | |
1254 | e_sec = nbatch_ela % 3600; | |
1255 | e_min = e_sec / 60; | |
1256 | e_sec %= 60; | |
1257 | c_hours = nbatch_cpu / 3600; | |
1258 | c_sec = nbatch_cpu % 3600; | |
1259 | c_min = c_sec / 60; | |
1260 | c_sec %= 60; | |
1261 | if (nbatch_ela == 0) | |
1262 | nbatch_ela = 1; | |
1263 | pct = (nbatch_cpu * 100.0) / nbatch_ela; | |
1264 | ||
1265 | printf("\n%-20.20s %6d %6d %10d %3d:%02d:%02d %3d:%02d:%02d %3d%%\n\n",\ | |
1266 | "TOTALS", nbatch, nbatch_articles, nbatch_bytes,\ | |
1267 | e_hours, e_min, e_sec, c_hours, c_min, c_sec, pct); | |
1268 | } | |
1269 | ||
1270 | ## Rnews statistics. | |
1271 | if (rnews_host) { | |
1272 | printf("Rnews articles offered from:\n"); | |
1273 | for ( ; ; ) { | |
1274 | s = invalid; | |
1275 | for (sortindex in rnews_hosts) | |
1276 | if (rnews_hosts[sortindex] >= 0 && sortindex < s) | |
1277 | s = sortindex; | |
1278 | if (s == invalid) | |
1279 | break; | |
1280 | ||
1281 | printf("\t%6d\t%s\n", rnews_hosts[s], s); | |
1282 | ||
1283 | rnews_hosts[s] = -1; | |
1284 | } | |
1285 | printf("\n"); | |
1286 | } | |
1287 | if (rnews_rejects) { | |
1288 | printf("Rnews connections rejected %d times\n", rnews_rejects); | |
1289 | for ( ; ; ) { | |
1290 | s = invalid; | |
1291 | for (sortindex in rnews_r_reject) | |
1292 | if (rnews_r_reject[sortindex] >= 0 && sortindex < s) | |
1293 | s = sortindex; | |
1294 | if (s == invalid) | |
1295 | break; | |
1296 | ||
1297 | printf("\t%6d\t%s\n", rnews_r_reject[s], s); | |
1298 | ||
1299 | rnews_r_reject[s] = -1; | |
1300 | } | |
1301 | printf("\n"); | |
1302 | } | |
1303 | if (rnews_bad) { | |
1304 | printf("Rnews bad articles: (Total %d)\n", rnews_bad); | |
1305 | if (rnews_bad_ng) { | |
1306 | printf("Bad newsgroup: %d\n", rnews_bad_ng); | |
1307 | for ( ; ; ) { | |
1308 | s = invalid; | |
1309 | for (sortindex in rnews_bng) | |
1310 | if (rnews_bng[sortindex] >= 0 && sortindex < s) | |
1311 | s = sortindex; | |
1312 | if (s == invalid) | |
1313 | break; | |
1314 | ||
1315 | printf("\t%5d: %s\n", rnews_bng[s], s); | |
1316 | ||
1317 | rnews_bng[s] = -1; | |
1318 | } | |
1319 | } | |
1320 | if (rnews_bad_dist) { | |
1321 | printf("Bad distribution: %d\n", rnews_bad_dist); | |
1322 | for ( ; ; ) { | |
1323 | s = invalid; | |
1324 | for (sortindex in rnews_bdist) | |
1325 | if (rnews_bdist[sortindex] >= 0 && sortindex < s) | |
1326 | s = sortindex; | |
1327 | if (s == invalid) | |
1328 | break; | |
1329 | ||
1330 | printf("\t%5d: %s\n", rnews_bdist[s], s); | |
1331 | ||
1332 | rnews_bdist[s] = -1; | |
1333 | } | |
1334 | } | |
1335 | if (rnews_bad_date) { | |
1336 | printf("Bad date: %d\n", rnews_bad_date); | |
1337 | } | |
1338 | printf("\n"); | |
1339 | } | |
1340 | ||
1341 | ## NNRP statistics. | |
1342 | if (nnrp) { | |
1343 | printf("NNRP readership statistics\n"); | |
1344 | printf("System Conn Articles Groups Post Rej Elapsed CPU Pct\n"); | |
1345 | ||
1346 | for ( ; ; ) { | |
1347 | s = invalid; | |
1348 | for (sortindex in nnrp_connect) | |
1349 | if (nnrp_connect[sortindex] >= 0 && sortindex < s) | |
1350 | s = sortindex; | |
1351 | if (s == invalid) | |
1352 | break; | |
1353 | ||
1354 | ## Report curious pokers elsewhere. | |
1355 | if (nnrp_groups[s] == 0 \ | |
1356 | && nnrp_articles[s] == 0 \ | |
1357 | && nnrp_posts[s] == 0) { | |
1358 | nnrp_curious[s] += nnrp_connect[s]; | |
1359 | curious = 1; | |
1360 | nnrp_connect[s] = -1; | |
1361 | continue; | |
1362 | } | |
1363 | ||
1364 | nconn += nnrp_connect[s]; | |
1365 | nart += nnrp_articles[s]; | |
1366 | ngrp += nnrp_groups[s]; | |
1367 | npost += nnrp_posts[s]; | |
1368 | nrej += nnrp_rejected[s]; | |
1369 | ncpu += (nnrp_times_user[s] + nnrp_times_sys[s]); | |
1370 | nela += nnrp_times_elapsed[s]; | |
1371 | e_hours = nnrp_times_elapsed[s] / 3600; | |
1372 | e_sec = nnrp_times_elapsed[s] % 3600; | |
1373 | e_min = e_sec / 60; | |
1374 | e_sec %= 60; | |
1375 | c_hours = (nnrp_times_user[s] + nnrp_times_sys[s]) / 3600; | |
1376 | c_sec = (nnrp_times_user[s] + nnrp_times_sys[s]) % 3600; | |
1377 | c_min = c_sec / 60; | |
1378 | c_sec %= 60; | |
1379 | elapsed = nnrp_times_elapsed[s]; | |
1380 | if (elapsed == 0) | |
1381 | elapsed = 1; | |
1382 | pct = ((nnrp_times_user[s] + nnrp_times_sys[s]) * 100.0) / elapsed; | |
1383 | ||
1384 | printf("%-20.20s %5d %8d %6d %4d %4d %3d:%02d:%02d %3d:%02d:%02d %3d%%\n",\ | |
1385 | s, nnrp_connect[s], nnrp_articles[s], nnrp_groups[s],\ | |
1386 | nnrp_posts[s], nnrp_rejected[s], e_hours, e_min, e_sec,\ | |
1387 | c_hours, c_min, c_sec, pct); | |
1388 | ||
1389 | nnrp_connect[s] = -1; | |
1390 | } | |
1391 | ||
1392 | e_hours = nela / 3600; | |
1393 | e_sec = nela % 3600; | |
1394 | e_min = e_sec / 60; | |
1395 | e_sec %= 60; | |
1396 | c_hours = ncpu / 3600; | |
1397 | c_sec = ncpu % 3600; | |
1398 | c_min = c_sec / 60; | |
1399 | c_sec %= 60; | |
1400 | if (nela == 0) | |
1401 | nela = 1; | |
1402 | pct = (ncpu * 100.0) / nela; | |
1403 | ||
1404 | printf("\n%-20.20s %5d %8d %6d %4d %4d %3d:%02d:%02d %3d:%02d:%02d %3d%%\n\n",\ | |
1405 | "TOTALS", nconn, nart, ngrp, npost, nrej, e_hours, e_min, \ | |
1406 | e_sec, c_hours, c_min, c_sec, pct); | |
1407 | } | |
1408 | ||
1409 | ## Miscellaneous NNRP statistics. | |
1410 | if (curious) { | |
1411 | printf("Curious NNRP server explorers\n"); | |
1412 | printf("System Conn\n"); | |
1413 | for ( ; ; ) { | |
1414 | s = invalid; | |
1415 | for (sortindex in nnrp_curious) | |
1416 | if (nnrp_curious[sortindex] >= 0 && sortindex < s) | |
1417 | s = sortindex; | |
1418 | if (s == invalid) | |
1419 | break; | |
1420 | ||
1421 | printf("%-20.20s %5d\n", s, nnrp_curious[s]); | |
1422 | ||
1423 | nnrp_curious[s] = -1; | |
1424 | } | |
1425 | printf("\n"); | |
1426 | } | |
1427 | if (nnrp_noperms) { | |
1428 | printf("NNRP no permission clients\n"); | |
1429 | printf("System Conn\n"); | |
1430 | for ( ; ; ) { | |
1431 | s = invalid; | |
1432 | for (sortindex in nnrp_noperm) | |
1433 | if (nnrp_noperm[sortindex] >= 0 && sortindex < s) | |
1434 | s = sortindex; | |
1435 | if (s == invalid) | |
1436 | break; | |
1437 | ||
1438 | printf("%-20.20s %5d\n", s, nnrp_noperm[s]); | |
1439 | ||
1440 | nnrp_noperm[s] = -1; | |
1441 | } | |
1442 | printf("\n"); | |
1443 | } | |
1444 | if (nnrp_unrecs) { | |
1445 | printf("NNRP unrecognized commands\n"); | |
1446 | printf("System Conn\n"); | |
1447 | for ( ; ; ) { | |
1448 | s = invalid; | |
1449 | for (sortindex in nnrp_unrec) | |
1450 | if (nnrp_unrec[sortindex] >= 0 && sortindex < s) | |
1451 | s = sortindex; | |
1452 | if (s == invalid) | |
1453 | break; | |
1454 | ||
1455 | printf("%-20.20s %5d\n", s, nnrp_unrec[s]); | |
1456 | ||
1457 | nnrp_unrec[s] = -1; | |
1458 | } | |
1459 | printf("\n"); | |
1460 | } | |
1461 | if (nnrp_gethostfails) { | |
1462 | printf("NNRP gethostbyname failures\n"); | |
1463 | printf("IP Conn\n"); | |
1464 | for ( ; ; ) { | |
1465 | s = invalid; | |
1466 | for (sortindex in nnrp_gethostfail) | |
1467 | if (nnrp_gethostfail[sortindex] >= 0 && sortindex < s) | |
1468 | s = sortindex; | |
1469 | if (s == invalid) | |
1470 | break; | |
1471 | ||
1472 | printf("%-20.20s %5d\n", s, nnrp_gethostfail[s]); | |
1473 | ||
1474 | nnrp_gethostfail[s] = -1; | |
1475 | } | |
1476 | printf("\n"); | |
1477 | } | |
1478 | if (client_timeout) { | |
1479 | printf("NNRP client timeouts\n"); | |
1480 | printf("System Conn\n"); | |
1481 | for ( ; ; ) { | |
1482 | s = invalid; | |
1483 | for (sortindex in nnrp_timeout) | |
1484 | if (nnrp_timeout[sortindex] >= 0 && sortindex < s) | |
1485 | s = sortindex; | |
1486 | if (s == invalid) | |
1487 | break; | |
1488 | ||
1489 | printf("%-20.20s %5d\n", s, nnrp_timeout[s]); | |
1490 | ||
1491 | nnrp_timeout[s] = -1; | |
1492 | } | |
1493 | printf("\n"); | |
1494 | } | |
1495 | if (server_timeout) { | |
1496 | printf("NNTPLINK remote server timeouts\n"); | |
1497 | printf("System Conn\n"); | |
1498 | for ( ; ; ) { | |
1499 | s = invalid; | |
1500 | for (sortindex in nntplink_timeout) | |
1501 | if (nntplink_timeout[sortindex] >= 0 && sortindex < s) | |
1502 | s = sortindex; | |
1503 | if (s == invalid) | |
1504 | break; | |
1505 | ||
1506 | printf("%-20.20s %5d\n", s, nntplink_timeout[s]); | |
1507 | ||
1508 | nntplink_timeout[s] = -1; | |
1509 | } | |
1510 | printf("\n"); | |
1511 | } | |
1512 | ||
1513 | ## MTHREADS statistics. | |
1514 | if (mthreads) { | |
1515 | printf("Mthreads: Starts Groups on Groups off Articles Expired\n"); | |
1516 | printf("%18d%12d%12d%12d%12d\n", mthreads_started, mthreads_turned_on, \ | |
1517 | mthreads_turned_off, mthreads_added, mthreads_expired); | |
1518 | printf("\n"); | |
1519 | } | |
1520 | ||
1521 | ## Group readership statistics. | |
1522 | if (nnrp_readers) { | |
1523 | for (g in nnrp_group_request) { | |
1524 | x = length(g); | |
1525 | if (x > max) | |
1526 | max = x; | |
1527 | i = index(g, "."); | |
1528 | if (i > 0) | |
1529 | top = substr(g, 1, i - 1); | |
1530 | else | |
1531 | top = g; | |
1532 | category[top] += nnrp_group_request[g]; | |
1533 | } | |
1534 | fmt = sprintf("%%-%ds %%5d\n", max); | |
1535 | ||
1536 | printf("Newsgroup request counts (by category)\n"); | |
1537 | for ( ; ; ) { | |
1538 | s = invalid; | |
1539 | for (sortindex in category) | |
1540 | if (category[sortindex] >= 0 && sortindex < s) | |
1541 | s = sortindex; | |
1542 | if (s == invalid) | |
1543 | break; | |
1544 | ||
1545 | printf(fmt, s, category[s]); | |
1546 | ||
1547 | category[s] = -1; | |
1548 | } | |
1549 | printf("\n"); | |
1550 | ||
1551 | printf("Newsgroup request counts (by newsgroup)\n"); | |
1552 | for ( ; ; ) { | |
1553 | s = invalid; | |
1554 | for (sortindex in nnrp_group_request) | |
1555 | if (nnrp_group_request[sortindex] >= 0 && sortindex < s) | |
1556 | s = sortindex; | |
1557 | if (s == invalid) | |
1558 | break; | |
1559 | ||
1560 | printf(fmt, s, nnrp_group_request[s]); | |
1561 | ||
1562 | nnrp_group_request[s] = -1; | |
1563 | } | |
1564 | printf("\n"); | |
1565 | } | |
1566 | ||
1567 | printf("\n"); | |
1568 | } |