zbx_redis_stats.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #!/usr/bin/env node
  2. // This software is licensed GNU GPL v2
  3. // Author: Alexey Dubkov <alexey.dubkov@gmail.com>
  4. var host = process.argv[2] || 'localhost',
  5. port = 6379,
  6. metric = process.argv[3],
  7. db = process.argv[4] || 'none';
  8. var client = require('redis').createClient(port, host);
  9. var llenall = i = rlen = 0;
  10. client.on('llenall', function(v) {
  11. llenall += v;
  12. if (i == rlen) {
  13. console.log(llenall);
  14. client.emit('quit');
  15. }
  16. });
  17. client.on('ready', function(err) {
  18. if (metric) {
  19. if (db && client.server_info.hasOwnProperty(db)) {
  20. var t = client.server_info[db]
  21. .match('keys=(\\d+),expires=(\\d+),avg_ttl=(\\d+)');
  22. client.server_info.key_space_db_keys = t[1];
  23. client.server_info.key_space_db_expires = t[2];
  24. client.server_info.key_space_db_avg_ttl = t[3];
  25. }
  26. switch (metric) {
  27. case 'llen':
  28. client.llen(db, function(err, res) {
  29. console.log(res);
  30. client.emit('quit');
  31. });
  32. break;
  33. case 'llenall':
  34. client.keys('*', function(err, res) {
  35. rlen = res.length;
  36. res.map(function(v) {
  37. client.llen(v, function(err, res) {
  38. i++;
  39. client.emit('llenall', res);
  40. });
  41. });
  42. });
  43. break;
  44. case 'list_key_space_db':
  45. if (client.server_info.db0) {
  46. console.log('db0');
  47. } else
  48. console.log('database_detect');
  49. client.emit('quit');
  50. break;
  51. case 'dbsize':
  52. if (client.server_info.db0) {
  53. var res = {};
  54. client.server_info.db0.split(',').map(function(el){
  55. var _el = el.split('=');
  56. res[_el[0]] = _el[1];
  57. });
  58. console.log(res.keys);
  59. } else
  60. console.log('database_detect');
  61. client.emit('quit');
  62. break;
  63. default:
  64. if (client.server_info.hasOwnProperty(metric))
  65. console.log(client.server_info[metric]);
  66. client.emit('quit');
  67. break;
  68. }
  69. } else {
  70. console.log('Not selected metric');
  71. client.emit('quit');
  72. }
  73. });
  74. client.on('error', function(err) {
  75. console.log('Error: ' + err);
  76. });
  77. client.on('quit', function() {
  78. client.quit();
  79. });