[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/maintenance/ -> mctest.php (source)

   1  <?php
   2  /**
   3   * Makes several 'set', 'incr' and 'get' requests on every memcached
   4   * server and shows a report.
   5   *
   6   * This program is free software; you can redistribute it and/or modify
   7   * it under the terms of the GNU General Public License as published by
   8   * the Free Software Foundation; either version 2 of the License, or
   9   * (at your option) any later version.
  10   *
  11   * This program is distributed in the hope that it will be useful,
  12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14   * GNU General Public License for more details.
  15   *
  16   * You should have received a copy of the GNU General Public License along
  17   * with this program; if not, write to the Free Software Foundation, Inc.,
  18   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19   * http://www.gnu.org/copyleft/gpl.html
  20   *
  21   * @file
  22   * @ingroup Maintenance
  23   */
  24  
  25  require_once  __DIR__ . '/Maintenance.php';
  26  
  27  /**
  28   * Maintenance script that  makes several 'set', 'incr' and 'get' requests
  29   * on every memcached server and shows a report.
  30   *
  31   * @ingroup Maintenance
  32   */
  33  class McTest extends Maintenance {
  34  	public function __construct() {
  35          parent::__construct();
  36          $this->mDescription = "Makes several 'set', 'incr' and 'get' requests on every"
  37              . " memcached server and shows a report";
  38          $this->addOption( 'i', 'Number of iterations', false, true );
  39          $this->addOption( 'cache', 'Use servers from this $wgObjectCaches store', false, true );
  40          $this->addArg( 'server[:port]', 'Memcached server to test, with optional port', false );
  41      }
  42  
  43  	public function execute() {
  44          global $wgMainCacheType, $wgMemCachedTimeout, $wgObjectCaches;
  45  
  46          $cache = $this->getOption( 'cache' );
  47          $iterations = $this->getOption( 'i', 100 );
  48          if ( $cache ) {
  49              if ( !isset( $wgObjectCaches[$cache] ) ) {
  50                  $this->error( "MediaWiki isn't configured with a cache named '$cache'", 1 );
  51              }
  52              $servers = $wgObjectCaches[$cache]['servers'];
  53          } elseif ( $this->hasArg() ) {
  54              $servers = array( $this->getArg() );
  55          } elseif ( $wgMainCacheType === CACHE_MEMCACHED ) {
  56              global $wgMemCachedServers;
  57              $servers = $wgMemCachedServers;
  58          } elseif ( isset( $wgObjectCaches[$wgMainCacheType]['servers'] ) ) {
  59              $servers = $wgObjectCaches[$wgMainCacheType]['servers'];
  60          } else {
  61              $this->error( "MediaWiki isn't configured for Memcached usage", 1 );
  62          }
  63  
  64          # find out the longest server string to nicely align output later on
  65          $maxSrvLen = $servers ? max( array_map( 'strlen', $servers ) ) : 0;
  66  
  67          foreach ( $servers as $server ) {
  68              $this->output(
  69                  str_pad( $server, $maxSrvLen ),
  70                  $server # output channel
  71              );
  72  
  73              $mcc = new MemCachedClientforWiki( array(
  74                  'persistant' => true,
  75                  'timeout' => $wgMemCachedTimeout
  76              ) );
  77              $mcc->set_servers( array( $server ) );
  78              $set = 0;
  79              $incr = 0;
  80              $get = 0;
  81              $time_start = microtime( true );
  82              for ( $i = 1; $i <= $iterations; $i++ ) {
  83                  if ( $mcc->set( "test$i", $i ) ) {
  84                      $set++;
  85                  }
  86              }
  87              for ( $i = 1; $i <= $iterations; $i++ ) {
  88                  if ( !is_null( $mcc->incr( "test$i", $i ) ) ) {
  89                      $incr++;
  90                  }
  91              }
  92              for ( $i = 1; $i <= $iterations; $i++ ) {
  93                  $value = $mcc->get( "test$i" );
  94                  if ( $value == $i * 2 ) {
  95                      $get++;
  96                  }
  97              }
  98              $exectime = microtime( true ) - $time_start;
  99  
 100              $this->output( " set: $set   incr: $incr   get: $get time: $exectime", $server );
 101          }
 102      }
 103  }
 104  
 105  $maintClass = "McTest";
 106  require_once RUN_MAINTENANCE_IF_MAIN;


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1