[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Benchmark for Squid purge. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 * http://www.gnu.org/copyleft/gpl.html 19 * 20 * @file 21 * @ingroup Benchmark 22 */ 23 24 require_once __DIR__ . '/Benchmarker.php'; 25 26 /** 27 * Maintenance script that benchmarks Squid purge. 28 * 29 * @ingroup Benchmark 30 */ 31 class BenchmarkPurge extends Benchmarker { 32 public function __construct() { 33 parent::__construct(); 34 $this->mDescription = "Benchmark the Squid purge functions."; 35 } 36 37 public function execute() { 38 global $wgUseSquid, $wgSquidServers; 39 if ( !$wgUseSquid ) { 40 $this->error( "Squid purge benchmark doesn't do much without squid support on.", true ); 41 } else { 42 $this->output( "There are " . count( $wgSquidServers ) . " defined squid servers:\n" ); 43 if ( $this->hasOption( 'count' ) ) { 44 $lengths = array( intval( $this->getOption( 'count' ) ) ); 45 } else { 46 $lengths = array( 1, 10, 100 ); 47 } 48 foreach ( $lengths as $length ) { 49 $urls = $this->randomUrlList( $length ); 50 $trial = $this->benchSquid( $urls ); 51 $this->output( $trial . "\n" ); 52 } 53 } 54 } 55 56 /** 57 * Run a bunch of URLs through SquidUpdate::purge() 58 * to benchmark Squid response times. 59 * @param array $urls A bunch of URLs to purge 60 * @param int $trials How many times to run the test? 61 * @return string 62 */ 63 private function benchSquid( $urls, $trials = 1 ) { 64 $start = microtime( true ); 65 for ( $i = 0; $i < $trials; $i++ ) { 66 SquidUpdate::purge( $urls ); 67 } 68 $delta = microtime( true ) - $start; 69 $pertrial = $delta / $trials; 70 $pertitle = $pertrial / count( $urls ); 71 72 return sprintf( "%4d titles in %6.2fms (%6.2fms each)", 73 count( $urls ), $pertrial * 1000.0, $pertitle * 1000.0 ); 74 } 75 76 /** 77 * Get an array of randomUrl()'s. 78 * @param int $length How many urls to add to the array 79 * @return array 80 */ 81 private function randomUrlList( $length ) { 82 $list = array(); 83 for ( $i = 0; $i < $length; $i++ ) { 84 $list[] = $this->randomUrl(); 85 } 86 87 return $list; 88 } 89 90 /** 91 * Return a random URL of the wiki. Not necessarily an actual title in the 92 * database, but at least a URL that looks like one. 93 * @return string 94 */ 95 private function randomUrl() { 96 global $wgServer, $wgArticlePath; 97 98 return $wgServer . str_replace( '$1', $this->randomTitle(), $wgArticlePath ); 99 } 100 101 /** 102 * Create a random title string (not necessarily a Title object). 103 * For use with randomUrl(). 104 * @return string 105 */ 106 private function randomTitle() { 107 $str = ''; 108 $length = mt_rand( 1, 20 ); 109 for ( $i = 0; $i < $length; $i++ ) { 110 $str .= chr( mt_rand( ord( 'a' ), ord( 'z' ) ) ); 111 } 112 113 return ucfirst( $str ); 114 } 115 } 116 117 $maintClass = "BenchmarkPurge"; 118 require_once RUN_MAINTENANCE_IF_MAIN;
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |