#!/usr/local/bin/perl -w use File::Find; use File::Path; # for rmtree(); use Cwd; sub usage() { die <&1 |" or die "open: $!"; print_log $_ while ; close CMD or $status = 1; return $status; } sub send_results_to_server { my ($value, $data, $testname, $tbox) = @_; my $tmpurl = "http://axolotl.mozilla.org/graph/collect.cgi"; $tmpurl .= "?value=$value&data=$data&testname=$testname&tbox=$tbox"; print "send_results_to_server(): \n"; print "tmpurl = $tmpurl\n"; system ("/usr/local/bin/wget", "-O", "/dev/null", $tmpurl); } # Find list of logfiles that are less than a day old. my @files; sub generate_files_list { my $sub = sub { my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = 0; # Don't open .gz files. Apparently we're compressing # logs after 2 weeks or so. unless(/.gz/) { open FILE, $_; ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = stat(FILE); my $time = time(); my $access_delta_sec = $time - $mtime; my $day = 60*60*24*$days; if($access_delta_sec < $day) { push(@files, $_); } close FILE; } }; File::Find::find($sub, $log_dir); } sub graph_friendly_name { my ($name) = @_; $name =~ s/\s/_/g; $name =~ s/\//_/g; return $name; } # main { #usage() if $#ARGV != -1; my $args = ParseArgs(); ApplyArgs($args); # Find list of log files to search generate_files_list(); print "\n\nLooking at $#files files...\n"; # Setup totals area if it's not there. unless(-d "$script_dir/totals") { mkdir("$script_dir/totals", 0777); } # # Build up daily numbers. # # Clean up from last run. File::Path::rmtree("$script_dir/dailys", 0, 0); mkdir("$script_dir/dailys", 0777); print "Releases:\n"; foreach $release (@releases) { print "$release->[0] :\t "; my $downloads = 0; foreach $file (@files) { my $filesize = $release->[1]; my $filename = $release->[2]; my $grep_log; open FILE, "$log_dir/$file"; while() { if (($_ =~ /$filesize/g) and ($_ =~ /$filename/g)){ $downloads++; } } close FILE; } print "$downloads\n"; # graph-server-friendly release name my $new_release = graph_friendly_name("$release->[0]"); # Build up daily data. # Read last value from file. my $last_daily = 0; if(-e "$script_dir/dailys/$new_release") { open LOG, "$script_dir/dailys/$new_release"; while() { chomp; $last_daily = $_; #print "daily = $last_daily + $downloads\n"; last; } close LOG; } # Compute new daily. my $new_daily = $last_daily + $downloads; # Write out new daily to file. open LOG, ">$script_dir/dailys/$new_release"; print LOG $new_daily; close LOG; } # # Send to server. # if(($days == 1) and !($nograph)) { print "_______________________\n"; opendir(DIR, "$script_dir/dailys"); my @found_releases = map "$_", sort grep !/^\.\.?$/, readdir DIR; closedir DIR; print "found releases: @found_releases\n"; # Dig daily, total numbers out of files, send to server. foreach $release (@found_releases) { my $daily = 0; my $total = 0; if(-e "$script_dir/dailys/$release") { open LOG, "$script_dir/dailys/$release"; while() { chomp; $daily = $_; last; } close LOG; } else { print "ERROR: no dailys file ($script_dir/dailys/$release).\n"; } # # Build up total numbers. # my $last_total = 0; if(-e "$script_dir/totals/$release") { open LOG, "$script_dir/totals/$release"; while() { chomp; $last_total = $_; last; } close LOG; } # Compute new total. $total = $last_total + $daily; # Write out new total. open LOG, ">$script_dir/totals/$release"; print LOG $total; close LOG; # Send results to server send_results_to_server($daily, "--", "download-daily", $release); send_results_to_server($total, "--", "download-cumulative", $release); } } print "\n"; }