Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
95.83% covered (success)
95.83%
23 / 24
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
CdnPurgeEventRelayer
95.83% covered (success)
95.83%
23 / 24
50.00% covered (danger)
50.00%
1 / 2
3
0.00% covered (danger)
0.00%
0 / 1
 __construct
85.71% covered (warning)
85.71%
6 / 7
0.00% covered (danger)
0.00%
0 / 1
2.01
 doNotify
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace MediaWiki\Extension\EventBus\Adapters\EventRelayer;
4
5use InvalidArgumentException;
6use MediaWiki\Extension\EventBus\EventBus;
7use MediaWiki\MediaWikiServices;
8use MediaWiki\Utils\MWTimestamp;
9use Wikimedia\Assert\Assert;
10use Wikimedia\EventRelayer\EventRelayer;
11
12/**
13 * @package MediaWiki\Extension\EventBus
14 * @since 1.35
15 */
16class CdnPurgeEventRelayer extends EventRelayer {
17
18    /** @var string */
19    private $purgeStream;
20
21    /** @var EventBus */
22    private $eventBus;
23
24    /**
25     * @param array $params
26     *  - string 'stream' - the name of the stream the CDN purge events
27     *  will be produced to. Required.
28     * @throws InvalidArgumentException if $params are misconfigured
29     */
30    public function __construct( array $params ) {
31        parent::__construct( $params );
32        if ( !isset( $params['stream'] ) ) {
33            throw new InvalidArgumentException( 'purge_stream must be configured' );
34        }
35
36        $this->purgeStream = $params['stream'];
37        $this->eventBus = MediaWikiServices::getInstance()
38            ->getService( 'EventBus.EventBusFactory' )
39            ->getInstanceForStream( $this->purgeStream );
40    }
41
42    /**
43     * @param string $channel
44     * @param array $events
45     * @return bool
46     */
47    protected function doNotify( $channel, array $events ) {
48        Assert::precondition(
49            $channel === 'cdn-url-purges',
50            "Invalid CdnPurgeEventRelayer configuration. Called on $channel"
51        );
52        return $this->eventBus->send(
53            array_map( function ( $event ) {
54                return $this->eventBus->getFactory()->createEvent(
55                    $event['url'],
56                    '/resource_change/1.0.0',
57                    $this->purgeStream,
58                    [ 'tags' => [ 'mediawiki' ] ],
59                    null,
60                    MWTimestamp::convert( TS_ISO_8601, $event['timestamp'] )
61                );
62            }, $events ),
63            EventBus::TYPE_PURGE
64        ) === true;
65    }
66}