#!/usr/bin/perl # use Dumpvar; # $log='/work/camelot/logs/agent_login'; $total='Total'; $q=0; # open(LOG, "< $log") or die "Unable to open $log, $!"; print STDERR "Processing "; while(<>) { s/ (GET|POST) .+//; if($ARGV ne $seen) { print STDERR $ARGV; $seen=$ARGV; } if(/ via /) { /^(.+) via (.+)/; $agent3=$1; $proxy=$2; } else { $agent3=$_; $proxy=''; } if($agent3=~/\(/) { if($agent3=~/^(.+) *\(([^\)]+)/) # agent (type) { $agent2=$1; $type=$2; } elsif($agent3=~/(null)/) { $agent2='unknown'; $type='unknown'; } elsif($agent3=~/\(([^\)]+)/) # (type) { $agent2='unknown'; $type=$1; } else { warn "Agent is '$agent3'"; } } else { $agent2=$agent3; } if($agent2=~/(.*) (.*)/) { $agent2=$1; } if($agent2=~/(.*) libwww/) { $agent2=$1; } if($agent2=~/[\\\/]/) { $agent2=~/^(.+)[\\\/](.+)/; # agent/version $agent=$1; $version=$2; } else { $agent=$agent2; $version=''; } if($agent=~/(.*)Mosaic/) { $version="$1 $version"; $agent='Mosaic'; } if($type=~/[; ]/) { if($type=~/;/) { ($os, $wha, $additional, $other)=split /;[ ]*/, $type, 4; } else { ($os, $wha, $additional)=split /[ ]+/, $type, 3; } if($os =~ /compatible/i) { $agent2=$wha; # print STDERR $wha; if($agent2=~/(.+) (.+)/) # agent/version { $agent=$1; $version=$2; }elsif($wha) { $agent=$wha; $version='Other'; } else { $os=''; } $os=$additional if $additional; undef $additional; } if($os=~/^win/i) { $additional=$os; $os='Windows'; } $additional="other" if($additional eq ''); if($os eq 'X11' and $additional=~/^(.+?)\s+(.*)$/) { $os=$1; $additional=$2; } $additional="other" if($additional eq ''); unless($os) { $os='Unknown'; $version='all'; $additional='other'; } $osCount{$os}++; $osCount{$total}++; if(!defined $osverCount{$os}) { $osverCount{$os}={$additional => 1}; } else { $osverCount{$os}->{$additional}++; } } $agent='Microsoft Internet Explorer' if($agent eq 'MSIE'); if($agent eq "") { $agent='Other'; print STDERR $_; } $version='Other' if($version eq ""); $aCount{$agent}++; $aCount{$total}++; if(!defined $verCount{$agent}) { $verCount{$agent}={$version => 1}; } else { $verCount{$agent}->{$version}++; } if($version=~/(\d)\./) { $verCount{$agent}->{"All version $1"}++; } if($proxy ne '') { $pCount{$proxy}++; $pCount{$total}++; } # last if ($q==0); if($q==0) { $q=1000; print STDERR '.'; } $q--; } close(LOG); #dumpvar('main', 'verCount'); #dumpvar('main', 'osverCount'); print("Hello world\n"); PrintUp(\%aCount, \%verCount, "Browser"); print "\n
\n"; PrintUp(\%osCount, \%osverCount, "OS"); print "\n
\n"; PrintUp(\%pCount, {}, "Proxy"); print ""; print STDERR "Done\n"; 1; sub PrintUp { my($countref, $subcountref, $title)=@_; my($thing, $subthing, $count, $countTot, $subcountTot); $countTot=$$countref{$total}; print "

$title

\n"; print "\n"; foreach $thing (sort {$$countref{$b} <=> $$countref{$a}} keys %$countref) { $count=$$countref{$thing}; print "\n"; print "\n"; $subcountTot=$count; foreach $subthing (sort {$$subcountref{$thing}->{$b} <=> $$subcountref{$thing}->{$a}} keys(%{$$subcountref{$thing}})) { $count=$$subcountref{$thing}->{$subthing}; print "\t\n"; print "\t\n"; } } print "
$thing$count", sprintf("%.2f", 100*($count/$countTot)), "%
      $subthing$count", sprintf("%.2f", 100*($count/$subcountTot)), "%", # sprintf("%.2f%", 100*($count/$countTot)), "
\n"; }