[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
alierak.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=3151
Clear out old obsolete stats; preserve previous supportrank stats
separately.
Patch by
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;
--------------------------------------------------------------------------------
