Merge "Create a base interface for watchers"

This commit is contained in:
jenkins-bot 2020-11-22 03:08:46 +00:00 committed by Gerrit Code Review
commit 020ca95186
7 changed files with 34 additions and 15 deletions

View file

@ -133,7 +133,8 @@
"MediaWiki\\Extension\\AbuseFilter\\Hooks\\": "includes/Hooks/",
"MediaWiki\\Extension\\AbuseFilter\\LogFormatter\\": "includes/LogFormatter/",
"MediaWiki\\Extension\\AbuseFilter\\Parser\\": "includes/ParserNS/",
"MediaWiki\\Extension\\AbuseFilter\\Filter\\": "includes/Filter/"
"MediaWiki\\Extension\\AbuseFilter\\Filter\\": "includes/Filter/",
"MediaWiki\\Extension\\AbuseFilter\\Watcher\\": "includes/Watcher/"
},
"AutoloadClasses": {
"AbuseFilter": "includes/AbuseFilter.php",
@ -167,7 +168,6 @@
"MediaWiki\\Extension\\AbuseFilter\\FilterLookup": "includes/FilterLookup.php",
"MediaWiki\\Extension\\AbuseFilter\\KeywordsManager": "includes/KeywordsManager.php",
"MediaWiki\\Extension\\AbuseFilter\\AbuseFilterPermissionManager": "includes/AbuseFilterPermissionManager.php",
"MediaWiki\\Extension\\AbuseFilter\\EmergencyWatcher": "includes/EmergencyWatcher.php",
"MediaWiki\\Extension\\AbuseFilter\\AbuseFilterServices": "includes/AbuseFilterServices.php",
"MediaWiki\\Extension\\AbuseFilter\\FilterProfiler": "includes/FilterProfiler.php",
"MediaWiki\\Extension\\AbuseFilter\\ChangeTagger": "includes/ChangeTagger.php",

View file

@ -2,12 +2,12 @@
use MediaWiki\Extension\AbuseFilter\AbuseFilterServices;
use MediaWiki\Extension\AbuseFilter\ChangeTagger;
use MediaWiki\Extension\AbuseFilter\EmergencyWatcher;
use MediaWiki\Extension\AbuseFilter\Filter\Filter;
use MediaWiki\Extension\AbuseFilter\FilterLookup;
use MediaWiki\Extension\AbuseFilter\FilterProfiler;
use MediaWiki\Extension\AbuseFilter\Hooks\AbuseFilterHookRunner;
use MediaWiki\Extension\AbuseFilter\VariableGenerator\VariableGenerator;
use MediaWiki\Extension\AbuseFilter\Watcher\Watcher;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
use MediaWiki\Session\SessionManager;
@ -80,8 +80,8 @@ class AbuseFilterRunner {
/** @var FilterLookup */
private $filterLookup;
/** @var EmergencyWatcher */
private $emergencyWatcher;
/** @var Watcher[] */
private $watchers;
/**
* @param User $user The user who performed the action being filtered
@ -110,7 +110,8 @@ class AbuseFilterRunner {
$this->changeTagger = AbuseFilterServices::getChangeTagger();
$this->filterUser = AbuseFilterServices::getFilterUser()->getUser();
$this->filterLookup = AbuseFilterServices::getFilterLookup();
$this->emergencyWatcher = AbuseFilterServices::getEmergencyWatcher();
// TODO Inject, add a hook for custom watchers
$this->watchers = [ AbuseFilterServices::getEmergencyWatcher() ];
}
/**
@ -1123,7 +1124,9 @@ class AbuseFilterRunner {
'global' => $globalLogIDs
];
$this->emergencyWatcher->checkFilters( $loggedLocalFilters, $this->group );
foreach ( $this->watchers as $watcher ) {
$watcher->run( $loggedLocalFilters, $this->group );
}
}
/**

View file

@ -3,6 +3,7 @@
namespace MediaWiki\Extension\AbuseFilter;
use MediaWiki\Extension\AbuseFilter\Parser\ParserFactory;
use MediaWiki\Extension\AbuseFilter\Watcher\EmergencyWatcher;
use MediaWiki\MediaWikiServices;
class AbuseFilterServices {

View file

@ -6,7 +6,6 @@ use MediaWiki\Extension\AbuseFilter\BlockAutopromoteStore;
use MediaWiki\Extension\AbuseFilter\CentralDBManager;
use MediaWiki\Extension\AbuseFilter\ChangeTagger;
use MediaWiki\Extension\AbuseFilter\ChangeTagsManager;
use MediaWiki\Extension\AbuseFilter\EmergencyWatcher;
use MediaWiki\Extension\AbuseFilter\FilterCompare;
use MediaWiki\Extension\AbuseFilter\FilterImporter;
use MediaWiki\Extension\AbuseFilter\FilterLookup;
@ -16,6 +15,7 @@ use MediaWiki\Extension\AbuseFilter\FilterValidator;
use MediaWiki\Extension\AbuseFilter\Hooks\AbuseFilterHookRunner;
use MediaWiki\Extension\AbuseFilter\KeywordsManager;
use MediaWiki\Extension\AbuseFilter\Parser\ParserFactory;
use MediaWiki\Extension\AbuseFilter\Watcher\EmergencyWatcher;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;

View file

@ -1,11 +1,13 @@
<?php
namespace MediaWiki\Extension\AbuseFilter;
namespace MediaWiki\Extension\AbuseFilter\Watcher;
use AutoCommitUpdate;
use DeferredUpdates;
use InvalidArgumentException;
use MediaWiki\Config\ServiceOptions;
use MediaWiki\Extension\AbuseFilter\FilterLookup;
use MediaWiki\Extension\AbuseFilter\FilterProfiler;
use Wikimedia\Rdbms\IDatabase;
use Wikimedia\Rdbms\ILoadBalancer;
@ -15,7 +17,7 @@ use Wikimedia\Rdbms\ILoadBalancer;
*
* @todo We should log throttling somewhere
*/
class EmergencyWatcher {
class EmergencyWatcher implements Watcher {
public const SERVICE_NAME = 'AbuseFilterEmergencyWatcher';
public const CONSTRUCTOR_OPTIONS = [
@ -112,10 +114,9 @@ class EmergencyWatcher {
/**
* Determine which a filters must be throttled and apply the throttling
*
* @param string[] $filters The filters to check
* @param string $group
* @inheritDoc
*/
public function checkFilters( array $filters, string $group ) : void {
public function run( array $filters, string $group ) : void {
$throttleFilters = $this->getFiltersToThrottle( $filters, $group );
if ( !$throttleFilters ) {
return;

View file

@ -0,0 +1,14 @@
<?php
namespace MediaWiki\Extension\AbuseFilter\Watcher;
/**
* Classes inheriting this interface can be used to execute some actions after all filter have been checked.
*/
interface Watcher {
/**
* @param string[] $filters The filters that matched the action
* @param string $group
*/
public function run( array $filters, string $group ) : void;
}

View file

@ -1,14 +1,14 @@
<?php
use MediaWiki\Config\ServiceOptions;
use MediaWiki\Extension\AbuseFilter\EmergencyWatcher;
use MediaWiki\Extension\AbuseFilter\Filter\MutableFilter;
use MediaWiki\Extension\AbuseFilter\FilterLookup;
use MediaWiki\Extension\AbuseFilter\FilterProfiler;
use MediaWiki\Extension\AbuseFilter\Watcher\EmergencyWatcher;
use Wikimedia\Rdbms\ILoadBalancer;
/**
* @coversDefaultClass \MediaWiki\Extension\AbuseFilter\EmergencyWatcher
* @coversDefaultClass \MediaWiki\Extension\AbuseFilter\Watcher\EmergencyWatcher
*/
class EmergencyWatcherTest extends MediaWikiUnitTestCase {