-
-/**
- *
- */
-class SiteStatsUpdate {
-
- var $mViews, $mEdits, $mGood, $mPages, $mUsers;
-
- function __construct( $views, $edits, $good, $pages = 0, $users = 0 ) {
- $this->mViews = $views;
- $this->mEdits = $edits;
- $this->mGood = $good;
- $this->mPages = $pages;
- $this->mUsers = $users;
- }
-
- function appendUpdate( &$sql, $field, $delta ) {
- if ( $delta ) {
- if ( $sql ) {
- $sql .= ',';
- }
- if ( $delta < 0 ) {
- $sql .= "$field=$field-1";
- } else {
- $sql .= "$field=$field+1";
- }
- }
- }
-
- function doUpdate() {
- $dbw = wfGetDB( DB_MASTER );
-
- $updates = '';
-
- $this->appendUpdate( $updates, 'ss_total_views', $this->mViews );
- $this->appendUpdate( $updates, 'ss_total_edits', $this->mEdits );
- $this->appendUpdate( $updates, 'ss_good_articles', $this->mGood );
- $this->appendUpdate( $updates, 'ss_total_pages', $this->mPages );
- $this->appendUpdate( $updates, 'ss_users', $this->mUsers );
-
- if ( $updates ) {
- $site_stats = $dbw->tableName( 'site_stats' );
- $sql = "UPDATE $site_stats SET $updates";
-
- # Need a separate transaction because this a global lock
- $dbw->begin();
- $dbw->query( $sql, __METHOD__ );
- $dbw->commit();
- }
- }
-
- public static function cacheUpdate( $dbw ) {
- global $wgActiveUserDays;
- $dbr = wfGetDB( DB_SLAVE, array( 'SpecialStatistics', 'vslow' ) );
- # Get non-bot users than did some recent action other than making accounts.
- # If account creation is included, the number gets inflated ~20+ fold on enwiki.
- $activeUsers = $dbr->selectField(
- 'recentchanges',
- 'COUNT( DISTINCT rc_user_text )',
- array(
- 'rc_user != 0',
- 'rc_bot' => 0,
- "rc_log_type != 'newusers' OR rc_log_type IS NULL",
- "rc_timestamp >= '{$dbw->timestamp( wfTimestamp( TS_UNIX ) - $wgActiveUserDays*24*3600 )}'",
- ),
- __METHOD__
- );
- $dbw->update(
- 'site_stats',
- array( 'ss_active_users' => intval( $activeUsers ) ),
- array( 'ss_row_id' => 1 ),
- __METHOD__
- );
- return $activeUsers;
- }
-}
-