Info.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. namespace Predis\Commands;
  3. class Info extends Command {
  4. public function canBeHashed() { return false; }
  5. public function getId() { return 'INFO'; }
  6. public function parseResponse($data) {
  7. $info = array();
  8. $infoLines = explode("\r\n", $data, -1);
  9. foreach ($infoLines as $row) {
  10. @list($k, $v) = explode(':', $row);
  11. if ($row === '' || !isset($v)) {
  12. continue;
  13. }
  14. if (!preg_match('/^db\d+$/', $k)) {
  15. if ($k === 'allocation_stats') {
  16. $info[$k] = $this->parseAllocationStats($v);
  17. continue;
  18. }
  19. $info[$k] = $v;
  20. }
  21. else {
  22. $db = array();
  23. foreach (explode(',', $v) as $dbvar) {
  24. list($dbvk, $dbvv) = explode('=', $dbvar);
  25. $db[trim($dbvk)] = $dbvv;
  26. }
  27. $info[$k] = $db;
  28. }
  29. }
  30. return $info;
  31. }
  32. protected function parseAllocationStats($str) {
  33. $stats = array();
  34. foreach (explode(',', $str) as $kv) {
  35. @list($size, $objects, $extra) = explode('=', $kv);
  36. // hack to prevent incorrect values when parsing the >=256 key
  37. if (isset($extra)) {
  38. $size = ">=$objects";
  39. $objects = $extra;
  40. }
  41. $stats[$size] = $objects;
  42. }
  43. return $stats;
  44. }
  45. }