#!/usr/bin/perl ### # WHO WROTE THIS??? ### #require "perldb.pl"; # Compute SLIP/PPP log times # Arguments -a Process entire file with totals # -t Process only totals # -f File to be processed if not current # -d processing start date (default is entire file) # -l to return all totals for dayuse # -w name of tmp work file for dayuse # user names require "time.pl"; $space=' '; unless (@ARGV[0]) { print "Missing Arguments\n"; print "-a - entire file\n"; print "-t - totals only\n"; print "-f - file name to be processed\n"; print "-d - processing start date (yymmdd)\n"; print "-l - return totals for dayuse\n"; print "-w - tmp work file for dayuse\n"; exit; } # end if test for missing arguments $infile = "/usr/annex/acp_logfile"; $tmpfile = "/tmp/ppp"; $n = $#ARGV; $start_yymmdd = ""; for ($i = 0; $i <= $n; $i++) { if ($ARGV[$i] eq "-a") { $allflag = "true"; } elsif ($ARGV[$i] eq "-t") { $totalflag = "true"; } elsif ($ARGV[$i] eq "-f") { $i++; $infile = $ARGV[$i]; } elsif ($ARGV[$i] eq "-d") { $i++; $start_yymmdd = $ARGV[$i]; } #end start yymmdd elsif ($ARGV[$i] eq "-l") { $logflag = "true"; $totalflag = "true"; } # end log elsif ($ARGV[$i] eq "-w") { $i++; $tmpfile = $ARGV[$i]; } # end tmp file else { ($arg_user,$arg_yymmdd) = split (/:/, $ARGV[$i]); $ip_user_date {$arg_user} = $ARGV[$i]; $userflag = "true"; } # end else } # end for 1 = 1 to n open (IN,$infile) || die "Can't open acp_logfile"; NEXTUSER: while () { chop; ($add,$ether,$port,$date,$time,$type,$action,$user) = split(/:/); if ($logflag) { $start_yymmdd = ''; if ($ip_user_date{$user}) { ($ip_user, $start_yymmdd) = split (/:/, $ip_user_date{$user}); } # end get date } # end log flag if ($start_yymmdd) { if ($date < $start_yymmdd) { next NEXTUSER; } #end date compare } #end if date if ($userflag){ if (!$ip_user_date{$user}) { next NEXTUSER; } # end user test } # end by user or all if (($totalflag) || ($allflag) || ($ip_user_date{$user})) { if (($type eq 'ppp') || ($type eq 'slip')) { if ($action eq 'login') { $login{$user} = "$time:$date"; } elsif ($action eq 'logout') { if (!$login{$user}) { $login{$user} = "010101:$date"; } #end pad user if carry over ($stime,$sdate) = split(':',$login{$user}); $start = &annex2sec($stime); $end = &annex2sec($time); #If we went through midnight, add a day; if ($end < $start) {$end += 86400;} $timeon = $end - $start; $elapsed{$user} += $timeon; if (!$totalflag) { print (&fmt_user($user), ' ', &fmt_date($sdate), ' In: ', &fmt_time($stime),' Out: ', &fmt_time($time), ' Elapsed: ', &fmt_sec($timeon), "\n"); } # end total test } #end elsif action } # type = ppp of slip } # check arguments } close IN; if ($logflag) { open (TMPPPP, ">$tmpfile") || die "Can't open ppp tmp file"; foreach $user ( sort((keys(%elapsed))) ) { $log_time = &fmt_sec($elapsed{$user}); $tmp = join (':', $user, $log_time); print (TMPPPP "$tmp\n"); } close (TMPPPP); } else { print "\n\nTotal Time On For Period:\n"; print "-------------------------\n"; foreach $user ( sort((keys(%elapsed))) ) { print (&fmt_user($user), " ",&fmt_sec($elapsed{$user}), "\n"); } } exit(0); #------------------------------------------------------- #--------------- Subroutines Start Here ---------------- #------------------------------------------------------- sub annex2sec { local($time) = @_; return( &time2sec( &break_annex($time) ) ); } sub fmt_date { local($date) = @_; return( substr($date,2,2).'/'.substr($date,4,2).'/'.substr($date,0,2) ); } sub fmt_time { local($time) = @_; local($s,$m,$h) = &break_annex($time); return ("$h:$m:$s"); } sub break_annex { local($time) = @_; local($h,$m,$s); $h=substr($time,0,2); $m=substr($time,2,2); $s=substr($time,4,2); return ($s,$m,$h); } sub fmt_sec { local(@t) = &sec2time(@_); @t[2] += (@t[3]*24); foreach $a (@t) { if ($a < 10) {$a = "0$a";} } return ("@t[2]:@t[1]:@t[0]"); } sub fmt_user { local($user) = @_; return( $user.substr($space,0,8 - length($user) ).' ' ); }