Add stats for block errors on create/edit actions

Monitoring block errors is behind $wgEnableBlockNoticeStats
and it is disabled by default.

The reason behind this metric is to get an idea on how
frequently blocked users attempt to edit a page. Similar tracking
is being added to MobileFrontend and VisualEditor.

Depends-On: I6bd1c95548616677e1f72ba6bcfc6f2b551c1ca6
Bug: T201717
Change-Id: I18bdb5ce61509ba3c2cea9aa6247656b9bd388e0
This commit is contained in:
Dayllan Maza 2018-11-15 22:33:47 -05:00 committed by Dmaza
parent 49bb28b557
commit b89342ffdd

View file

@ -21,6 +21,7 @@
*/
use Wikimedia\Rdbms\IDatabase;
use MediaWiki\MediaWikiServices;
/**
* This abstract class implements many basic API functions, and is the base of
@ -2069,11 +2070,41 @@ abstract class ApiBase extends ContextSource {
foreach ( (array)$actions as $action ) {
$errors = array_merge( $errors, $title->getUserPermissionsErrors( $action, $user ) );
}
if ( $errors ) {
// track block notices
if ( $this->getConfig()->get( 'EnableBlockNoticeStats' ) ) {
$this->trackBlockNotices( $errors );
}
$this->dieStatus( $this->errorArrayToStatus( $errors, $user ) );
}
}
/**
* Keep track of errors messages resulting from a block
*
* @param array $errors
*/
private function trackBlockNotices( array $errors ) {
$errorMessageKeys = [
'blockedtext',
'blockedtext-partial',
'autoblockedtext',
'systemblockedtext',
];
$statsd = MediaWikiServices::getInstance()->getStatsdDataFactory();
foreach ( $errors as $error ) {
if ( in_array( $error[0], $errorMessageKeys ) ) {
$wiki = $this->getConfig()->get( 'DBname' );
$statsd->increment( 'BlockNotices.' . $wiki . '.MediaWikiApi.returned' );
break;
}
}
}
/**
* Will only set a warning instead of failing if the global $wgDebugAPI
* is set to true. Otherwise behaves exactly as self::dieWithError().