diff --git a/TODO b/TODO index abc859b0..e3236c6f 100644 --- a/TODO +++ b/TODO @@ -13,4 +13,4 @@ * Missing tests for commands: PUBLISH, SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, DEBUG, OBJECT, - CLIENT, CONFIG GET, CONFIG SET, CONFIG RESETSTAT + CLIENT, CONFIG GET, CONFIG SET, CONFIG RESETSTAT, SLOWLOG diff --git a/lib/Predis/Commands/ServerSlowlog.php b/lib/Predis/Commands/ServerSlowlog.php new file mode 100644 index 00000000..5f05359b --- /dev/null +++ b/lib/Predis/Commands/ServerSlowlog.php @@ -0,0 +1,78 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Predis\Commands; + +use Predis\Iterators\MultiBulkResponse; + +/** + * @link http://redis.io/commands/slowlog + * @author Daniele Alessandri + */ +class ServerSlowlog extends Command +{ + /** + * {@inheritdoc} + */ + public function getId() + { + return 'SLOWLOG'; + } + + /** + * {@inheritdoc} + */ + protected function onPrefixKeys(Array $arguments, $prefix) + { + /* NOOP */ + } + + /** + * {@inheritdoc} + */ + protected function canBeHashed() + { + return false; + } + + /** + * {@inheritdoc} + */ + public function parseResponse($data) + { + if (($iterable = $data instanceof \Iterator) || is_array($data)) { + // NOTE: we consume iterable multibulk replies inplace since it is not + // possible to do anything fancy on sub-elements. + $log = array(); + + foreach ($data as $index => $entry) { + if ($iterable) { + $entry = iterator_to_array($entry); + } + + $log[$index] = array( + 'id' => $entry[0], + 'timestamp' => $entry[1], + 'duration' => $entry[2], + 'command' => $iterable ? iterator_to_array($entry[3]) : $entry[3], + ); + } + + if ($iterable === true) { + unset($data); + } + + return $log; + } + + return $data; + } +} diff --git a/lib/Predis/Profiles/ServerVersion22.php b/lib/Predis/Profiles/ServerVersion22.php index bd38c55c..34b8fd01 100644 --- a/lib/Predis/Profiles/ServerVersion22.php +++ b/lib/Predis/Profiles/ServerVersion22.php @@ -198,6 +198,7 @@ class ServerVersion22 extends ServerProfile /* remote server control commands */ 'object' => '\Predis\Commands\ServerObject', + 'slowlog' => '\Predis\Commands\ServerSlowlog', ); } } diff --git a/lib/Predis/Profiles/ServerVersion24.php b/lib/Predis/Profiles/ServerVersion24.php index 133cf715..173d1ad5 100644 --- a/lib/Predis/Profiles/ServerVersion24.php +++ b/lib/Predis/Profiles/ServerVersion24.php @@ -198,6 +198,7 @@ class ServerVersion24 extends ServerProfile /* remote server control commands */ 'object' => '\Predis\Commands\ServerObject', + 'slowlog' => '\Predis\Commands\ServerSlowlog', /* ---------------- Redis 2.4 ---------------- */