#!/usr/bin/perl # # Script to check RADIUS accounting logs for Connect-Info and # Calling-Statius-Id and correlate the data. # # Reads logs from standard in and writes info to standard out. # # by Chris Adams # 27 Sep 1997 # http://ro.com/~cadams/files/rad-info.pl # # You can modify this at will, but please send me any improvements you # make. $number = "unknown"; $rate = 0; while (<>) { if (($_ =~ /^$/) || ($_ =~ /^[^\t]/)) { if ($rate != 0) { $area{$number}{cnt} = 0 if (!$area{$number}{cnt}); $area{$number}{avg} = 0 if (!$area{$number}{avg}); $area{$number}{rate}{$rate} = 0 if (!$area{$number}{rate}{$rate}); $area{$number}{avg} += $rate; $area{$number}{cnt}++; $area{$number}{rate}{$rate}++; } $number = "unknown"; $rate = 0; } if (/Connect-Info = \"(\d+)[ \"]/) { $rate = $1; $rate = ($rate - 1) * 1000 if ($rate < 100); $cnt{$rate} = 0 if (! $cnt{$rate}); $cnt{$rate} ++; $total ++; } if (/Calling-Station-Id = \"(\d{3})(\d{3}).*\"/) { $number = "$1-$2"; } } $sum = 0; print "\nConnect Rate summary (rate - % cons - # cons - total % >= rate)\n"; foreach $rate (sort {$b <=> $a} keys %cnt) { $sum += (100 * $cnt{$rate} / $total); printf "%5s %6.2f%% %12d/%-12d %6.2f%%\n", $rate, 100 * $cnt{$rate} / $total, $cnt{$rate}, $total, $sum; } print "\nArea code/exchange summary (area-exchange - avg rate - # cons)\n"; foreach $num (sort keys %area) { printf "%7s %5d %d\n", $num, $area{$num}{avg} / $area{$num}{cnt}, $area{$num}{cnt}; } print "\nDetailed area code/exchange vs. connect rate\n"; foreach $num (sort keys %area) { print "\nArea code-exchange $num\n"; %rates = %{$area{$num}{rate}}; $sum = 0; foreach $rate (sort {$b <=> $a} keys %rates) { $sum += (100 * $rates{$rate} / $area{$num}{cnt}); printf "%5s %6.2f%% %12d/%-12d %6.2f%%\n", $rate, 100 * $rates{$rate} / $area{$num}{cnt}, $rates{$rate}, $area{$num}{cnt}, $sum; } }