Info.php 1.5 KB

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