ServerInfo.php 1.6 KB

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