documentation
[lhc/web/wiklou.git] / maintenance / updateSpecialPages.php
1 <?php
2
3 # Run this script periodically if you have miser mode enabled, to refresh the caches
4
5 require_once( 'commandLine.inc' );
6
7 require_once( 'SpecialPage.php' );
8 require_once( 'QueryPage.php' );
9
10 $wgOut->disable();
11 $dbw =& wfGetDB( DB_MASTER );
12
13 foreach ( $wgQueryPages as $page ) {
14 list( $class, $special ) = $page;
15
16 $specialObj = SpecialPage::getPage( $special );
17 if ( !$specialObj ) {
18 print "No such special page: $special\n";
19 exit;
20 }
21 $file = $specialObj->getFile();
22 if ( $file ) {
23 require_once( $file );
24 }
25 $queryPage = new $class;
26
27 printf( '%-30s', $special );
28
29 if ( $queryPage->isExpensive() ) {
30 $t1 = explode( ' ', microtime() );
31 # Do the query
32 $num = $queryPage->recache();
33 $t2 = explode( ' ', microtime() );
34
35 if ( $num === false ) {
36 print "FAILED: database error\n";
37 } else {
38 print "got $num rows in ";
39
40 $elapsed = ($t2[0] - $t1[0]) + ($t2[1] - $t1[1]);
41 $hours = intval( $elapsed / 3600 );
42 $minutes = intval( $elapsed % 3600 / 60 );
43 $seconds = $elapsed - $hours * 3600 - $minutes * 60;
44 if ( $hours ) {
45 print $hours . 'h ';
46 }
47 if ( $minutes ) {
48 print $minutes . 'm ';
49 }
50 printf( "%.2fs\n", $seconds );
51 }
52
53 # Reopen any connections that have closed
54 if ( !$wgLoadBalancer->pingAll()) {
55 print "\n";
56 do {
57 print "Connection failed, reconnecting in 10 seconds...\n";
58 sleep(10);
59 } while ( !$wgLoadBalancer->pingAll() );
60 print "Reconnected\n\n";
61 } else {
62 # Commit the results
63 $dbw->immediateCommit();
64 }
65
66 # Wait for the slave to catch up
67 $slaveDB =& wfGetDB( DB_SLAVE, array('QueryPage::recache', 'vslow' ) );
68 while( $slaveDB->getLag() > 600 ) {
69 print "Slave lagged, waiting...\n";
70 sleep(30);
71
72 }
73
74 } else {
75 print "cheap, skipped\n";
76 }
77 }
78
79 ?>