Path: utzoo!utgpu!cs.utexas.edu!bcm!rice!uw-beaver!ssc-vax!bcsaic!vince From: vince@bcsaic.UUCP (Vince Skahan) Newsgroups: alt.sources Subject: Re: Log summaries Message-ID: <45562@bcsaic.UUCP> Date: 19 Apr 91 20:55:46 GMT References: <1991Apr16.070654.15375@pronto.mh.nl> Organization: Boeing Aerospace and Electronics - Seattle Lines: 183 I've had a couple of requests for perl-versions of the HDB report generator I posted the other day... (there was a typo in the original awk one...there's an extra "{" in there at the beginning of the awk... sorry 'bout that) I've also included a sample data file to test on... 1. unshar this puppy 2. invoke by "sort < hdb-summ.dat | hdb-summ.pl" 3. let me know if you improve or drastically simplify this 4. enjoy... Vince #!/bin/sh # to extract, remove the header and type "sh filename" if `test ! -s ./hdb_summ.pl` then cat > ./hdb_summ.pl << '\End\Of\Shar\' #!/usr/local/bin/perl # # hdb_summ.pl # # this generates a report totalled on a system!user basis for HDB uucp # (basically an edited a2p output of an old-awk original program) # # invoke by "sort < hdb-data-file | this_program.pl" # # ------------ sample data for incoming information ------------ # #dsinc!uucp M (11/9-7:37:59) (C,701,1) [sio1] <- 475 / 5.933 secs, 80 bytes/sec # # ----------- sample data for outgoing information -------------- # #dsinc!bcs212 M (11/9-8:02:16) (C,828,1) [sio1] -> 341 / 0.450 secs, 757 bytes/sec # #------------------------------------------------------------------- # initialize NAME to nothing $NAME = ' '; # step through the data file # outcoming data indicated by -> # ingoing data indicated by <- # find which system by /systemname/ # incoming while (<>) { ($user,$Fld2,$start,$Fld4,$interface,$in_out,$bytes,$Fld8,$time) = split(' ', $_, 9999); #incoming if (/<-/) { $time_in = $time_in + $time; $bytes_in = $bytes_in + $bytes; $total_intime = $total_intime + $time; $total_inbytes = $total_inbytes + $bytes; } #outgoing if (/->/) { $time_out = $time_out + $time; $bytes_out = $bytes_out + $bytes; $total_outtime = $total_outtime + $time; $total_outbytes = $total_outbytes + $bytes; } if ($user ne $NAME) { if ($NAME ne ' ') { write; } $NAME = $user; $host_intime = 0; $host_inbytes = 0; $host_outtime = 0; $host_outbytes = 0; $host_time = 0; $host_bytes = 0; $host_inrate = 0; $host_outrate = 0; $host_pct_out = 0; } if ((($user eq $NAME) || ($user eq ' '))) { if ($in_out eq '<-') { $host_intime = $host_intime + $time; $host_inbytes = $host_inbytes + $bytes; } else { $host_outtime = $host_outtime + $time; $host_outbytes = $host_outbytes + $bytes; } $host_time = $host_intime + $host_outtime; $host_bytes = $host_inbytes + $host_outbytes; if ($host_time > 0) { $host_rate = $host_bytes / $host_time; } if ($host_intime > 0) { $host_inrate = $host_inbytes / $host_intime; } if ($host_outtime > 0) { $host_outrate = $host_outbytes / $host_outtime; } if ($host_bytes > 0) { $host_pct_out = $host_outbytes * 100 / $host_bytes; } } } # summarize, print the last guy, and print the totals pretty write; $total_bytes = $total_inbytes + $total_outbytes; $total_time = $total_intime + $total_outtime; if ($total_time > 0) { $total_rate = $total_bytes / $total_time; } if ($total_intime > 0) { $total_inrate = $total_inbytes / $total_intime; } if ($total_outtime > 0) { $total_outrate = $total_outbytes / $total_outtime; } if ((($total_inbytes > 0) || ($total_outbytes > 0))) { $total_bytes = $total_inbytes + $total_outbytes; $total_time = $total_intime + $total_outtime; $total_pct_out = $total_outbytes * 100 / $total_bytes; $~ = "TOTALS"; write; } format top = Summary of UUCP Statistics Total Incoming Outgoing Percent Bytes Bytes/sec Bytes Bytes/sec Bytes Bytes/sec Outgoing ----- ---------- ---- --------- ---- --------- -------- . format = @<<<<<<<<<<< @>>>>>>> @>> @>>>>>>> @>> @>>>>>>> @>> @>>> $NAME, $host_bytes, $host_rate, $host_inbytes, $host_inrate, $host_outbytes, $host_outrate, $host_pct_out . format TOTALS = @>>>>>>> @>> @>>>>>>> @>> @>>>>>>> @>> @>>> $total_bytes,$total_rate, $host_inbytes, $total_inrate, $total_outbytes,$total_outrate, $total_pct_out . \End\Of\Shar\ fi if `test ! -s ./hdb_summ.dat` then cat > ./hdb_summ.dat << '\End\Of\Shar\' system1!username M (12/5-17:06:02) (C,991,1) [tty000] <- 101292 / 462.083 secs, 219 bytes/sec system1!username M (1/4-7:55:19) (C,1623,1) [tty000] -> 179 / 0.600 secs, 298 bytes/sec system1!username M (1/4-8:24:53) (C,1670,1) [tty000] <- 21514 / 98.616 secs, 218 bytes/sec system1!username M (1/4-8:29:42) (C,1679,1) [tty000] <- 18821 / 86.400 secs, 217 bytes/sec system1!username M (1/4-8:32:38) (C,1689,1) [tty000] -> 189 / 0.650 secs, 290 bytes/sec system1!username M (1/4-8:43:53) (C,1707,1) [tty000] <- 2341 / 11.066 secs, 211 bytes/sec system3!username M (1/5-14:57:46) (C,2345,1) [tty000] <- 49824 / 247.333 secs, 201 bytes/sec system1!username M (3/1-13:24:41) (C,526,1) [tty000] <- 112050 / 510.983 secs, 219 bytes/sec system1!username M (3/2-1:05:48) (C,913,1) [tty000] <- 21514 / 22.800 secs, 943 bytes/sec system2!username M (3/31-4:24:13) (C,2683,1) [tty000] <- 10343 / 47.683 secs, 216 bytes/sec system2!username M (4/13-5:30:16) (C,7613,1) [tty000] <- 705099 / 3215.050 secs, 219 bytes/sec \End\Of\Shar\ fi exit -- Vince Skahan vince@atc.boeing.com ...uw-beaver!bcsaic!vince (ensure your child's future... fire and prosecute striking teachers !)