|
|
#!/usr/bin/perl
|
|
|
#
|
|
|
# It is a log file analyser for 'binkleyforce' mailer.
|
|
|
#
|
|
|
# Copyright (c) 1998-99 by Alexander Belkin
|
|
|
#
|
|
|
# $Id$:
|
|
|
#
|
|
|
# If you have any questions, suggestions or wishes, feel free to contact
|
|
|
# with me. My address: 2:5020/1398.11@fidonet
|
|
|
#
|
|
|
# To post into news, use bflan |inews -h -O -S
|
|
|
$program_name = "bforce-lan v1.0/Perl/Linux";
|
|
|
$station_name = "My Station";
|
|
|
$log_file = "/var/log/bforce/bf-log.ttyS0";
|
|
|
$news_header = "From: Statistic Robot <postmaster\@fido.xxx.local>\n".
|
|
|
"Newsgroups: junk\n".
|
|
|
"Subject: Sessions statistic.\n";
|
|
|
|
|
|
#main
|
|
|
#{
|
|
|
if( &ReadLog($log_file) == 0 )
|
|
|
{
|
|
|
print $news_header;
|
|
|
print "\n";
|
|
|
print "\"$station_name\" statistic from <$TimeFirst> to <$TimeLast>\n";
|
|
|
print "\n";
|
|
|
&TotalStatistic();
|
|
|
print "\n";
|
|
|
&SessionsStatistic();
|
|
|
}
|
|
|
exit(0);
|
|
|
#}
|
|
|
|
|
|
sub ReadLog
|
|
|
{
|
|
|
my($start);
|
|
|
|
|
|
if( open( FLOG, $_[0] ) == 0 )
|
|
|
{
|
|
|
print "Can't open log \"$_[0]\": $!\n";
|
|
|
return 1;
|
|
|
}
|
|
|
$start = 0;
|
|
|
$cnt = 0;
|
|
|
$TimeFirst = "";
|
|
|
$TimeLast = "";
|
|
|
|
|
|
# Read in information from logfile
|
|
|
|
|
|
while( <FLOG> )
|
|
|
{
|
|
|
chomp;
|
|
|
|
|
|
( $Mon, $Day, $Time, $Pid, $Text ) = split( /[ \t]+/, $_, 5 );
|
|
|
|
|
|
if( $TimeFirst eq "" )
|
|
|
{
|
|
|
$TimeFirst = "$Mon $Day $Time";
|
|
|
}
|
|
|
|
|
|
if( $start == 0 )
|
|
|
{
|
|
|
if( !defined($Connect[$cnt]) )
|
|
|
{
|
|
|
$Address[$cnt] = "";
|
|
|
$Connect[$cnt] = "?????";
|
|
|
$InFiles[$cnt] = 0;
|
|
|
$OutFiles[$cnt] = 0;
|
|
|
$InBytes[$cnt] = 0;
|
|
|
$OutBytes[$cnt] = 0;
|
|
|
$Status[$cnt] = "U";
|
|
|
$Success[$cnt] = " ";
|
|
|
}
|
|
|
if( $Text =~ /^calling/ )
|
|
|
{
|
|
|
$Text =~ /^calling ([\d:\/.]+)/;
|
|
|
$PidsCall{$Pid} = $1;
|
|
|
$Calls{$1} = 0 if (!defined( $Calls{$1} ));
|
|
|
$Calls{$1}++;
|
|
|
}
|
|
|
elsif( $Text =~ /^connect/ )
|
|
|
{
|
|
|
$Text =~ /^connect "\D*(\d+).*$/;
|
|
|
$Connect[$cnt] = $1;
|
|
|
}
|
|
|
elsif( $Text =~ /^TCP\/IP connect/ )
|
|
|
{
|
|
|
$Connect[$cnt] = "TCPIP";
|
|
|
}
|
|
|
elsif( $Text =~ /^outbound (\S+) session/ )
|
|
|
{
|
|
|
$start = 1;
|
|
|
$Time =~ /^(..):(..):(..)$/;
|
|
|
$Start[$cnt] = ( $1 * 60 + $2 ) * 60 + $3;
|
|
|
$Direction[$cnt] = "O";
|
|
|
$Address[$cnt] = $PidsCall{$Pid};
|
|
|
$MySexyPid = $Pid;
|
|
|
next;
|
|
|
}
|
|
|
elsif( $Text =~ /^inbound (\S+) session/ )
|
|
|
{
|
|
|
$start = 1;
|
|
|
$Time =~ /^(..):(..):(..)$/;
|
|
|
$Start[$cnt] = ( $1 * 60 + $2 ) * 60 + $3;
|
|
|
$Direction[$cnt] = "I";
|
|
|
# $kAddress[$cnt] = $PidsCall{$Pid} if( defined($PidsCall{$Pid}) );
|
|
|
$MySexyPid = $Pid;
|
|
|
next;
|
|
|
}
|
|
|
next;
|
|
|
}
|
|
|
|
|
|
if( ($start == 1) && ($Pid eq $MySexyPid) )
|
|
|
{
|
|
|
if( $Text =~ /^remote is (\w+),(\w+)$/ ) {
|
|
|
my $stat_ = $1;
|
|
|
my $sec_ = $2;
|
|
|
$Status[$cnt] = ( $stat_ eq "listed" ? "L" : "U" ) . ( $sec_ eq "protected" ? "P" : "N" );
|
|
|
}
|
|
|
elsif( $Text =~ /^[ \t]*Address :/ )
|
|
|
{
|
|
|
next if( $Address[$cnt] ne "" );
|
|
|
$Text =~ /^.+:[ \t]+([\d:.\/]+).*$/;
|
|
|
$Address[$cnt] = $1;
|
|
|
}
|
|
|
elsif( $Text =~ /^rcvd: \".+\" \d+/ )
|
|
|
{
|
|
|
$Text =~ /^rcvd: \".+\" (\d+)/;
|
|
|
$InBytes[$cnt] += $1;
|
|
|
$InFiles[$cnt] ++;
|
|
|
}
|
|
|
elsif( $Text =~ /^sent: \".+\" \d+/ )
|
|
|
{
|
|
|
$Text =~ /^sent: \".+\" (\d+)/;
|
|
|
$OutBytes[$cnt] += $1;
|
|
|
$OutFiles[$cnt] ++;
|
|
|
}
|
|
|
elsif( $Text =~ /^session rc = \d+/ )
|
|
|
{
|
|
|
$Text =~ /^session rc = (\d+)/;
|
|
|
if( $1 != 0 )
|
|
|
{
|
|
|
$Success[$cnt] = "A";
|
|
|
}
|
|
|
$Time =~ /^(..):(..):(..)$/;
|
|
|
$Finish[$cnt] = ( $1 * 60 + $2 ) * 60 + $3;
|
|
|
$OnLine[$cnt] = $Finish[$cnt] - $Start[$cnt];
|
|
|
$OnLine[$cnt] += 86400 if(( $Finish[$cnt] - $Start[$cnt] ) < 0 );
|
|
|
$start = 0;
|
|
|
$cnt++;
|
|
|
}
|
|
|
}
|
|
|
# got another PID!
|
|
|
elsif( $Text =~ /^connect \".+\"/
|
|
|
|| $Text =~ /^inbound (\S+) session/
|
|
|
|| $Text =~ /^outbound (\S+) session/ )
|
|
|
{
|
|
|
# Possible there was incorrectly terminated session
|
|
|
# due to mailer crash or killing, so getting this string
|
|
|
# can mean that we need to break reading session statistic?
|
|
|
# But we can also get it if log file used not only by one
|
|
|
# mailer at the same time, so.. ignore :)
|
|
|
}
|
|
|
} # end of while( <FLOG> )
|
|
|
|
|
|
close(FLOG);
|
|
|
|
|
|
$TimeLast = "$Mon $Day $Time" if( $Mon && $Day && $Time );
|
|
|
}
|
|
|
|
|
|
sub SessionsStatistic
|
|
|
{
|
|
|
local ($addr, $start, $finish, $online, $ibyte, $obyte, $cps, $speed);
|
|
|
my ($i);
|
|
|
|
|
|
$~ = HEADER;
|
|
|
write;
|
|
|
$~ = EACH;
|
|
|
|
|
|
for ($i = 0; $i < $cnt; $i++)
|
|
|
{
|
|
|
$addr = $Address[$i];
|
|
|
$stat = "$Direction[$i]$Status[$i]$Success[$i]";
|
|
|
$start = sec2str($Start[$i], "short");
|
|
|
$finish = sec2str($Finish[$i], "short");
|
|
|
$online = sec2str($OnLine[$i], "long");
|
|
|
$ibyte = $InBytes[$i];
|
|
|
$in = $InFiles[$i];
|
|
|
$obyte = $OutBytes[$i];
|
|
|
$on = $OutFiles[$i];
|
|
|
$cps = int( ($ibyte + $obyte) / $OnLine[$i] ) if ($OnLine[$i] > 0);
|
|
|
$speed = $Connect[$i];
|
|
|
$ibyte = num2siz( $ibyte );
|
|
|
$obyte = num2siz( $obyte );
|
|
|
write;
|
|
|
}
|
|
|
|
|
|
$~ = FOOTER;
|
|
|
write;
|
|
|
}
|
|
|
|
|
|
sub TotalStatistic
|
|
|
{
|
|
|
undef( %hSystems );
|
|
|
undef( %hCalls );
|
|
|
undef( %hTimes );
|
|
|
undef( %hSessions );
|
|
|
undef( %hInBytes );
|
|
|
undef( %hOutBytes );
|
|
|
undef( %hInFiles );
|
|
|
undef( %hOutFiles );
|
|
|
local($cal, $ses, $time, $ibyte, $obyte, $inum, $onum, $icps, $ocps);
|
|
|
local($acal, $ases, $atime, $aibyte, $aobyte, $ainum, $aonum, $aicps, $aocps);
|
|
|
local($sys);
|
|
|
my($i);
|
|
|
|
|
|
$acal = 0;
|
|
|
$ases = 0;
|
|
|
$atime = 0;
|
|
|
$aibyte = 0;
|
|
|
$aobyte = 0;
|
|
|
$ainum = 0;
|
|
|
$aonum = 0;
|
|
|
$aicps = 0;
|
|
|
$aocps = 0;
|
|
|
|
|
|
for( $i = 0; $i < $cnt; $i++ )
|
|
|
{
|
|
|
$sys = $Address[$i];
|
|
|
if( !defined($hSystems{$sys}) )
|
|
|
{
|
|
|
$hSystems{$sys} = 1;
|
|
|
$hCalls{$sys} = $Calls{$sys}; $Calls{$sys} = 0;
|
|
|
$hTimes{$sys} = 0;
|
|
|
$hSessions{$sys} = 0;
|
|
|
$hInBytes{$sys} = 0;
|
|
|
$hOutBytes{$sys} = 0;
|
|
|
$hInFiles{$sys} = 0;
|
|
|
$hOutFiles{$sys} = 0;
|
|
|
}
|
|
|
$hTimes{$sys} += $OnLine[$i];
|
|
|
$hSessions{$sys} += 1;
|
|
|
$hInBytes{$sys} += $InBytes[$i];
|
|
|
$hOutBytes{$sys} += $OutBytes[$i];
|
|
|
$hInFiles{$sys} += $InFiles[$i];
|
|
|
$hOutFiles{$sys} += $OutFiles[$i];
|
|
|
}
|
|
|
@Syst = sort( keys( %hSystems ));
|
|
|
|
|
|
$~ = hHEADER;
|
|
|
write;
|
|
|
|
|
|
$~ = hEACH;
|
|
|
for( $i = 0; $i <= $#Syst; $i++ )
|
|
|
{
|
|
|
$sys = $Syst[$i];
|
|
|
$cal = ( $hCalls{$sys} || 0 ); $acal += $cal;
|
|
|
$ses = $hSessions{$sys}; $ases += $ses;
|
|
|
$time = sec2str($hTimes{$sys}, "long"); $atime += $hTimes{$sys};
|
|
|
$ibyte = $hInBytes{$sys}; $aibyte += $ibyte;
|
|
|
$obyte = $hOutBytes{$sys}; $aobyte += $obyte;
|
|
|
$inum = $hInFiles{$sys}; $ainum += $inum;
|
|
|
$onum = $hOutFiles{$sys}; $aonum += $onum;
|
|
|
|
|
|
if( $hInFiles{$sys} > 0 || $hOutFiles{$sys} > 0 )
|
|
|
{
|
|
|
$cps = int( ($hInBytes{$sys} + $hOutBytes{$sys}) / $hTimes{$sys} );
|
|
|
$acps += $cps;
|
|
|
$sess++;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
$cps = 0;
|
|
|
}
|
|
|
write;
|
|
|
}
|
|
|
|
|
|
# Now, draw systems without sessions ..
|
|
|
@Syst = sort( keys( %Calls ));
|
|
|
$ses = "-";
|
|
|
$time = "-";
|
|
|
$ibyte = "-";
|
|
|
$obyte = "-";
|
|
|
$inum = "-";
|
|
|
$onum = "-";
|
|
|
$cps = "-";
|
|
|
for( $i = 0; $i <= $#Syst; $i++ )
|
|
|
{
|
|
|
$sys = $Syst[$i];
|
|
|
if( $Calls{$sys} )
|
|
|
{
|
|
|
$sys = $Syst[$i];
|
|
|
$cal = $Calls{$sys}; $acal += $cal;
|
|
|
write;
|
|
|
}
|
|
|
}
|
|
|
$atime = sec2str($atime, "long");
|
|
|
if( $sess > 0 )
|
|
|
{
|
|
|
$acps = int( $acps / $sess );
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
$acps = 0;
|
|
|
}
|
|
|
|
|
|
$~ = hFOOTER;
|
|
|
write;
|
|
|
}
|
|
|
|
|
|
sub num2siz
|
|
|
{
|
|
|
my($num) = $_[0];
|
|
|
my($siz);
|
|
|
if($num < 1000) {
|
|
|
$siz = $num.' ';
|
|
|
} elsif($num < 10000000) {
|
|
|
$siz = int($num/1024).'k';
|
|
|
} else {
|
|
|
$siz = int($num/(1024*1024)).'M';
|
|
|
}
|
|
|
return $siz;
|
|
|
}
|
|
|
|
|
|
sub sec2str
|
|
|
{
|
|
|
my($sec) = $_[0];
|
|
|
my($tip) = $_[1];
|
|
|
my ($h, $m, $s);
|
|
|
$h = int( $sec / 3600 );
|
|
|
$m = int( ($sec - $h*3600) / 60);
|
|
|
$s = int( $sec % 60 );
|
|
|
if( $tip =~ /short/ ) {
|
|
|
return sprintf("%02d:%02d", $h, $m);
|
|
|
} elsif( $tip =~ /long/ ) {
|
|
|
return sprintf("%03d:%02d:%02d", $h, $m, $s);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
format HEADER =
|
|
|
<20><><EFBFBD> Call : 'I' - Incoming, 'O' - Outgoing
|
|
|
<20><><EFBFBD> Status : 'U' - Unlisted, 'L' - Listed, 'P' - Protected, 'N' - UnProtected
|
|
|
<20><><EFBFBD> Session : ' ' - Success, 'A' - Aborted
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
<EFBFBD> Time <20>Sta <20> FTN <20> On-Line <20> Incoming <20> Outgoing <20> Avg.<2E>Speed<65>
|
|
|
<EFBFBD>hh:mm-hh:mm<6D>tus <20> Address <20>hhh:mm:ss<73> Bytes<65> N <20> Bytes<65> N <20> CPS <20> <20>
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
.
|
|
|
format EACH =
|
|
|
<EFBFBD>@<<<<-@<<<<<3C>@<<<<3C>@<<<<<<<<<<<<<<<3C>@>>>>>>>><3E>@>>>>><3E>@>><3E>@>>>>><3E>@>><3E>@>>>><3E>@>>>><3E>
|
|
|
$start,$finish,$stat,$addr, $online, $ibyte, $in,$obyte, $on,$cps, $speed
|
|
|
.
|
|
|
format FOOTER =
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
@>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
|
$Version
|
|
|
.
|
|
|
|
|
|
format hHEADER =
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
<EFBFBD> FTN <20> Total <20> Time <20> Incoming <20> Outgoing <20> CPS <20>
|
|
|
<EFBFBD> Address <20>Cal.<2E>Ses.<2E> On-Line <20> Bytes <20> NN <20> Bytes <20> NN <20> <20>
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
.
|
|
|
format hEACH =
|
|
|
<EFBFBD>@<<<<<<<<<<<<<<<3C>@>>><3E>@>>><3E>@||||||||<7C>@>>>>>>>><3E>@>>><3E>@>>>>>>>><3E>@>>><3E>@>>>><3E>
|
|
|
$sys, $cal,$ses,$time, $ibyte, $inum,$obyte, $onum,$cps
|
|
|
.
|
|
|
format hFOOTER =
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
<EFBFBD> TOTAL <20>@>>><3E>@>>><3E>@||||||||<7C>@>>>>>>>><3E>@>>><3E>@>>>>>>>><3E>@>>><3E>@>>>><3E>
|
|
|
$acal,$ases,$atime, $aibyte, $ainum,$aobyte,$aonum,$acps
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
@>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
|
$Version
|
|
|
.
|