MediaWiki  master
purgeParserCache.php
Go to the documentation of this file.
1 <?php
25 require __DIR__ . '/Maintenance.php';
26 
28 
35  public $lastProgress;
36 
37  private $usleep = 0;
38 
39  public function __construct() {
40  parent::__construct();
41  $this->addDescription( "Remove old objects from the parser cache. " .
42  "This only works when the parser cache is in an SQL database." );
43  $this->addOption( 'expiredate', 'Delete objects expiring before this date.', false, true );
44  $this->addOption(
45  'age',
46  'Delete objects created more than this many seconds ago, assuming ' .
47  '$wgParserCacheExpireTime has remained consistent.',
48  false,
49  true );
50  $this->addOption( 'msleep', 'Milliseconds to sleep between purge chunks', false, true );
51  }
52 
53  public function execute() {
55 
56  $inputDate = $this->getOption( 'expiredate' );
57  $inputAge = $this->getOption( 'age' );
58  if ( $inputDate !== null ) {
59  $date = wfTimestamp( TS_MW, strtotime( $inputDate ) );
60  } elseif ( $inputAge !== null ) {
61  $date = wfTimestamp( TS_MW, time() + $wgParserCacheExpireTime - intval( $inputAge ) );
62  } else {
63  $this->fatalError( "Must specify either --expiredate or --age" );
64  return;
65  }
66  $this->usleep = 1e3 * $this->getOption( 'msleep', 0 );
67 
68  $english = MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( 'en' );
69  $this->output( "Deleting objects expiring before " .
70  $english->timeanddate( $date ) . "\n" );
71 
72  $pc = MediaWikiServices::getInstance()->getParserCache()->getCacheStorage();
73  $success = $pc->deleteObjectsExpiringBefore( $date, [ $this, 'showProgressAndWait' ] );
74  if ( !$success ) {
75  $this->fatalError( "\nCannot purge this kind of parser cache." );
76  }
77  $this->showProgressAndWait( 100 );
78  $this->output( "\nDone\n" );
79  }
80 
81  public function showProgressAndWait( $percent ) {
82  // avoid lag; T150124
83  usleep( $this->usleep );
84 
85  $percentString = sprintf( "%.2f", $percent );
86  if ( $percentString === $this->lastProgress ) {
87  return;
88  }
89  $this->lastProgress = $percentString;
90 
91  $stars = floor( $percent / 2 );
92  $this->output( '[' . str_repeat( '*', $stars ) . str_repeat( '.', 50 - $stars ) . '] ' .
93  "$percentString%\r" );
94  }
95 }
96 
97 $maintClass = PurgeParserCache::class;
98 require_once RUN_MAINTENANCE_IF_MAIN;
RUN_MAINTENANCE_IF_MAIN
const RUN_MAINTENANCE_IF_MAIN
Definition: Maintenance.php:38
PurgeParserCache\$lastProgress
$lastProgress
Definition: purgeParserCache.php:35
MediaWiki\MediaWikiServices
MediaWikiServices is the service locator for the application scope of MediaWiki.
Definition: MediaWikiServices.php:152
Maintenance\fatalError
fatalError( $msg, $exitCode=1)
Output a message and terminate the current script.
Definition: Maintenance.php:480
Maintenance\addDescription
addDescription( $text)
Set the description text.
Definition: Maintenance.php:323
wfTimestamp
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
Definition: GlobalFunctions.php:1811
PurgeParserCache\showProgressAndWait
showProgressAndWait( $percent)
Definition: purgeParserCache.php:81
Maintenance
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
Definition: Maintenance.php:53
$success
$success
Definition: NoLocalSettings.php:42
PurgeParserCache\execute
execute()
Do the actual work.
Definition: purgeParserCache.php:53
Maintenance\addOption
addOption( $name, $description, $required=false, $withArg=false, $shortName=false, $multiOccurrence=false)
Add a parameter to the script.
Definition: Maintenance.php:241
$wgParserCacheExpireTime
$wgParserCacheExpireTime
The expiry time for the parser cache, in seconds.
Definition: DefaultSettings.php:2650
$maintClass
$maintClass
Definition: purgeParserCache.php:97
PurgeParserCache\__construct
__construct()
Default constructor.
Definition: purgeParserCache.php:39
Maintenance\getOption
getOption( $name, $default=null)
Get an option, or return the default.
Definition: Maintenance.php:277
PurgeParserCache
Maintenance script to remove old objects from the parser cache.
Definition: purgeParserCache.php:34
PurgeParserCache\$usleep
$usleep
Definition: purgeParserCache.php:37
Maintenance\output
output( $out, $channel=null)
Throw some output to the user.
Definition: Maintenance.php:429