#!/bin/perl -w require "adtracklib.pl"; &read_form_input; #$site = $INPUT{"site"}; # Need to change this to a command line param $site = "glamazon"; &init_site_vars("glamazon"); #Find out what the earliest and latest times in the logs are &read_log_files_for_time; #Print them out to check them print &stringTime($earliest); print "\n"; print &stringTime(&roundUpMidnight($earliest)); print "\n"; print &stringTime($latest); print "\n"; print &stringTime(&roundDownMidnight($latest)); print "\n"; #Round 'em to midnight $earliest = &roundUpMidnight($earliest); $latest = &roundDownMidnight($latest); #Read display variables in foreach $advertiser (keys %show_banners) { print "$advertiser $show_banners{$advertiser}\n"; &read_display_vars($advertiser); $display_vars{$advertiser} = "$cents:$show_banners{$advertiser}:$adjustment"; } #Process that data! $nextPeriod = $earliest; while ($nextPeriod < ($latest + 1)) { &getStats($nextPeriod); &printReport($nextPeriod); $nextPeriod = $nextPeriod + 86400; } sub stringTime { ($sec, $min, $hour, $day, $startmon, $year, $junk1, $junk2, $junk3) = localtime($_[0]); if ($hour < 10) {$hour = "0$hour";} if ($sec < 10) {$sec = "0$sec";} if ($min < 10) {$min = "0$min";} $outstr = "$day/$MoY[$startmon]/$year $hour:$min:$sec"; return $outstr; } sub roundUpMidnight { ($sec, $min, $hour, $day, $startmon, $year, $junk1, $junk2, $junk3) = localtime($_[0]); $day++; $sec = 0; $min = 0; $hour = 0; $midnightTime = &timelocal($sec, $min, $hour, $day, $startmon, $year, $junk1, $junk2, $junk3); return $midnightTime; } sub roundDownMidnight { ($sec, $min, $hour, $day, $startmon, $year, $junk1, $junk2, $junk3) = localtime($_[0]); $day--; $sec = 0; $min = 0; $hour = 0; $midnightTime = &timelocal($sec, $min, $hour, $day, $startmon, $year, $junk1, $junk2, $junk3); return $midnightTime; } sub countUniques { # make this take a starting and ending time param # "count uniques for this advertiser and sponsor from start to finish" $sponsor = $_[0]; $logname = "$logs_dir/$sponsor.log"; $advertiser = $_[1]; $startTime = $_[2]; $finishTime = $_[3]; $startTimeStr = &stringTime($startTime); $finishTimeStr = &stringTime($finishTime); $unique_count = 0; if (-e $logname) { open (UNIQUELOG, "<$logname") || die("Could not open file $logs_dir/$logname.log"); while () { chop; $count = ($_ =~ tr/ //); if ($count == 3) { ($ip_addr, $ip_time_logged, $referer, $gotclick) = split(/ /,$_,4); if ($gotclick eq $advertiser){ if (($startTime < $ip_time_logged) && ($ip_time_logged < $finishTime)) { $unique_count++; } } } } close UNIQUELOG; } print "Counted $unique_count hits between $startTimeStr and $finishTimeStr for .$advertiser. sponsored by .$sponsor.\n"; return $unique_count; } sub read_log_files_for_time { $earliest = time(); $latest = time(); opendir(DIR,"$logs_dir"); @files = sort grep(/\.log/, readdir(DIR)); closedir(DIR); for $eachfile (@files) { print "eachfile is $eachfile\n"; ($ad_sponsor, $spew) = split(/\./,$eachfile,2); print "ad_sponsor is $ad_sponsor\n"; # Open the hit file if ( $ad_sponsor && (open (LOGFILE, "$logs_dir/$eachfile"))) { @hits = ; # Read in all the hits close LOGFILE; } foreach $hit (@hits) { chop $hit; $count = ($hit =~ tr/ //); if ($count == 3) { ($my_ip, $my_time, $my_referer, $my_ad) = split(/ /,$hit,4); $show_banners{$my_ad} = $ad_sponsor; if ($my_time < $earliest) {$earliest = $my_time;} if ($my_time > $latest) {$latest = $my_time;} } else {print "Bad hit: $hit \n";} } } } sub getStats { $now = $_[0]; $oneDayAgo = $now - 86400; foreach $advertiser (keys %show_banners) { $uniques{$advertiser} = &countUniques($show_banners{$advertiser},$advertiser,$oneDayAgo,$now); #print "uniques{$advertiser} = $uniques{$advertiser}\n"; } } sub printReport { $reportname = "$reports_dir/$_[0].db"; $timestring = &stringTime($_[0]); print "\nprinting report for $timestring\n"; if (open (OUTFILE, ">$reportname")) { foreach $advertiser (sort(keys %show_banners)) { #print "$advertiser:$display_vars{$advertiser}:$uniques{$advertiser}:$prev_in{$advertiser}:$wk_in{$advertiser}:$lstwk_in{$advertiser}\n"; print "$advertiser:$display_vars{$advertiser}:$uniques{$advertiser}\n"; #print OUTFILE "$advertiser:$display_vars{$advertiser}:$uniques{$advertiser}:$prev_in{$advertiser}:$wk_in{$advertiser}:$lstwk_in{$advertiser}\n"; print OUTFILE "$advertiser:$display_vars{$advertiser}:$uniques{$advertiser}\n"; } close OUTFILE; } } sub read_display_vars { local ($filename) = @_; open (DISPLAY, "<$ads_dir/$filename.txt") || die "Could not open ad file $ads_dir/$filename.txt."; seek DISPLAY, 0,0; @lines = ; close DISPLAY; chomp @lines; # Name each of the variables in the DISPLAY file. ($cents,$url,$text,$image,$height,$width, $statsurl,$userid,$passcode,$bannersurl,$adtype,$adsite) = @lines; $adjustment = 0; }