Info.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. $info[$k] = $this->parseDatabaseStats($v);
  23. }
  24. }
  25. return $info;
  26. }
  27. protected function parseDatabaseStats($str) {
  28. $db = array();
  29. foreach (explode(',', $str) as $dbvar) {
  30. list($dbvk, $dbvv) = explode('=', $dbvar);
  31. $db[trim($dbvk)] = $dbvv;
  32. }
  33. return $db;
  34. }
  35. protected function parseAllocationStats($str) {
  36. $stats = array();
  37. foreach (explode(',', $str) as $kv) {
  38. @list($size, $objects, $extra) = explode('=', $kv);
  39. // hack to prevent incorrect values when parsing the >=256 key
  40. if (isset($extra)) {
  41. $size = ">=$objects";
  42. $objects = $extra;
  43. }
  44. $stats[$size] = $objects;
  45. }
  46. return $stats;
  47. }
  48. }