Skip to content

Commit

Permalink
rpc: Track active commands
Browse files Browse the repository at this point in the history
  • Loading branch information
promag committed Jan 2, 2019
1 parent bf43832 commit 068a8fc
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/rpc/server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,35 @@ static RPCTimerInterface* timerInterface = nullptr;
/* Map of name to timer. */
static std::map<std::string, std::unique_ptr<RPCTimerBase> > deadlineTimers;

struct RPCCommandExecutionInfo
{
std::string method;
int64_t start;
};

struct RPCServerInfo
{
Mutex mutex;
std::list<RPCCommandExecutionInfo> active_commands GUARDED_BY(mutex);
};

static RPCServerInfo g_rpc_server_info;

struct RPCCommandExecution
{
std::list<RPCCommandExecutionInfo>::iterator it;
explicit RPCCommandExecution(const std::string& method)
{
LOCK(g_rpc_server_info.mutex);
it = g_rpc_server_info.active_commands.insert(g_rpc_server_info.active_commands.cend(), {method, GetTimeMicros()});
}
~RPCCommandExecution()
{
LOCK(g_rpc_server_info.mutex);
g_rpc_server_info.active_commands.erase(it);
}
};

static struct CRPCSignals
{
boost::signals2::signal<void ()> Started;
Expand Down Expand Up @@ -485,6 +514,7 @@ UniValue CRPCTable::execute(const JSONRPCRequest &request) const

try
{
RPCCommandExecution execution(request.strMethod);
// Execute, convert arguments to array if necessary
if (request.params.isObject()) {
return pcmd->actor(transformNamedArguments(request, pcmd->argNames));
Expand Down

0 comments on commit 068a8fc

Please sign in to comment.