Show
Ignore:
Timestamp:
07/03/08 17:43:37 (5 years ago)
Author:
max
Message:

stats: wasn't rolling over day properly

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/util/server_daily_maint

    r1078 r1083  
    3030use HTML::Template; 
    3131use Time::Local; 
    32 use Date::Manip; 
    3332 
    3433my $stats_file = $store_dir . "/stats.config"; 
     
    152151    return unless ($store->{last_run}); 
    153152 
    154     my $last_run = &Date::Manip::ParseDateString("epoch " . $store->{last_run}); 
    155     my $now = &Date::Manip::ParseDate("epoch $starttime"); 
    156     my $weekdiffstr = &Date::Manip::DateCalc($last_run, $now); 
    157     my $monthdiffstr = &Date::Manip::DateCalc($last_run, $now, undef, 1); 
    158  
    159     my $months_since = (($monthdiffstr =~ /(\d+):(\d+):/) && ($1 * 12 + $2)); 
    160     &rollover_units('month', $months_since); 
    161  
    162     my $weeks_since = (($weekdiffstr =~ /0:0:(\d+):/) && $1); 
    163     &rollover_units('week', $weeks_since); 
    164  
    165     my $days_since = (($weekdiffstr =~ /0:0:(\d+):(\d+):/) && ($1 * 7 + $2)); 
    166     &rollover_units('day', $days_since); 
    167  
    168     my $hours_since = (($weekdiffstr =~ /0:0:(\d+):(\d+):(\d+):/) && ($1 * 168 + $2 * 24 + $3)); 
    169     &rollover_units('hour', $hours_since); 
    170  
    171 #    print "Finished; per_hour 1 is: " . Dumper($store->{per_hour}->[1]) . "\n"; die; 
     153    my @llast = localtime($store->{last_run}); 
     154    my @lnow = localtime($starttime); 
     155 
     156    # Figure out the difference. This is a little trickier than you 
     157    # might think, since we want to know not how much time has 
     158    # elapsed, but the difference in month/week/day/hour number. 
     159    # For example, it may be 2 hours since we last ran, but if 
     160    # we last ran at 11PM and it's now 1AM, we are in a new day 
     161    # number. 
     162 
     163    my $yrdiff = $lnow[5] - $llast[5];  
     164    my $modiff = (12 * $yrdiff) + $lnow[4] - $llast[4]; 
     165    my $weekdiff = ($yrdiff * 52) + strftime("%U", @lnow) - strftime("%U", @llast); 
     166    my $daydiff = ($yrdiff * 365) + $lnow[7] - $llast[7]; 
     167    my $hrdiff = int($starttime / 3600) - int($store->{last_run} / 3600); 
     168 
     169    &rollover_units('month', $modiff); 
     170    &rollover_units('week', $weekdiff); 
     171    &rollover_units('day', $daydiff); 
     172    &rollover_units('hour', $hrdiff); 
    172173} 
    173174