1#ifndef XRPL_BASICS_PERFLOG_H
2#define XRPL_BASICS_PERFLOG_H
4#include <xrpld/core/Config.h>
5#include <xrpld/core/JobTypes.h>
7#include <xrpl/json/json_value.h>
9#include <boost/filesystem.hpp>
166template <
typename Func,
class Rep,
class Period>
176 auto result = func();
179 auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(
180 end_time - start_time);
181 if (duration > maxDelay)
184 << actionDescription <<
" took " << duration.count() <<
" ms";
A generic endpoint for log messages.
Holds a collection of configuration values.
Singleton class that maintains performance counters and optionally writes Json-formatted data to a di...
virtual void jobFinish(JobType const type, microseconds dur, int instance)=0
Log job finishing.
virtual void jobStart(JobType const type, microseconds dur, steady_time_point startTime, int instance)=0
Log job executing.
virtual void rpcFinish(std::string const &method, std::uint64_t requestId)=0
Log successful finish of RPC call.
virtual void rpcStart(std::string const &method, std::uint64_t requestId)=0
Log start of RPC call.
virtual void jobQueue(JobType const type)=0
Log queued job.
virtual void resizeJobs(int const resize)=0
Ensure enough room to store each currently executing job.
virtual Json::Value currentJson() const =0
Render currently executing jobs and RPC calls and durations in Json.
virtual void rotate()=0
Rotate perf log file.
virtual Json::Value countersJson() const =0
Render performance counters in Json.
virtual void rpcError(std::string const &method, std::uint64_t requestId)=0
Log errored RPC call.
std::chrono::seconds seconds
virtual ~PerfLog()=default
PerfLog::Setup setup_PerfLog(Section const §ion, boost::filesystem::path const &configDir)
auto measureDurationAndLog(Func &&func, std::string const &actionDescription, std::chrono::duration< Rep, Period > maxDelay, beast::Journal const &journal)
std::unique_ptr< PerfLog > make_PerfLog(PerfLog::Setup const &setup, Application &app, beast::Journal journal, std::function< void()> &&signalStop)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Configuration from [perf] section of rippled.cfg.
boost::filesystem::path perfLog