xrpld
Loading...
Searching...
No Matches
PerfLog.h
1#pragma once
2
3#include <xrpl/basics/Log.h>
4#include <xrpl/basics/StringUtilities.h>
5#include <xrpl/core/Job.h>
6#include <xrpl/json/json_value.h>
7
8#include <chrono>
9#include <cstdint>
10#include <filesystem>
11#include <functional>
12#include <memory>
13#include <span>
14#include <string_view>
15
16namespace beast {
17class Journal;
18} // namespace beast
19
20namespace xrpl {
21class Application;
22class Section;
23namespace perf {
24
31
33{
34public:
42
46 struct Setup
47 {
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_view method, std::uint64_t requestId) = 0;
73
80 virtual void
82
89 virtual void
90 rpcError(std::string_view method, std::uint64_t requestId) = 0;
91
97 virtual void
98 jobQueue(JobType const type) = 0;
99
108 virtual void
109 jobStart(JobType const type, Microseconds dur, SteadyTimePoint startTime, int instance) = 0;
110
118 virtual void
119 jobFinish(JobType const type, Microseconds dur, int instance) = 0;
120
126 [[nodiscard]] virtual json::Value
127 countersJson() const = 0;
128
134 [[nodiscard]] virtual json::Value
135 currentJson() const = 0;
136
142 virtual void
143 resizeJobs(int const resize) = 0;
144
148 virtual void
149 rotate() = 0;
150};
151
153setupPerfLog(Section const& section, std::filesystem::path const& configDir);
154
166 PerfLog::Setup const& setup,
167 Application& app,
169 beast::Journal journal,
170 std::function<void()>&& signalStop);
171
172template <typename Func, class Rep, class Period>
173auto
175 Func&& func,
176 std::string_view actionDescription,
178 beast::Journal const& journal)
179{
181
182 auto result = func();
183
185 auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime);
186 if (duration > maxDelay)
187 {
188 JLOG(journal.warn()) << actionDescription << " took " << duration.count() << " ms";
189 }
190
191 return result;
192}
193
194} // namespace perf
195} // namespace xrpl
A generic endpoint for log messages.
Definition Journal.h:44
Stream warn() const
Definition Journal.h:356
Represents a JSON value.
Definition json_value.h:117
Holds a collection of configuration values.
Definition BasicConfig.h:28
Singleton class that maintains performance counters and optionally writes Json-formatted data to a di...
Definition PerfLog.h:33
virtual void start()
Definition PerfLog.h:56
virtual void jobFinish(JobType const type, Microseconds dur, int instance)=0
Log job finishing.
virtual ~PerfLog()=default
virtual void rpcError(std::string_view method, std::uint64_t requestId)=0
Log errored RPC call.
virtual void rpcFinish(std::string_view method, std::uint64_t requestId)=0
Log successful finish of RPC call.
virtual json::Value countersJson() const =0
Render performance counters in Json.
virtual json::Value currentJson() const =0
Render currently executing jobs and RPC calls and durations in Json.
std::chrono::time_point< SystemClock > SystemTimePoint
Definition PerfLog.h:38
std::chrono::seconds Seconds
Definition PerfLog.h:39
virtual void jobQueue(JobType const type)=0
Log queued job.
virtual void jobStart(JobType const type, Microseconds dur, SteadyTimePoint startTime, int instance)=0
Log job executing.
virtual void resizeJobs(int const resize)=0
Ensure enough room to store each currently executing job.
virtual void stop()
Definition PerfLog.h:61
std::chrono::milliseconds Milliseconds
Definition PerfLog.h:40
std::chrono::microseconds Microseconds
Definition PerfLog.h:41
std::chrono::steady_clock SteadyClock
Definition PerfLog.h:35
std::chrono::system_clock SystemClock
Definition PerfLog.h:36
std::chrono::time_point< SteadyClock > SteadyTimePoint
Definition PerfLog.h:37
virtual void rotate()=0
Rotate perf log file.
virtual void rpcStart(std::string_view method, std::uint64_t requestId)=0
Log start of RPC call.
T duration_cast(T... args)
Dummy class for unit tests.
Definition Workers.h:14
auto measureDurationAndLog(Func &&func, std::string_view actionDescription, std::chrono::duration< Rep, Period > maxDelay, beast::Journal const &journal)
Definition PerfLog.h:174
std::unique_ptr< PerfLog > makePerfLog(PerfLog::Setup const &setup, Application &app, std::span< NullTerminatedView const > methodNames, beast::Journal journal, std::function< void()> &&signalStop)
PerfLog::Setup setupPerfLog(Section const &section, std::filesystem::path const &configDir)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
JobType
Definition Job.h:21
Configuration from [perf] section of xrpld.cfg.
Definition PerfLog.h:47
std::filesystem::path perfLog
Definition PerfLog.h:48
Milliseconds logInterval
Definition PerfLog.h:50