fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2010-10-27 08:48 am

[dw-free] pop_interests never removed when unpopular

[commit: http://hg.dwscoalition.org/dw-free/rev/6c6d1f0d593f]

http://bugs.dwscoalition.org/show_bug.cgi?id=3151

Clear out old obsolete stats; preserve previous supportrank stats
separately.

Patch by [personal profile] alierak.

Files modified:
  • bin/maint/stats.pl
  • cgi-bin/statslib.pl
--------------------------------------------------------------------------------
diff -r d6b3a0aea76c -r 6c6d1f0d593f bin/maint/stats.pl
--- a/bin/maint/stats.pl	Wed Oct 27 15:52:02 2010 +0800
+++ b/bin/maint/stats.pl	Wed Oct 27 16:48:37 2010 +0800
@@ -435,6 +435,24 @@ require "$ENV{'LJHOME'}/cgi-bin/statslib
 {
     LJ::Stats::register_stat
         ({ 'type' => "global",
+           'jobname' => "supportrank_prev",
+           'statname' => "supportrank_prev",
+           'handler' =>
+               sub {
+                   my $db_getter = shift;
+                   return undef unless ref $db_getter eq 'CODE';
+                   my $db = $db_getter->();
+                   return undef unless $db;
+
+                   my $rows = $db->selectall_arrayref( "SELECT statkey, statval FROM stats WHERE statcat = 'supportrank'" );
+                   return {} unless $rows;
+
+                   return { ( map { $_->[0] => $_->[1] } @$rows ) };
+               }
+        });
+ 
+    LJ::Stats::register_stat
+        ({ 'type' => "global",
            'jobname' => "supportrank",
            'statname' => "supportrank",
            'handler' =>
@@ -467,20 +485,12 @@ require "$ENV{'LJHOME'}/cgi-bin/statslib
                        $supportrank{$_->{'userid'}} = $rank;
                    }
 
-                   # move old 'supportrank' stat to supportrank_prev
-                   # no API for this :-/
-                   {
-                       my $dbh = LJ::Stats::get_db("dbh");
-                       $dbh->do("DELETE FROM stats WHERE statcat='supportrank_prev'");
-                       $dbh->do("UPDATE stats SET statcat='supportrank_prev' WHERE statcat='supportrank'");
-                   }
-
                    return \%supportrank;
                }
         });
 
     print "-I- Generating weekly stats.\n";
-    LJ::Stats::run_stats('supportrank');
+    LJ::Stats::run_stats('supportrank_prev', 'supportrank');
     print "-I- Done.\n";
 };
 
diff -r d6b3a0aea76c -r 6c6d1f0d593f cgi-bin/statslib.pl
--- a/cgi-bin/statslib.pl	Wed Oct 27 15:52:02 2010 +0800
+++ b/cgi-bin/statslib.pl	Wed Oct 27 16:48:37 2010 +0800
@@ -82,12 +82,14 @@ sub LJ::Stats::run_stats {
             {
                 if (ref $stat->{'statname'} eq 'ARRAY') {
                     foreach my $statname (@{$stat->{'statname'}}) {
+                        LJ::Stats::clear_stat( $statname );
                         foreach my $key (keys %{$res->{$statname}}) {
                             LJ::Stats::save_stat($statname, $key, $res->{$statname}->{$key});
                         }
                     }
                 } else {
                     my $statname = $stat->{'statname'};
+                    LJ::Stats::clear_stat( $statname );
                     foreach my $key (keys %$res) {
                         LJ::Stats::save_stat($statname, $key, $res->{$key});
                     }
@@ -127,12 +129,14 @@ sub LJ::Stats::run_stats {
                 {
                     if (ref $stat->{'statname'} eq 'ARRAY') {
                         foreach my $statname (@{$stat->{'statname'}}) {
+                            LJ::Stats::clear_part( $statname, $cid );
                             foreach my $key (keys %{$res->{$statname}}) {
                                 LJ::Stats::save_part($statname, $cid, $key, $res->{$statname}->{$key});
                             }
                         }
                     } else {
                         my $statname = $stat->{'statname'};
+                        LJ::Stats::clear_part( $statname, $cid );
                         foreach my $key (keys %$res) {
                             LJ::Stats::save_part($statname, $cid, $key, $res->{$key});
                           }
@@ -193,6 +197,18 @@ sub LJ::Stats::get_db {
     return undef;
 }
 
+# clear out previous stats from the 'stats' table
+sub LJ::Stats::clear_stat {
+    my ($cat) = @_;
+    return undef unless $cat;
+
+    my $dbh = LJ::Stats::get_db( "dbh" );
+    $dbh->do( "DELETE FROM stats WHERE statcat = ?", undef, $cat );
+    die $dbh->errstr if $dbh->err;
+
+    return 1;
+}
+
 # save a given stat to the 'stats' table in the db
 sub LJ::Stats::save_stat {
     my ($cat, $statkey, $val) = @_;
@@ -215,6 +231,19 @@ sub LJ::Stats::save_calc {
     my $dbh = LJ::Stats::get_db("dbh");
     $dbh->do("REPLACE INTO partialstats (jobname, clusterid, calctime) " .
              "VALUES (?,?,UNIX_TIMESTAMP())", undef, $jobname, $cid || 1);
+    die $dbh->errstr if $dbh->err;
+
+    return 1;
+}
+
+# clear out previous partial stats
+sub LJ::Stats::clear_part {
+    my ($statname, $cid) = @_;
+    return undef unless $statname && $cid > 0;
+
+    my $dbh = LJ::Stats::get_db( "dbh" );
+    $dbh->do( "DELETE FROM partialstatsdata WHERE statname = ? AND clusterid = ?",
+              undef, $statname, $cid );
     die $dbh->errstr if $dbh->err;
 
     return 1;
--------------------------------------------------------------------------------