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  usleep( $this->usleep ); // avoid lag; T150124
83 
84  $percentString = sprintf( "%.2f", $percent );
85  if ( $percentString === $this->lastProgress ) {
86  return;
87  }
88  $this->lastProgress = $percentString;
89 
90  $stars = floor( $percent / 2 );
91  $this->output( '[' . str_repeat( '*', $stars ) . str_repeat( '.', 50 - $stars ) . '] ' .
92  "$percentString%\r" );
93  }
94 }
95 
96 $maintClass = PurgeParserCache::class;
97 require_once RUN_MAINTENANCE_IF_MAIN;
$wgParserCacheExpireTime
The expiry time for the parser cache, in seconds.
const RUN_MAINTENANCE_IF_MAIN
Definition: Maintenance.php:39
$success
getOption( $name, $default=null)
Get an option, or return the default.
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
Definition: Maintenance.php:86
Maintenance script to remove old objects from the parser cache.
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
addDescription( $text)
Set the description text.
output( $out, $channel=null)
Throw some output to the user.
addOption( $name, $description, $required=false, $withArg=false, $shortName=false, $multiOccurrence=false)
Add a parameter to the script.
fatalError( $msg, $exitCode=1)
Output a message and terminate the current script.
showProgressAndWait( $percent)
$maintClass