UNPKG

ah-dashboard-plugin

Version:

Plugin for an ActionHero Dashboard with many functionalities

117 lines (111 loc) 3.67 kB
var action = {}; ///////////////////////////////////////////////////////////////////// // metadata action.name = 'getAllRedisKeys'; action.description = 'I will return all redis keys'; action.inputs = { 'prefix' : { required: false } }; action.blockedConnectionTypes = []; action.outputExample = { }; ///////////////////////////////////////////////////////////////////// // functional action.run = function(api, data, next){ // Check authentication for current Request api.ahDashboard.session.checkAuth(data, function(session){ var separator = ':'; var query; var prefix = data.params.prefix; var async = require('async'); if(prefix){ query = prefix + separator + '*'; } else { query = '*'; } api.redis.clients.client.keys(query, function (err, keys) { if (err) { api.log('getKeys', 'error', err); } else { var lookup = {}; var reducedKeys = []; keys.forEach(function (key) { var fullKey = key; if (prefix) { key = key.substr((prefix + separator).length); } var parts = key.split(separator); var firstPrefix = parts[0]; if (lookup.hasOwnProperty(firstPrefix)) { lookup[firstPrefix].count++; } else { lookup[firstPrefix] = { attr: {}, key: firstPrefix, count: parts.length === 1 ? 0 : 1 }; lookup[firstPrefix].fullKey = fullKey; if (parts.length === 1) { lookup[firstPrefix].leaf = true; } reducedKeys.push(lookup[firstPrefix]); } }); reducedKeys.forEach(function (data) { if (data.count === 0) { data.title = data.key; } else { data.title = data.key + ":* (" + data.count + ")"; data.lazy = true; data.folder = true; } }); async.forEachLimit(reducedKeys, 10, function (keyData, callback) { if (keyData.leaf) { api.redis.clients.client.type(keyData.fullKey, function (err, type) { if (err) { return callback(err); } keyData.attr.rel = type; keyData.icon = type+".png"; var sizeCallback = function (err, count) { if (err) { return callback(err); } else { keyData.data += " (" + count + ")"; callback(); } }; if (type == 'list') { api.redis.clients.client.llen(keyData.fullKey, sizeCallback); } else if (type == 'set') { api.redis.clients.client.scard(keyData.fullKey, sizeCallback); } else if (type == 'zset') { api.redis.clients.client.zcard(keyData.fullKey, sizeCallback); } else { callback(); } }); } else { callback(); } }, function (err) { if (err) { api.log('getKeys', 'error', err); return next(err); } reducedKeys = reducedKeys.sort(function (a, b) { return a.data > b.data ? 1 : -1; }); data.response.redisKeys = reducedKeys; next(); }); } }); }, next); }; ///////////////////////////////////////////////////////////////////// // exports exports.action = action;