1 #!/usr/bin/perl 2 use Getopt::Std; 3 getopt('dV'); 4 $xferlog="./xferlog"; 5 $\ = "\n"; 6 $i=0; 7 open XFERLOG, $xferlog or die "Cant't find file $xferlog"; 8 9 foreach $line () { 10 chomp($line); 11 if (( $line =~ /$opt_d/i) && ( $line !~ /_ o r/)) 12 { 13 ($Fld1,$Fld2,$Fld3,$Fld4,$Fld5,$Fld6,$Fld7,$Fld8, $Fld9,$Fld10,$Fld11,$Fld12,$Fld13,$Fld14,$Fld15) = split(' ',$line); 14 $uplist[$i] = join ' ',$Fld6, $Fld8, $Fld9, $Fld14, $Fld15; 15 $time[$i]=$Fld6; $size[$i]=$Fld8; $file[$i]=$Fld9; $user[$i]=$Fld14; $group[$i]=$Fld15; 16 $username= join '@', $user[$i], $group[$i]; 17 push @{$table{$username}}, $uplist[$i]; 18 $i++; 19 } 20 } 21 close XFERLOG; 22 23 undef %saw; 24 # @newuser = grep(!$saw{$_}++, @user); 25 $j=0; 26 foreach $username ( sort keys %table ) 27 { 28 my @mylist = @{$table{$username}}; 29 $m=0; 30 $totalsize=0; 31 $totaltime=0; 32 $gtotal=0; 33 $x=0; 34 $x=@mylist; 35 for ($m = 0 ; $m < ($x); $m++) 36 { 37 ( $seconds, $size, $file, $user, $group) = split(' ', $mylist[$m]); 38 $totaltime = ($totaltime + $seconds); 39 $totalsize = ($totalsize + $size); 40 } 41 if ($totaltime==0) { $totaltime=1; } 42 if ($totalsize==0) { $totalsize=1; } 43 $avgtr = (($totalsize/$totaltime)/1024); 44 $gtotal=($totalsize+$gtotal); 45 $finale[$j]= join ' ', ($totalsize/(1024*1024)), $username, ($x), $totaltime, $avgtr; 46 # print $finale[$j]; 47 $j++; 48 } 49 @realfinal = sort @finale; 50 #print @finale; 51 $p=0; 52 $w=0; 53 $w=@realfinal; 54 #print $w; 55 for ($p=($w-1) ; $p>=0; $p--) 56 { 57 ($Size, $User, $Files, $Time, $AvgSpeed)= split " ", $realfinal[$p]; 58 $position= ($w-$p); 59 $percent=(($Size/($gtotal/(1024*1024)))*100); 60 printf ("$position. $User $Files files "); 61 printf("%.2fMB", $Size) ; 62 printf " $Time(s) "; 63 printf ("%.2f% ", $percent); 64 printf("%.2fK/s", $AvgSpeed); 65 print " "; 66 } 67