#!/usr/local/bin/perl
#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 "/usr/sbin/time.pl";

$space='        ';
$infile = "/usr/annex/acp_logfile";
$tmpfile = "/tmp/ppp";
$n = $#ARGV;
$start_yymmdd = "";
$arg_user=$login;
$ip_user_date {$arg_user} = $login;
$userflag = "true";
open (IN,$infile)
        || die "Can't open acp_logfile";

NEXTUSER: while (<IN>) {        
        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) ).'  ' );
}

