[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Analize Radius Log files



Rosenberg Yigal wrote:
> 
> Before I seat and do it myself, does anyone know about utility that will
> produce
> nice reports out of the RADIUS log files ....?
> 
> thanks.

-- 
I think it useful for you an others
#!/usr/bin/perl
##
# userlog - this program prints a log of a user's activity.
#
# Usage: userlog username detailfile
#   where username = the login of the user in question
#       detailfile = the name of a RADIUS detail file  
#
#   Copyright (C) 1995
#   -Dave Andersen <angio@aros.net>
#
#   Modified from Dave's "Lineparser" to work with 1 user
#   1/1/96 - Joe Hartley <jh@brainiac.com>
#
#
# set the user to look for from the command line 
# $testuser = sprintf("%-8s", $ARGV[0]); 
#   Modified from Eizner Constantin to print right number of second
#   1/7/97 <eizner@research.haifa.ac.il>
#
# Open the file specified on the command line
open(IN, $ARGV[1]) ||
        die "Could not open file $ARGV[1]\n";

$begin_record = 1;
$end_record = 0;

# Variables
# $date - 09/11/75 format  
# $daytime - hh:mm:ss format of _logout_ time    
# $username      
# $time - time online


print("Activity log for user $testuser\n");
print("  Date    Logout   Username   Time online\n");
print("-----------------------------------------\n");
while (<IN>) {
        chop;
        if (!length($_)) {
                if ($end_record) {
                    if ($username =~ $testuser) {
                    	printf("%-8.8s %-8.8s  %-8.8s    %s\n",
  				$date, $daytime, $username,  &hms($time));
  				$TotalTime+=$time;
                                       }
                }
                
                $end_record = 0;
                $begin_record = 1;
               next;
        }
        if ($begin_record && /^[a-zA-Z]/) {
                ($wday, $month, $mday, $daytime, $year) = split;
                $month = &convert_month($month);
                $year =~ s/19//;
                $date = sprintf("%2.2d/%2.2d/%2.2d",
                        $mday ,$month, $year);
                $begin_record = 0;
                $end_record = 1;
                next;
        }
        if ($begin_record) {
                next;
        }
        if (/User-Name/) { 
                s/[^\"]*"([^\"]*).*/$1/;
                s/\s+//g;
                $username = sprintf("%-8s", $_);
                next;
        }
        if (/Acct-Status-Type/) {
                if (!/Stop/) {
                        $begin_record = $end_record = 0;
                        next;
                }
        }

        if (/Acct-Session-Time/) {
                s/Acct-Session-Time = //;
                s/\s+//g;
                $time = $_;
                next;
        }
}


print("-----------------------------------------\n");
printf("Total connection time ,        %s\n\n\n",&hms($TotalTime));

sub convert_month {
        local($_) = $_[0];
        if ($_ eq "Jan") { "01"; }
        elsif ($_ eq "Feb") { "02"; }
        elsif ($_ eq "Mar") { "03"; }
        elsif ($_ eq "Apr") { "04"; }
        elsif ($_ eq "May") { "05"; }
        elsif ($_ eq "Jun") { "06"; }
        elsif ($_ eq "Jul") { "07"; }
        elsif ($_ eq "Aug") { "08"; }
        elsif ($_ eq "Sep") { "09"; }
        elsif ($_ eq "Oct") { "10"; }
        elsif ($_ eq "Nov") { "11"; }
        elsif ($_ eq "Dec") { "12"; }
        else { "-1"; }
}

sub hms {
	local($h,$m);
	local ($s) =shift(@_);
	$m = int($s / 60);
	$s = $s % 60;
	$h = ($m /60);
	$m = $m%60;
	sprintf("%4d:%02d:%02d",$h,$m,$s);
}	

____________________________________________________________________
Constantin Eizner          |   University of Haifa, Computer Center
Network Engineer           |   Mount Carmel,Haifa 31905
Unix System Administrator  |   tel:+972-4-8249299 fax:+972-4-8249177