rippled
Loading...
Searching...
No Matches
PerfLog.h
1#ifndef XRPL_BASICS_PERFLOG_H
2#define XRPL_BASICS_PERFLOG_H
3
4#include <xrpld/core/Config.h>
5#include <xrpld/core/JobTypes.h>
6
7#include <xrpl/json/json_value.h>
8
9#include <boost/filesystem.hpp>
10
11#include <chrono>
12#include <cstdint>
13#include <functional>
14#include <memory>
15#include <string>
16
17namespace beast {
18class Journal;
19}
20
21namespace ripple {
22class Application;
23namespace perf {
24
33{
34public:
42
46 struct Setup
47 {
48 boost::filesystem::path perfLog;
49 // log_interval is in milliseconds to support faster testing.
51 };
52
53 virtual ~PerfLog() = default;
54
55 virtual void
57 {
58 }
59
60 virtual void
62 {
63 }
64
71 virtual void
72 rpcStart(std::string const& method, std::uint64_t requestId) = 0;
73
80 virtual void
81 rpcFinish(std::string const& method, std::uint64_t requestId) = 0;
82
89 virtual void
90 rpcError(std::string const& method, std::uint64_t requestId) = 0;
91
97 virtual void
98 jobQueue(JobType const type) = 0;
99
108 virtual void
110 JobType const type,
111 microseconds dur,
112 steady_time_point startTime,
113 int instance) = 0;
114
122 virtual void
123 jobFinish(JobType const type, microseconds dur, int instance) = 0;
124
130 virtual Json::Value
131 countersJson() const = 0;
132
138 virtual Json::Value
139 currentJson() const = 0;
140
146 virtual void
147 resizeJobs(int const resize) = 0;
148
152 virtual void
153 rotate() = 0;
154};
155
157setup_PerfLog(Section const& section, boost::filesystem::path const& configDir);
158
161 PerfLog::Setup const& setup,
162 Application& app,
163 beast::Journal journal,
164 std::function<void()>&& signalStop);
165
166template <typename Func, class Rep, class Period>
167auto
169 Func&& func,
170 std::string const& actionDescription,
172 beast::Journal const& journal)
173{
174 auto start_time = std::chrono::high_resolution_clock::now();
175
176 auto result = func();
177
179 auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(
180 end_time - start_time);
181 if (duration > maxDelay)
182 {
183 JLOG(journal.warn())
184 << actionDescription << " took " << duration.count() << " ms";
185 }
186
187 return result;
188}
189
190} // namespace perf
191} // namespace ripple
192
193#endif // XRPL_BASICS_PERFLOG_H
Represents a JSON value.
Definition json_value.h:130
A generic endpoint for log messages.
Definition Journal.h:41
Stream warn() const
Definition Journal.h:321
Holds a collection of configuration values.
Definition BasicConfig.h:26
Singleton class that maintains performance counters and optionally writes Json-formatted data to a di...
Definition PerfLog.h:33
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 stop()
Definition PerfLog.h:61
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 start()
Definition PerfLog.h:56
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
Definition PerfLog.h:39
virtual ~PerfLog()=default
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:168
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.
Definition algorithm.h:6
JobType
Definition Job.h:16
Configuration from [perf] section of rippled.cfg.
Definition PerfLog.h:47
boost::filesystem::path perfLog
Definition PerfLog.h:48