Ori.livneh has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/80958


Change subject: Add 'RedisPubSubFeedEngine' feed engine
......................................................................

Add 'RedisPubSubFeedEngine' feed engine

This patch adds a class which implements the RCFeedEngine interface by
publishing recent change notifications to Redis. The class handles the
'redis://' URI scheme. Recent changes are PUBLISHed to the channel 'rc'; a
different channel name may be specified as a path component.

Change-Id: I846036c091c45059a8947245a1efe92c9800dcf4
---
M includes/AutoLoader.php
M includes/DefaultSettings.php
A includes/rcfeed/RedisPubSubFeedEngine.php
3 files changed, 43 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/58/80958/1

diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php
index b830b16..364fe80 100644
--- a/includes/AutoLoader.php
+++ b/includes/AutoLoader.php
@@ -837,6 +837,7 @@
 
        # includes/rcfeed
        'RCFeedEngine' => 'includes/rcfeed/RCFeedEngine.php',
+       'RedisPubSubFeedEngine' => 'includes/rcfeed/RedisPubSubFeedEngine.php',
        'UDPRCFeedEngine' => 'includes/rcfeed/UDPRCFeedEngine.php',
        'RCFeedFormatter' => 'includes/rcfeed/RCFeedFormatter.php',
        'IRCColourfulRCFeedFormatter' => 
'includes/rcfeed/IRCColourfulRCFeedFormatter.php',
diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php
index 20c72ee..6c8739b 100644
--- a/includes/DefaultSettings.php
+++ b/includes/DefaultSettings.php
@@ -5474,6 +5474,7 @@
  * Keys are scheme names, values are names of engine classes.
  */
 $wgStreamLoggers = array(
+       'redis' => 'RedisPubSubFeedEngine',
        'udp' => 'UDPRCFeedEngine',
 );
 
diff --git a/includes/rcfeed/RedisPubSubFeedEngine.php 
b/includes/rcfeed/RedisPubSubFeedEngine.php
new file mode 100644
index 0000000..cfa1bf7
--- /dev/null
+++ b/includes/rcfeed/RedisPubSubFeedEngine.php
@@ -0,0 +1,41 @@
+<?php
+class RedisPubSubFeedEngine implements RCFeedEngine {
+       /**
+        * Emit a recent change notification via Redis Pub/Sub
+        *
+        * If the feed URI contains a path component, it will be used to 
generate a
+        * channel name by stripping the leading slash and replacing any 
remaining
+        * slashes with '.'. If no path component is present, the channel is 
set to
+        * 'rc'. If the URI contains a query string, its parameters will be 
parsed
+        * as RedisConnectionPool options.
+        *
+        * @example $wgRCFeeds['redis'] = array(
+        *      'formatter' => 'JSONRCFeedFormatter',
+        *      'uri'       => "redis://127.0.0.1:6379/rc.$wgDBname",
+        * );
+        *
+        * @since 1.22
+        */
+       public function send( array $feed, $line ) {
+               $parsed = parse_url( $feed['uri'] );
+               $server = $parsed['host'];
+               $options = array( 'serializer' => 'none' );  // serialization 
is the purview of the formatter.
+               $channel = 'rc';
+
+               if ( isset( $parsed['port'] ) ) {
+                       $server .= ":{$parsed['port']}";
+               }
+               if ( isset( $parsed['query'] ) ) {
+                       parse_str( $parsed['query'], $options );
+               }
+               if ( isset( $parsed['pass'] ) ) {
+                       $options['password'] = $parsed['pass'];
+               }
+               if ( isset( $parsed['path'] ) ) {
+                       $channel = str_replace( '/', '.', ltrim( 
$parsed['path'], '/' ) );
+               }
+               $pool = RedisConnectionPool::singleton( $options );
+               $conn = $pool->getConnection( $server );
+               $conn->publish( $channel, $line );
+       }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/80958
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I846036c091c45059a8947245a1efe92c9800dcf4
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Ori.livneh <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to