cloudcms-cli
Version:
Cloud CMS Command-Line client
96 lines (84 loc) • 3.31 kB
JavaScript
var helper = require("../../../helper");
var AbstractCommand = require("../../abstract");
class GetClusterThreadDumpCommand extends AbstractCommand
{
constructor()
{
super({
"group": "admin",
"name": "get-cluster-threaddump",
"description": "Retrieves thread dump information for members of a cluster",
"schema": {
"properties": [{
"name": "http",
"type": "boolean",
"description": "Filter to include active http handler threads",
"required": false,
"default": false,
"args": ["http"]
}, {
"name": "worker",
"type": "boolean",
"description": "Filter to include job processing worker threads",
"required": false,
"default": false,
"args": ["worker"]
}, {
"name": "username",
"type": "string",
"description": "Admin username",
"required": true,
"args": ["username", "u"]
}, {
"name": "password",
"type": "string",
"description": "Admin password",
"required": true,
"hidden": true,
"args": ["password", "p"]
}]
}
});
}
handle(options, callback)
{
helper._handleAdminGitanaGet("/cluster/diag/threaddump", {}, options.username, options.password, function(err, jsonResponse) {
if (options.http || options.worker)
{
var servers = jsonResponse.servers;
for (var serverKey in servers)
{
var server = servers[serverKey];
var threadNamesToRemove = [];
for (var threadName in server)
{
var thread = server[threadName];
var keep = false;
if (options.http && threadName.startsWith("http-nio-"))
{
var stackTraceText = thread.stacktrace.join("\n");
if (stackTraceText.indexOf("org.gitana.platform.servlet.APIDispatcherServlet") > -1)
{
keep = true;
}
}
if (options.worker && threadName.startsWith("job-thread-"))
{
keep = true;
}
if (!keep)
{
threadNamesToRemove.push(threadName);
}
}
for (var i = 0; i < threadNamesToRemove.length; i++)
{
delete server[threadNamesToRemove[i]];
}
}
}
helper._handleJsonResponse(err, jsonResponse, callback);
});
}
}
module.exports = GetClusterThreadDumpCommand;