123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?php
- /*
- * This file is part of the Predis package.
- *
- * (c) Daniele Alessandri <suppakilla@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Predis\Command;
- /**
- * @link http://redis.io/commands/info
- * @author Daniele Alessandri <suppakilla@gmail.com>
- */
- class ServerInfo extends AbstractCommand
- {
- /**
- * {@inheritdoc}
- */
- public function getId()
- {
- return 'INFO';
- }
- /**
- * {@inheritdoc}
- */
- public function parseResponse($data)
- {
- $info = array();
- $infoLines = preg_split('/\r?\n/', $data);
- foreach ($infoLines as $row) {
- @list($k, $v) = explode(':', $row);
- if ($row === '' || !isset($v)) {
- continue;
- }
- if (!preg_match('/^db\d+$/', $k)) {
- if ($k === 'allocation_stats') {
- $info[$k] = $this->parseAllocationStats($v);
- continue;
- }
- $info[$k] = $v;
- } else {
- $info[$k] = $this->parseDatabaseStats($v);
- }
- }
- return $info;
- }
- /**
- * Parses the reply buffer and extracts the statistics of each logical DB.
- *
- * @param string $str Reply buffer.
- * @return array
- */
- protected function parseDatabaseStats($str)
- {
- $db = array();
- foreach (explode(',', $str) as $dbvar) {
- list($dbvk, $dbvv) = explode('=', $dbvar);
- $db[trim($dbvk)] = $dbvv;
- }
- return $db;
- }
- /**
- * Parses the reply buffer and extracts the allocation statistics.
- *
- * @param string $str Reply buffer.
- * @return array
- */
- protected function parseAllocationStats($str)
- {
- $stats = array();
- foreach (explode(',', $str) as $kv) {
- @list($size, $objects, $extra) = explode('=', $kv);
- // hack to prevent incorrect values when parsing the >=256 key
- if (isset($extra)) {
- $size = ">=$objects";
- $objects = $extra;
- }
- $stats[$size] = $objects;
- }
- return $stats;
- }
- }
|