Add WAN Cache to SiteStats::jobs
authorAntoine Musso <hashar@free.fr>
Mon, 29 May 2017 21:58:33 +0000 (23:58 +0200)
committerKrinkle <krinklemail@gmail.com>
Tue, 25 Jul 2017 18:17:34 +0000 (18:17 +0000)
commit29aaac5c631f8ed042cde9224d70fad00566073a
treea93668c49d561c6780e7ee4e03312221e041d2ea
parente3f7dde410e0ac328190042af231e3fa13285e7d
Add WAN Cache to SiteStats::jobs

The method hits the jobrunner backend to find out how many jobs are
enqueued in each of the JobQueue.  It is publicly available via the
MediaWiki API request:
    /w/api.php?action=query&meta=siteinfo&siprop=statistics

That is often used by bots when querying recent changes among other and
with fast bot cause useless queries toward the jobrunner backend.

Wrap SiteStats::jobs() with a WAN cache under key SiteStats:jobscount.
Drop SiteStats::$jobs private variable that was used for in process
cache. The WAN Cache does it for us via 'pcTTL'.

That is similar to SiteStats::numberingroup().
Set TTL to one minute, which should still give fresh enough results for
public uses.

Cover that behavior with a test.

When writing tests I noticed MediaWikiTestCase generates a few jobs due
to the creation of the UTPage page:

* HTMLCacheUpdateJob to refresh backlinks (eg: history)
* RecentChangesUpdateJob which happens randomly

Pass EDIT_SUPPRESS_RC to doEditContent to prevent the first and blindly
delete entries in the recentChangesUpdate jobqueue for the second.

Change-Id: I95a272d0691d779bfee9e7a671cbab66a113dfa1
includes/SiteStats.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/SiteStatsTest.php [new file with mode: 0644]