2003-10-20 13:41:43 +00:00
|
|
|
<?php
|
2004-09-03 20:33:01 +00:00
|
|
|
/**
|
|
|
|
|
* memcached diagnostic tool
|
|
|
|
|
*
|
|
|
|
|
* @todo document
|
|
|
|
|
* @package MediaWiki
|
|
|
|
|
* @subpackage Maintenance
|
|
|
|
|
*/
|
2003-10-20 13:41:43 +00:00
|
|
|
|
2004-09-03 20:33:01 +00:00
|
|
|
/** */
|
2005-12-03 17:02:22 +00:00
|
|
|
require_once( 'commandLine.inc' );
|
|
|
|
|
require_once( 'memcached-client.php' );
|
2004-06-01 07:42:32 +00:00
|
|
|
|
2005-12-03 18:14:19 +00:00
|
|
|
$mcc = new memcached( array('persistant' => true/*, 'debug' => true*/) );
|
2003-10-20 13:41:43 +00:00
|
|
|
$mcc->set_servers( $wgMemCachedServers );
|
2005-12-03 18:14:19 +00:00
|
|
|
#$mcc->set_debug( true );
|
2003-10-20 13:41:43 +00:00
|
|
|
|
2005-12-03 17:41:34 +00:00
|
|
|
function mccShowHelp($command) {
|
|
|
|
|
|
|
|
|
|
if(! $command ) { $command = 'fullhelp'; }
|
|
|
|
|
$onlyone = true;
|
|
|
|
|
|
|
|
|
|
switch ( $command ) {
|
|
|
|
|
|
|
|
|
|
case 'fullhelp':
|
|
|
|
|
// will show help for all commands
|
|
|
|
|
$onlyone = false;
|
|
|
|
|
|
|
|
|
|
case 'get':
|
|
|
|
|
print "get: grabs something\n";
|
|
|
|
|
if($onlyone) { break; }
|
|
|
|
|
|
|
|
|
|
case 'getsock':
|
|
|
|
|
print "getsock: lists sockets\n";
|
|
|
|
|
if($onlyone) { break; }
|
|
|
|
|
|
|
|
|
|
case 'set':
|
|
|
|
|
print "set: changes something\n";
|
|
|
|
|
if($onlyone) { break; }
|
|
|
|
|
|
|
|
|
|
case 'delete':
|
|
|
|
|
print "delete: deletes something\n";
|
|
|
|
|
if($onlyone) { break; }
|
|
|
|
|
|
2005-12-03 17:46:21 +00:00
|
|
|
case 'history':
|
|
|
|
|
print "history: show command line history\n";
|
|
|
|
|
if($onlyone) { break; }
|
|
|
|
|
|
2005-12-03 18:14:19 +00:00
|
|
|
case 'server':
|
|
|
|
|
print "server: show current memcached server\n";
|
|
|
|
|
if($onlyone) { break; }
|
|
|
|
|
|
2005-12-03 17:41:34 +00:00
|
|
|
case 'dumpmcc':
|
|
|
|
|
print "dumpmcc: shows the whole thing\n";
|
|
|
|
|
if($onlyone) { break; }
|
|
|
|
|
|
|
|
|
|
case 'exit':
|
|
|
|
|
case 'quit':
|
|
|
|
|
print "exit or quit: exit mcc\n";
|
|
|
|
|
if($onlyone) { break; }
|
|
|
|
|
|
|
|
|
|
case 'help':
|
|
|
|
|
print "help: help about a command\n";
|
|
|
|
|
if($onlyone) { break; }
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
if($onlyone) {
|
|
|
|
|
print "$command: command does not exist or no help for it\n";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2003-10-20 13:41:43 +00:00
|
|
|
do {
|
|
|
|
|
$bad = false;
|
2005-12-03 17:41:34 +00:00
|
|
|
$showhelp = false;
|
2003-10-20 13:41:43 +00:00
|
|
|
$quit = false;
|
2005-12-03 17:02:22 +00:00
|
|
|
|
|
|
|
|
$line = readconsole( '> ' );
|
2005-07-07 02:29:55 +00:00
|
|
|
if ($line === false) exit;
|
2005-12-03 18:14:19 +00:00
|
|
|
|
2005-12-03 17:02:22 +00:00
|
|
|
$args = explode( ' ', $line );
|
2003-10-20 13:41:43 +00:00
|
|
|
$command = array_shift( $args );
|
2005-12-03 17:02:22 +00:00
|
|
|
|
2005-12-03 17:41:34 +00:00
|
|
|
// process command
|
2003-10-20 13:41:43 +00:00
|
|
|
switch ( $command ) {
|
2005-12-03 17:41:34 +00:00
|
|
|
case 'help':
|
|
|
|
|
// show an help message
|
|
|
|
|
mccShowHelp(array_shift($args));
|
|
|
|
|
break;
|
2005-12-03 17:02:22 +00:00
|
|
|
|
|
|
|
|
case 'get':
|
2003-11-30 08:21:40 +00:00
|
|
|
print "Getting {$args[0]}[{$args[1]}]\n";
|
|
|
|
|
$res = $mcc->get( $args[0] );
|
|
|
|
|
if ( array_key_exists( 1, $args ) ) {
|
|
|
|
|
$res = $res[$args[1]];
|
|
|
|
|
}
|
2003-10-20 13:41:43 +00:00
|
|
|
if ( $res === false ) {
|
2004-06-01 07:42:32 +00:00
|
|
|
#print 'Error: ' . $mcc->error_string() . "\n";
|
|
|
|
|
print "MemCached error\n";
|
2003-10-20 13:41:43 +00:00
|
|
|
} elseif ( is_string( $res ) ) {
|
|
|
|
|
print "$res\n";
|
|
|
|
|
} else {
|
|
|
|
|
var_dump( $res );
|
|
|
|
|
}
|
2005-12-03 17:41:34 +00:00
|
|
|
break;
|
2005-12-03 17:02:22 +00:00
|
|
|
|
|
|
|
|
case 'getsock':
|
2004-09-25 16:54:31 +00:00
|
|
|
$res = $mcc->get( $args[0] );
|
|
|
|
|
$sock = $mcc->get_sock( $args[0] );
|
|
|
|
|
var_dump( $sock );
|
|
|
|
|
break;
|
2005-12-03 17:02:22 +00:00
|
|
|
|
2005-12-03 18:14:19 +00:00
|
|
|
case 'server':
|
|
|
|
|
$res = $mcc->get( $args[0] );
|
|
|
|
|
print $mcc->_buckets[$mcc->_hashfunc( $args[0] ) % $mcc->_bucketcount] . "\n";
|
|
|
|
|
break;
|
|
|
|
|
|
2005-12-03 17:02:22 +00:00
|
|
|
case 'set':
|
2003-10-20 13:41:43 +00:00
|
|
|
$key = array_shift( $args );
|
2003-11-30 08:21:40 +00:00
|
|
|
if ( $args[0] == "#" && is_numeric( $args[1] ) ) {
|
2005-12-03 17:02:22 +00:00
|
|
|
$value = str_repeat( '*', $args[1] );
|
2003-11-30 08:21:40 +00:00
|
|
|
} else {
|
2005-12-03 17:02:22 +00:00
|
|
|
$value = implode( ' ', $args );
|
2003-11-30 08:21:40 +00:00
|
|
|
}
|
|
|
|
|
if ( !$mcc->set( $key, $value, 0 ) ) {
|
2004-06-01 07:42:32 +00:00
|
|
|
#print 'Error: ' . $mcc->error_string() . "\n";
|
|
|
|
|
print "MemCached error\n";
|
2003-10-20 13:41:43 +00:00
|
|
|
}
|
|
|
|
|
break;
|
2005-12-03 17:02:22 +00:00
|
|
|
|
|
|
|
|
case 'delete':
|
|
|
|
|
$key = implode( ' ', $args );
|
2003-11-30 08:21:40 +00:00
|
|
|
if ( !$mcc->delete( $key ) ) {
|
2004-06-01 07:42:32 +00:00
|
|
|
#print 'Error: ' . $mcc->error_string() . "\n";
|
|
|
|
|
print "MemCached error\n";
|
2003-11-30 08:21:40 +00:00
|
|
|
}
|
2005-12-03 17:02:22 +00:00
|
|
|
break;
|
|
|
|
|
|
2005-12-03 17:46:21 +00:00
|
|
|
case 'history':
|
|
|
|
|
if ( function_exists( 'readline_list_history' ) ) {
|
2005-12-04 00:00:06 +00:00
|
|
|
foreach( readline_list_history() as $num => $line) {
|
|
|
|
|
print "$num: $line\n";
|
|
|
|
|
}
|
2005-12-03 17:46:21 +00:00
|
|
|
} else {
|
|
|
|
|
print "readline_list_history() not available\n";
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
2005-12-03 17:02:22 +00:00
|
|
|
case 'dumpmcc':
|
2004-09-25 16:54:31 +00:00
|
|
|
var_dump( $mcc );
|
|
|
|
|
break;
|
2005-12-03 17:02:22 +00:00
|
|
|
|
|
|
|
|
case 'quit':
|
|
|
|
|
case 'exit':
|
2003-10-20 13:41:43 +00:00
|
|
|
$quit = true;
|
|
|
|
|
break;
|
2005-12-03 17:02:22 +00:00
|
|
|
|
2003-10-20 13:41:43 +00:00
|
|
|
default:
|
|
|
|
|
$bad = true;
|
2005-12-03 17:41:34 +00:00
|
|
|
} // switch() end
|
|
|
|
|
|
2003-10-20 13:41:43 +00:00
|
|
|
if ( $bad ) {
|
|
|
|
|
if ( $command ) {
|
|
|
|
|
print "Bad command\n";
|
|
|
|
|
}
|
|
|
|
|
} else {
|
2005-12-03 17:02:22 +00:00
|
|
|
if ( function_exists( 'readline_add_history' ) ) {
|
2003-11-21 05:00:22 +00:00
|
|
|
readline_add_history( $line );
|
|
|
|
|
}
|
2003-10-20 13:41:43 +00:00
|
|
|
}
|
|
|
|
|
} while ( !$quit );
|
2003-11-21 05:00:22 +00:00
|
|
|
|
2003-10-20 13:41:43 +00:00
|
|
|
?>
|