rippled
PerfLog.h
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2018 Ripple Labs Inc.
5 
6  Permission to use, copy, modify, and/or distribute this software for any
7  purpose with or without fee is hereby granted, provided that the above
8  copyright notice and this permission notice appear in all copies.
9 
10  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 //==============================================================================
19 
20 #ifndef RIPPLE_BASICS_PERFLOG_H
21 #define RIPPLE_BASICS_PERFLOG_H
22 
23 #include <ripple/core/Config.h>
24 #include <ripple/core/JobTypes.h>
25 #include <ripple/json/json_value.h>
26 #include <boost/filesystem.hpp>
27 #include <chrono>
28 #include <cstdint>
29 #include <functional>
30 #include <memory>
31 #include <string>
32 
33 namespace beast {
34 class Journal;
35 }
36 
37 namespace ripple {
38 class Application;
39 namespace perf {
40 
48 class PerfLog
49 {
50 public:
58 
62  struct Setup
63  {
64  boost::filesystem::path perfLog;
65  // log_interval is in milliseconds to support faster testing.
67  };
68 
69  virtual ~PerfLog() = default;
70 
71  virtual void
73  {
74  }
75 
76  virtual void
77  stop()
78  {
79  }
80 
87  virtual void
88  rpcStart(std::string const& method, std::uint64_t requestId) = 0;
89 
96  virtual void
97  rpcFinish(std::string const& method, std::uint64_t requestId) = 0;
98 
105  virtual void
106  rpcError(std::string const& method, std::uint64_t requestId) = 0;
107 
113  virtual void
114  jobQueue(JobType const type) = 0;
115 
124  virtual void
125  jobStart(
126  JobType const type,
127  microseconds dur,
128  steady_time_point startTime,
129  int instance) = 0;
130 
138  virtual void
139  jobFinish(JobType const type, microseconds dur, int instance) = 0;
140 
146  virtual Json::Value
147  countersJson() const = 0;
148 
154  virtual Json::Value
155  currentJson() const = 0;
156 
162  virtual void
163  resizeJobs(int const resize) = 0;
164 
168  virtual void
169  rotate() = 0;
170 };
171 
172 PerfLog::Setup
173 setup_PerfLog(Section const& section, boost::filesystem::path const& configDir);
174 
177  PerfLog::Setup const& setup,
178  Application& app,
179  beast::Journal journal,
180  std::function<void()>&& signalStop);
181 
182 } // namespace perf
183 } // namespace ripple
184 
185 #endif // RIPPLE_BASICS_PERFLOG_H
ripple::perf::PerfLog::microseconds
std::chrono::microseconds microseconds
Definition: PerfLog.h:57
std::chrono::system_clock
ripple::Section
Holds a collection of configuration values.
Definition: BasicConfig.h:42
ripple::Application
Definition: Application.h:115
std::chrono::steady_clock
ripple::perf::PerfLog::rpcError
virtual void rpcError(std::string const &method, std::uint64_t requestId)=0
Log errored RPC call.
std::string
STL class.
ripple::perf::PerfLog::Setup::perfLog
boost::filesystem::path perfLog
Definition: PerfLog.h:64
functional
std::chrono::seconds
ripple::perf::make_PerfLog
std::unique_ptr< PerfLog > make_PerfLog(PerfLog::Setup const &setup, Application &app, beast::Journal journal, std::function< void()> &&signalStop)
Definition: PerfLogImp.cpp:501
ripple::perf::PerfLog
Singleton class that maintains performance counters and optionally writes Json-formatted data to a di...
Definition: PerfLog.h:48
std::function
ripple::perf::PerfLog::Setup
Configuration from [perf] section of rippled.cfg.
Definition: PerfLog.h:62
ripple::perf::PerfLog::stop
virtual void stop()
Definition: PerfLog.h:77
chrono
ripple::perf::PerfLog::resizeJobs
virtual void resizeJobs(int const resize)=0
Ensure enough room to store each currently executing job.
std::chrono::time_point
cstdint
beast::Journal
A generic endpoint for log messages.
Definition: Journal.h:58
std::uint64_t
ripple::perf::PerfLog::jobQueue
virtual void jobQueue(JobType const type)=0
Log queued job.
ripple::perf::PerfLog::jobStart
virtual void jobStart(JobType const type, microseconds dur, steady_time_point startTime, int instance)=0
Log job executing.
ripple::perf::PerfLog::start
virtual void start()
Definition: PerfLog.h:72
memory
ripple::perf::PerfLog::rpcStart
virtual void rpcStart(std::string const &method, std::uint64_t requestId)=0
Log start of RPC call.
ripple::perf::PerfLog::~PerfLog
virtual ~PerfLog()=default
ripple::perf::setup_PerfLog
PerfLog::Setup setup_PerfLog(Section const &section, boost::filesystem::path const &configDir)
Definition: PerfLogImp.cpp:479
ripple::perf::PerfLog::countersJson
virtual Json::Value countersJson() const =0
Render performance counters in Json.
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::perf::PerfLog::steady_time_point
std::chrono::time_point< steady_clock > steady_time_point
Definition: PerfLog.h:53
ripple::perf::PerfLog::rotate
virtual void rotate()=0
Rotate perf log file.
ripple::JobType
JobType
Definition: Job.h:35
ripple::perf::PerfLog::currentJson
virtual Json::Value currentJson() const =0
Render currently executing jobs and RPC calls and durations in Json.
ripple::perf::PerfLog::seconds
std::chrono::seconds seconds
Definition: PerfLog.h:55
std::unique_ptr
STL class.
ripple::perf::PerfLog::Setup::logInterval
milliseconds logInterval
Definition: PerfLog.h:66
ripple::perf::PerfLog::rpcFinish
virtual void rpcFinish(std::string const &method, std::uint64_t requestId)=0
Log successful finish of RPC call.
ripple::perf::PerfLog::jobFinish
virtual void jobFinish(JobType const type, microseconds dur, int instance)=0
Log job finishing.
Json::Value
Represents a JSON value.
Definition: json_value.h:145
beast
Definition: base_uint.h:641
string