SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Statistics.h
Go to the documentation of this file.
1 /*
2  * SWC-DB© Copyright since 2019 Alex Kashirin <kashirin.alex@gmail.com>
3  * License details at <https://github.com/kashirin-alex/swc-db/#license>
4  */
5 
6 #ifndef swcdb_fs_Statistics_h
7 #define swcdb_fs_Statistics_h
8 
9 
10 #include "swcdb/core/Compat.h"
11 #include "swcdb/core/Time.h"
12 #include "swcdb/core/MutexAtomic.h"
13 
14 
15 namespace SWC { namespace FS {
16 
17 
18 struct Statistics {
19 
20 
21  enum Command : uint8_t {
60 
61  MAX
62  };
63 
64  static const char* SWC_CONST_FUNC to_string(Command cmd) noexcept;
65 
66 
68 
70  constexpr SWC_CAN_INLINE
71  Tracker() noexcept
72  : Time::Measure_ns(Time::Measure_ns::duration::zero()),
73  m(nullptr) {
74  }
76  Tracker(Metric* a_m) noexcept : m(a_m) { }
77  void stop(bool err) noexcept {
78  if(m) m->add(err, elapsed());
79  }
81  };
82 
83  constexpr
84  Metric() noexcept
85  : m_error(0), m_count(0),
86  m_min(0), m_max(0), m_total(0) {
87  }
88  Metric(const Metric&) = delete;
89  Metric(Metric&&) = delete;
90  Metric& operator=(const Metric&) = delete;
91  Metric& operator=(Metric&&) = delete;
92 
94  Tracker tracker() noexcept {
95  return Tracker(this);
96  }
97 
98  void add(bool err, uint64_t ns) noexcept;
99 
100  void gather(Metric& m) noexcept;
101 
102  void reset() noexcept;
103 
105  uint32_t m_count;
106  uint64_t m_min;
107  uint64_t m_max;
108  uint64_t m_total;
109  };
110 
111  constexpr
112  Statistics(bool a_enabled) noexcept : enabled(a_enabled), fds_count(0) { }
113  Statistics(const Statistics&) = delete;
114  Statistics(Statistics&&) = delete;
115  Statistics& operator=(const Statistics&) = delete;
117 
120  return enabled ? metrics[cmd].tracker() : Metric::Tracker();
121  }
122 
123  void gather(Statistics& stats) noexcept;
124 
125  void reset() noexcept;
126 
127  const bool enabled;
129  Core::Atomic<uint64_t> fds_count;
130 
131 };
132 
133 
134 }}
135 
136 
137 #ifdef SWC_IMPL_SOURCE
138 #include "swcdb/fs/Statistics.cc"
139 #endif
140 
141 
142 #endif // swcdb_fs_Statistics_h
SWC::FS::Statistics::FLUSH_SYNC
@ FLUSH_SYNC
Definition: Statistics.h:42
SWC::FS::Statistics::Metric::add
void add(bool err, uint64_t ns) noexcept
Definition: Statistics.cc:13
SWC::FS::Statistics::REMOVE_SYNC
@ REMOVE_SYNC
Definition: Statistics.h:34
SWC::FS::Statistics::CREATE_ASYNC
@ CREATE_ASYNC
Definition: Statistics.h:25
SWC::FS::Statistics::READDIR_SYNC
@ READDIR_SYNC
Definition: Statistics.h:46
SWC::FS::Statistics::operator=
Statistics & operator=(Statistics &&)=delete
SWC::FS::Statistics::FLUSH_ASYNC
@ FLUSH_ASYNC
Definition: Statistics.h:43
SWC::FS::Statistics::COMBI_PREAD_SYNC
@ COMBI_PREAD_SYNC
Definition: Statistics.h:58
SWC::FS::Statistics::fds_count
Core::Atomic< uint64_t > fds_count
Definition: Statistics.h:129
SWC::FS::Statistics::CLOSE_SYNC
@ CLOSE_SYNC
Definition: Statistics.h:26
SWC::FS::Statistics::operator=
Statistics & operator=(const Statistics &)=delete
SWC::FS::Statistics::Metric::Metric
Metric(Metric &&)=delete
SWC::FS::Statistics::RENAME_SYNC
@ RENAME_SYNC
Definition: Statistics.h:50
SWC::FS::Statistics::RMDIR_SYNC
@ RMDIR_SYNC
Definition: Statistics.h:44
SWC::FS::Statistics::Metric::Metric
constexpr Metric() noexcept
Definition: Statistics.h:84
SWC::FS::Statistics::Metric::m_total
uint64_t m_total
Definition: Statistics.h:108
SWC::FS::Statistics::to_string
static const char *SWC_CONST_FUNC to_string(Command cmd) noexcept
Definition: Statistics.cc:64
SWC::FS::Statistics::Statistics
Statistics(const Statistics &)=delete
SWC::FS::Statistics::WRITE_SYNC
@ WRITE_SYNC
Definition: Statistics.h:54
SWC::FS::Statistics::tracker
SWC_CAN_INLINE Metric::Tracker tracker(Command cmd) noexcept
Definition: Statistics.h:119
SWC::FS::Statistics::SYNC_SYNC
@ SYNC_SYNC
Definition: Statistics.h:52
SWC::FS::Statistics::Metric::m_error
uint24_t m_error
Definition: Statistics.h:104
SWC::FS::Statistics::WRITE_ASYNC
@ WRITE_ASYNC
Definition: Statistics.h:55
SWC::FS::Statistics::Metric::operator=
Metric & operator=(const Metric &)=delete
SWC::FS::Statistics::SEEK_SYNC
@ SEEK_SYNC
Definition: Statistics.h:32
SWC::FS::Statistics::OPEN_ASYNC
@ OPEN_ASYNC
Definition: Statistics.h:23
SWC::FS::Statistics::Metric::Tracker::stop
void stop(bool err) noexcept
Definition: Statistics.h:77
SWC::FS::Statistics::CREATE_SYNC
@ CREATE_SYNC
Definition: Statistics.h:24
SWC::FS::Statistics::SEEK_ASYNC
@ SEEK_ASYNC
Definition: Statistics.h:33
SWC::FS::Statistics::Metric::m_max
uint64_t m_max
Definition: Statistics.h:107
SWC::FS::Statistics::MKDIRS_SYNC
@ MKDIRS_SYNC
Definition: Statistics.h:40
SWC::Time::Measure::elapsed
SWC_CAN_INLINE uint64_t elapsed() const noexcept
Definition: Time.h:74
SWC::FS::Statistics::EXISTS_SYNC
@ EXISTS_SYNC
Definition: Statistics.h:48
SWC::FS::Statistics::READDIR_ASYNC
@ READDIR_ASYNC
Definition: Statistics.h:47
SWC::FS::Statistics::Metric::Metric
Metric(const Metric &)=delete
SWC::FS::Statistics::Metric::gather
void gather(Metric &m) noexcept
Definition: Statistics.cc:28
SWC_CONST_FUNC
#define SWC_CONST_FUNC
Definition: Compat.h:107
SWC::FS::Statistics::Command
Command
Definition: Statistics.h:21
SWC::FS::Statistics::READ_SYNC
@ READ_SYNC
Definition: Statistics.h:28
SWC::FS::Statistics::MAX
@ MAX
Definition: Statistics.h:61
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::FS::Statistics::COMBI_PREAD_ASYNC
@ COMBI_PREAD_ASYNC
Definition: Statistics.h:59
SWC::FS::Statistics::metrics
Metric metrics[Command::MAX]
Definition: Statistics.h:128
SWC::FS::Statistics::READ_ASYNC
@ READ_ASYNC
Definition: Statistics.h:29
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Core::MutexAtomic
Definition: MutexAtomic.h:17
SWC::FS::Statistics::LENGTH_SYNC
@ LENGTH_SYNC
Definition: Statistics.h:36
SWC::Time::Measure
Definition: Time.h:55
SWC::FS::Statistics::Metric::tracker
SWC_CAN_INLINE Tracker tracker() noexcept
Definition: Statistics.h:94
SWC::FS::Statistics::APPEND_ASYNC
@ APPEND_ASYNC
Definition: Statistics.h:31
Compat.h
SWC::FS::Statistics::EXISTS_ASYNC
@ EXISTS_ASYNC
Definition: Statistics.h:49
SWC::FS::Statistics::Metric::reset
void reset() noexcept
Definition: Statistics.cc:41
SWC::FS::Statistics::Metric::Tracker::Tracker
SWC_CAN_INLINE Tracker(Metric *a_m) noexcept
Definition: Statistics.h:76
SWC::FS::Statistics::APPEND_SYNC
@ APPEND_SYNC
Definition: Statistics.h:30
SWC::FS::Statistics::OPEN_SYNC
@ OPEN_SYNC
Definition: Statistics.h:22
Time.h
MutexAtomic.h
SWC::FS::Statistics::LENGTH_ASYNC
@ LENGTH_ASYNC
Definition: Statistics.h:37
Statistics.cc
SWC::FS::Statistics::Metric::Tracker::Tracker
constexpr SWC_CAN_INLINE Tracker() noexcept
Definition: Statistics.h:71
SWC::FS::Statistics::enabled
const bool enabled
Definition: Statistics.h:127
SWC::FS::Statistics::PREAD_ASYNC
@ PREAD_ASYNC
Definition: Statistics.h:39
SWC::FS::Statistics::Metric::Tracker::m
Metric * m
Definition: Statistics.h:80
SWC::Time::Measure_ns
Measure< std::chrono::steady_clock, std::chrono::nanoseconds > Measure_ns
Definition: Time.h:81
SWC::FS::Statistics::PREAD_SYNC
@ PREAD_SYNC
Definition: Statistics.h:38
SWC::FS::Statistics::READ_ALL_SYNC
@ READ_ALL_SYNC
Definition: Statistics.h:56
SWC::FS::Statistics::Metric::operator=
Metric & operator=(Metric &&)=delete
SWC::uint24_t
Core::uint24_t uint24_t
Definition: BitFieldInt.h:401
SWC::FS::Statistics::SYNC_ASYNC
@ SYNC_ASYNC
Definition: Statistics.h:53
SWC::FS::Statistics::CLOSE_ASYNC
@ CLOSE_ASYNC
Definition: Statistics.h:27
SWC::FS::Statistics::RMDIR_ASYNC
@ RMDIR_ASYNC
Definition: Statistics.h:45
SWC::FS::Statistics::Metric::Tracker
Definition: Statistics.h:69
SWC::FS::Statistics
Definition: Statistics.h:18
SWC::FS::Statistics::Metric::m_min
uint64_t m_min
Definition: Statistics.h:106
SWC::FS::Statistics::Metric
Definition: Statistics.h:67
SWC::FS::Statistics::Statistics
Statistics(Statistics &&)=delete
SWC::FS::Statistics::MKDIRS_ASYNC
@ MKDIRS_ASYNC
Definition: Statistics.h:41
SWC::FS::Statistics::Metric::m_count
uint32_t m_count
Definition: Statistics.h:105
SWC::FS::Statistics::READ_ALL_ASYNC
@ READ_ALL_ASYNC
Definition: Statistics.h:57
SWC::FS::Statistics::RENAME_ASYNC
@ RENAME_ASYNC
Definition: Statistics.h:51
SWC::FS::Statistics::REMOVE_ASYNC
@ REMOVE_ASYNC
Definition: Statistics.h:35