From fbdbffed67e2f30aadd0550d6dfc737da694c6e0 Mon Sep 17 00:00:00 2001 From: Mark Travis Date: Wed, 14 Nov 2018 22:14:53 -0800 Subject: [PATCH] Report duration in current state. --- src/ripple/app/misc/NetworkOPs.cpp | 23 ++++++++++++++++++----- src/ripple/protocol/JsonFields.h | 1 + 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/ripple/app/misc/NetworkOPs.cpp b/src/ripple/app/misc/NetworkOPs.cpp index 2fb3cfe2f9..d31a70aa06 100644 --- a/src/ripple/app/misc/NetworkOPs.cpp +++ b/src/ripple/app/misc/NetworkOPs.cpp @@ -58,6 +58,9 @@ #include #include #include +#include +#include +#include namespace ripple { @@ -149,12 +152,19 @@ class NetworkOPsImp final */ void mode (OperatingMode om); + /** + * Json-formatted state accounting data. + * 1st member: state accounting object. + * 2nd member: duration in current state. + */ + using StateCountersJson = std::pair ; + /** * Output state counters in JSON format. * * @return JSON object. */ - Json::Value json() const; + StateCountersJson json() const; }; //! Server fees published on `server` subscription @@ -2353,7 +2363,8 @@ Json::Value NetworkOPsImp::getServerInfo (bool human, bool admin, bool counters) info[jss::published_ledger] = lpPublished->info().seq; } - info[jss::state_accounting] = accounting_.json(); + std::tie(info[jss::state_accounting], + info[jss::server_state_duration_us]) = accounting_.json(); info[jss::uptime] = UptimeClock::now().time_since_epoch().count(); info[jss::jq_trans_overflow] = std::to_string( app_.overlay().getJqTransOverflow()); @@ -3338,7 +3349,8 @@ void NetworkOPsImp::StateAccounting::mode (OperatingMode om) start_ = now; } -Json::Value NetworkOPsImp::StateAccounting::json() const +NetworkOPsImp::StateAccounting::StateCountersJson +NetworkOPsImp::StateAccounting::json() const { std::unique_lock lock (mutex_); @@ -3348,8 +3360,9 @@ Json::Value NetworkOPsImp::StateAccounting::json() const lock.unlock(); - counters[mode].dur += std::chrono::duration_cast< + auto const current = std::chrono::duration_cast< std::chrono::microseconds>(std::chrono::system_clock::now() - start); + counters[mode].dur += current; Json::Value ret = Json::objectValue; @@ -3362,7 +3375,7 @@ Json::Value NetworkOPsImp::StateAccounting::json() const state[jss::duration_us] = std::to_string(counters[i].dur.count()); } - return ret; + return {ret, std::to_string(current.count())}; } //------------------------------------------------------------------------------ diff --git a/src/ripple/protocol/JsonFields.h b/src/ripple/protocol/JsonFields.h index 69acbb1081..1d73194ba4 100644 --- a/src/ripple/protocol/JsonFields.h +++ b/src/ripple/protocol/JsonFields.h @@ -400,6 +400,7 @@ JSS ( seq ); // in: LedgerEntry; // ValidatorList JSS ( seqNum ); // out: LedgerToJson JSS ( server_state ); // out: NetworkOPs +JSS ( server_state_duration_us ); // out: NetworkOPs JSS ( server_status ); // out: NetworkOPs JSS ( settle_delay ); // out: AccountChannels JSS ( severity ); // in: LogLevel