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