'ParserCloned': Called when the parser is cloned.
$parser: Newly-cloned Parser object
+'ParserFetchTemplate': Called when the parser fetches a template
+$parser: Parser Parser object or false
+$title: Title object of the template to be fetched
+$rev: Revision object of the template
+&$text: Transclusion text of the template or false or null
+&$deps: Array of template dependencies with 'title', 'page_id', 'rev_id' keys
+
'ParserFirstCallInit': Called when the parser initialises for the first time.
&$parser: Parser object being cleared
$this->cache->incr( $throttleKey );
} else { // throttled
$this->logRejection( [
- 'type' => $this->type,
+ 'throttle' => $this->type,
'index' => $index,
'ip' => $ipKey,
'username' => $username,
}
protected function logRejection( array $context ) {
- $logMsg = 'Throttle {type} hit, throttled for {expiry} seconds due to {count} attempts '
+ $logMsg = 'Throttle {throttle} hit, throttled for {expiry} seconds due to {count} attempts '
. 'from username {username} and IP {ip}';
// If we are hitting a throttle for >= warningLimit attempts, it is much more likely to be
$content = $rev->getContent();
$text = $content ? $content->getWikitextForTransclusion() : null;
+ Hooks::run( 'ParserFetchTemplate',
+ [ $parser, $title, $rev, &$text, &$deps ] );
+
if ( $text === false || $text === null ) {
$text = false;
break;
->setMethods( [ 'log' ] )
->getMockForAbstractClass();
$logger->expects( $this->once() )->method( 'log' )->with( $this->anything(), $this->anything(), [
- 'type' => 'custom',
+ 'throttle' => 'custom',
'index' => 0,
'ip' => '1.2.3.4',
'username' => 'SomeUser',