MediaWiki  master
SiteStatsInit.php
Go to the documentation of this file.
1 <?php
22 
27  /* @var IDatabase */
28  private $dbr;
30  private $edits;
32  private $articles;
34  private $pages;
36  private $users;
38  private $files;
39 
45  public function __construct( $database = false ) {
46  if ( $database instanceof IDatabase ) {
47  $this->dbr = $database;
48  } elseif ( $database ) {
49  $this->dbr = self::getDB( DB_MASTER );
50  } else {
51  $this->dbr = self::getDB( DB_REPLICA, 'vslow' );
52  }
53  }
54 
59  public function edits() {
60  $this->edits = $this->dbr->selectField( 'revision', 'COUNT(*)', '', __METHOD__ );
61  $this->edits += $this->dbr->selectField( 'archive', 'COUNT(*)', '', __METHOD__ );
62 
63  return $this->edits;
64  }
65 
70  public function articles() {
71  $services = MediaWikiServices::getInstance();
72 
73  $tables = [ 'page' ];
74  $conds = [
75  'page_namespace' => $services->getNamespaceInfo()->getContentNamespaces(),
76  'page_is_redirect' => 0,
77  ];
78 
79  if ( $services->getMainConfig()->get( 'ArticleCountMethod' ) == 'link' ) {
80  $tables[] = 'pagelinks';
81  $conds[] = 'pl_from=page_id';
82  }
83 
84  $this->articles = $this->dbr->selectField(
85  $tables,
86  'COUNT(DISTINCT page_id)',
87  $conds,
88  __METHOD__
89  );
90 
91  return $this->articles;
92  }
93 
98  public function pages() {
99  $this->pages = $this->dbr->selectField( 'page', 'COUNT(*)', '', __METHOD__ );
100 
101  return $this->pages;
102  }
103 
108  public function users() {
109  $this->users = $this->dbr->selectField( 'user', 'COUNT(*)', '', __METHOD__ );
110 
111  return $this->users;
112  }
113 
118  public function files() {
119  $this->files = $this->dbr->selectField( 'image', 'COUNT(*)', '', __METHOD__ );
120 
121  return $this->files;
122  }
123 
134  public static function doAllAndCommit( $database, array $options = [] ) {
135  $options += [ 'update' => false, 'activeUsers' => false ];
136 
137  // Grab the object and count everything
138  $counter = new self( $database );
139 
140  $counter->edits();
141  $counter->articles();
142  $counter->pages();
143  $counter->users();
144  $counter->files();
145 
146  $counter->refresh();
147 
148  // Count active users if need be
149  if ( $options['activeUsers'] ) {
151  }
152  }
153 
157  public static function doPlaceholderInit() {
158  $dbw = self::getDB( DB_MASTER );
159  $exists = $dbw->selectField( 'site_stats', '1', [ 'ss_row_id' => 1 ], __METHOD__ );
160  if ( $exists === false ) {
161  $dbw->insert(
162  'site_stats',
163  [ 'ss_row_id' => 1 ] + array_fill_keys( SiteStats::selectFields(), 0 ),
164  __METHOD__,
165  [ 'IGNORE' ]
166  );
167  }
168  }
169 
173  public function refresh() {
174  $values = [
175  'ss_row_id' => 1,
176  'ss_total_edits' => $this->edits === null ? $this->edits() : $this->edits,
177  'ss_good_articles' => $this->articles === null ? $this->articles() : $this->articles,
178  'ss_total_pages' => $this->pages === null ? $this->pages() : $this->pages,
179  'ss_users' => $this->users === null ? $this->users() : $this->users,
180  'ss_images' => $this->files === null ? $this->files() : $this->files,
181  ];
182 
183  self::getDB( DB_MASTER )->upsert(
184  'site_stats',
185  $values,
186  [ 'ss_row_id' ],
187  $values,
188  __METHOD__
189  );
190  }
191 
197  private static function getDB( $index, $groups = [] ) {
198  return MediaWikiServices::getInstance()
199  ->getDBLoadBalancer()
200  ->getConnectionRef( $index, $groups );
201  }
202 }
static getDB( $index, $groups=[])
files()
Count total files.
static doPlaceholderInit()
Insert a dummy row with all zeroes if no row is present.
__construct( $database=false)
const DB_MASTER
Definition: defines.php:26
pages()
Count total pages.
Class designed for counting of stats.
static selectFields()
Definition: SiteStats.php:226
getDB()
refresh()
Refresh site_stats.
Basic database interface for live and lazy-loaded relation database handles.
Definition: IDatabase.php:38
edits()
Count the total number of edits.
static cacheUpdate(IDatabase $dbw)
static doAllAndCommit( $database, array $options=[])
Do all updates and commit them.
users()
Count total users.
const DB_REPLICA
Definition: defines.php:25
articles()
Count pages in article space(s)