rippled
Loading...
Searching...
No Matches
PerfLog.h
1#pragma once
2
3#include <xrpl/basics/BasicConfig.h>
4#include <xrpl/core/JobTypes.h>
5#include <xrpl/json/json_value.h>
6
7#include <boost/filesystem.hpp>
8
9#include <chrono>
10#include <cstdint>
11#include <functional>
12#include <memory>
13#include <string>
14
15namespace beast {
16class Journal;
17}
18
19namespace xrpl {
20class Application;
21namespace perf {
22
31{
32public:
40
44 struct Setup
45 {
46 boost::filesystem::path perfLog;
47 // log_interval is in milliseconds to support faster testing.
49 };
50
51 virtual ~PerfLog() = default;
52
53 virtual void
55 {
56 }
57
58 virtual void
60 {
61 }
62
69 virtual void
70 rpcStart(std::string const& method, std::uint64_t requestId) = 0;
71
78 virtual void
79 rpcFinish(std::string const& method, std::uint64_t requestId) = 0;
80
87 virtual void
88 rpcError(std::string const& method, std::uint64_t requestId) = 0;
89
95 virtual void
96 jobQueue(JobType const type) = 0;
97
106 virtual void
107 jobStart(JobType const type, microseconds dur, steady_time_point startTime, int instance) = 0;
108
116 virtual void
117 jobFinish(JobType const type, microseconds dur, int instance) = 0;
118
124 virtual Json::Value
125 countersJson() const = 0;
126
132 virtual Json::Value
133 currentJson() const = 0;
134
140 virtual void
141 resizeJobs(int const resize) = 0;
142
146 virtual void
147 rotate() = 0;
148};
149
151setup_PerfLog(Section const& section, boost::filesystem::path const& configDir);
152
154make_PerfLog(PerfLog::Setup const& setup, Application& app, beast::Journal journal, std::function<void()>&& signalStop);
155
156template <typename Func, class Rep, class Period>
157auto
159 Func&& func,
160 std::string const& actionDescription,
162 beast::Journal const& journal)
163{
164 auto start_time = std::chrono::high_resolution_clock::now();
165
166 auto result = func();
167
169 auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
170 if (duration > maxDelay)
171 {
172 JLOG(journal.warn()) << actionDescription << " took " << duration.count() << " ms";
173 }
174
175 return result;
176}
177
178} // namespace perf
179} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
A generic endpoint for log messages.
Definition Journal.h:40
Stream warn() const
Definition Journal.h:312
Holds a collection of configuration values.
Definition BasicConfig.h:24
Singleton class that maintains performance counters and optionally writes Json-formatted data to a di...
Definition PerfLog.h:31
virtual void start()
Definition PerfLog.h:54
virtual void jobFinish(JobType const type, microseconds dur, int instance)=0
Log job finishing.
virtual ~PerfLog()=default
std::chrono::seconds seconds
Definition PerfLog.h:37
virtual Json::Value currentJson() const =0
Render currently executing jobs and RPC calls and durations in Json.
virtual void rpcFinish(std::string const &method, std::uint64_t requestId)=0
Log successful finish 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 void stop()
Definition PerfLog.h:59
virtual void jobStart(JobType const type, microseconds dur, steady_time_point startTime, int instance)=0
Log job executing.
virtual void rpcStart(std::string const &method, std::uint64_t requestId)=0
Log start of RPC call.
virtual Json::Value countersJson() const =0
Render performance counters in Json.
virtual void rotate()=0
Rotate perf log file.
virtual void rpcError(std::string const &method, std::uint64_t requestId)=0
Log errored RPC call.
std::unique_ptr< PerfLog > make_PerfLog(PerfLog::Setup const &setup, Application &app, beast::Journal journal, std::function< void()> &&signalStop)
PerfLog::Setup setup_PerfLog(Section const &section, boost::filesystem::path const &configDir)
auto measureDurationAndLog(Func &&func, std::string const &actionDescription, std::chrono::duration< Rep, Period > maxDelay, beast::Journal const &journal)
Definition PerfLog.h:158
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
JobType
Definition Job.h:14
Configuration from [perf] section of xrpld.cfg.
Definition PerfLog.h:45
boost::filesystem::path perfLog
Definition PerfLog.h:46
milliseconds logInterval
Definition PerfLog.h:48