X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2FgetLagTimes.php;h=c2c7983347f54f7b27dba86006e756d5c0132747;hb=801a8bdaa38cea5ff4db0440c82e9eb83e083772;hp=7365a2ee71d3d471443317de37bf7d9c084cdfe4;hpb=f5e3f458642bfe82599150c32be1909da5701f0f;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/getLagTimes.php b/maintenance/getLagTimes.php index 7365a2ee71..c2c7983347 100644 --- a/maintenance/getLagTimes.php +++ b/maintenance/getLagTimes.php @@ -23,6 +23,8 @@ require_once __DIR__ . '/Maintenance.php'; +use MediaWiki\MediaWikiServices; + /** * Maintenance script that displays replication lag times. * @@ -31,32 +33,47 @@ require_once __DIR__ . '/Maintenance.php'; class GetLagTimes extends Maintenance { public function __construct() { parent::__construct(); - $this->mDescription = "Dump replication lag times"; + $this->addDescription( 'Dump replication lag times' ); + $this->addOption( 'report', "Report the lag values to StatsD" ); } public function execute() { - $lb = wfGetLB(); - - if ( $lb->getServerCount() == 1 ) { - $this->error( "This script dumps replication lag times, but you don't seem to have\n" - . "a multi-host db server configuration." ); - } else { - $lags = $lb->getLagTimes(); - foreach ( $lags as $n => $lag ) { - $host = $lb->getServerName( $n ); - if ( IP::isValid( $host ) ) { - $ip = $host; - $host = gethostbyaddr( $host ); - } else { - $ip = gethostbyname( $host ); + $services = MediaWikiServices::getInstance(); + $lbFactory = $services->getDBLoadBalancerFactory(); + $stats = $services->getStatsdDataFactory(); + $lbsByType = [ + 'main' => $lbFactory->getAllMainLBs(), + 'external' => $lbFactory->getAllExternalLBs() + ]; + + foreach ( $lbsByType as $type => $lbs ) { + foreach ( $lbs as $cluster => $lb ) { + if ( $lb->getServerCount() <= 1 ) { + continue; + } + $lags = $lb->getLagTimes(); + foreach ( $lags as $serverIndex => $lag ) { + $host = $lb->getServerName( $serverIndex ); + if ( IP::isValid( $host ) ) { + $ip = $host; + $host = gethostbyaddr( $host ); + } else { + $ip = gethostbyname( $host ); + } + + $starLen = min( intval( $lag ), 40 ); + $stars = str_repeat( '*', $starLen ); + $this->output( sprintf( "%10s %20s %3d %s\n", $ip, $host, $lag, $stars ) ); + + if ( $this->hasOption( 'report' ) ) { + $group = ( $type === 'external' ) ? 'external' : $cluster; + $stats->gauge( "loadbalancer.lag.$group.$host", intval( $lag * 1e3 ) ); + } } - $starLen = min( intval( $lag ), 40 ); - $stars = str_repeat( '*', $starLen ); - $this->output( sprintf( "%10s %20s %3d %s\n", $ip, $host, $lag, $stars ) ); } } } } -$maintClass = "GetLagTimes"; +$maintClass = GetLagTimes::class; require_once RUN_MAINTENANCE_IF_MAIN;