diff --git a/lib/commands/admin-rpc.js b/lib/commands/admin-rpc.js index d7f22825d..826c73491 100644 --- a/lib/commands/admin-rpc.js +++ b/lib/commands/admin-rpc.js @@ -56,6 +56,11 @@ var getCacheStats = function (env, server, cb) { }); }; +// CryptPad_AsyncStore.rpc.send('ADMIN', ['GET_WORKER_PROFILES'], console.log) +var getWorkerProfiles = function (Env, Server, cb) { + cb(void 0, Env.commandTimers); +}; + var getActiveSessions = function (Env, Server, cb) { var stats = Server.getSessionStats(); cb(void 0, [ @@ -315,6 +320,7 @@ var commands = { INSTANCE_STATUS: instanceStatus, GET_LIMITS: getLimits, SET_LAST_EVICTION: setLastEviction, + GET_WORKER_PROFILES: getWorkerProfiles, }; Admin.command = function (Env, safeKey, data, _cb, Server) { diff --git a/lib/env.js b/lib/env.js index b1fc6680b..3a876f1f7 100644 --- a/lib/env.js +++ b/lib/env.js @@ -94,6 +94,7 @@ module.exports.create = function (config) { disableIntegratedEviction: config.disableIntegratedEviction || false, lastEviction: +new Date(), evictionReport: {}, + commandTimers: {}, }; (function () { diff --git a/lib/workers/index.js b/lib/workers/index.js index fe868e250..c422a9f54 100644 --- a/lib/workers/index.js +++ b/lib/workers/index.js @@ -14,6 +14,14 @@ const DEFAULT_QUERY_TIMEOUT = 60000 * 15; // increased from three to fifteen min Workers.initialize = function (Env, config, _cb) { var cb = Util.once(Util.mkAsync(_cb)); + var incrementTime = function (command, start) { + if (!command) { return; } + var end = +new Date(); + var T = Env.commandTimers; + var diff = (end - start); + T[command] = (T[command] || 0) + (diff / 1000); + }; + const workers = []; const response = Util.response(function (errLabel, info) { @@ -112,7 +120,9 @@ Workers.initialize = function (Env, config, _cb) { } const txid = guid(); + var start = +new Date(); var cb = Util.once(Util.mkAsync(Util.both(_cb, function (err /*, value */) { + incrementTime(msg && msg.command, start); if (err !== 'TIMEOUT') { return; } Log.debug("WORKER_TIMEOUT_CAUSE", msg); // in the event of a timeout the user will receive an error