SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Metrics.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 
7 #ifndef swcdb_db_client_Query_Update_Handlers_Metrics_h
8 #define swcdb_db_client_Query_Update_Handlers_Metrics_h
9 
10 
11 #include "swcdb/core/Compat.h"
15 
16 
17 namespace SWC { namespace client { namespace Query { namespace Update {
18 
19 namespace Handlers {
20 
21 
23 namespace Metric {
24 
25 
26 enum Aggregation : uint8_t {
27  SUM = 0x00,
28  MIN = 0x01,
29  MAX = 0x02,
30  AVG = 0x03,
31  AVG_PROP = 0x04,
32 };
33 const char* SWC_CONST_FUNC aggregation_to_string(uint8_t agg) noexcept;
34 
35 
36 static const uint24_t FIELD_ID_MIN = uint24_t(0);
37 static const uint24_t FIELD_ID_MAX = uint24_t(1);
38 static const uint24_t FIELD_ID_COUNT = uint24_t(2);
39 static const uint24_t FIELD_ID_AVG = uint24_t(3);
40 static const uint24_t FIELD_ID_VOLUME = uint24_t(4);
41 
42 
43 
44 class Level;
45 
46 struct Base {
47  typedef std::unique_ptr<Base> Ptr;
48 
49  virtual ~Base() noexcept { }
50 
51  /* For using with 'bin/swcdb --statistics'
52  serialization of definitions: index based cross map
53  field-id:0 type:LIST-INT64 values: [FIELD-ID]
54  field-id:1 type LIST-BYTES values: [FIELD-NAME], Opt defaults-ID
55  field-id:2 type:LIST-BYTES values: [FIELD-LABEL], Opt defaults-NAME
56  field-id:3 type:LIST-INT64 values: [AGG-TYPE], Opt defaults-SUM
57  field-id:4 type:LIST-INT64 values: [relation], Opt defaults-No(0)
58  */
59  virtual void definitions(Handlers::Base::Column* colp,
60  const DB::Cell::KeyVec& parent_key) = 0;
61 
62  /* For using with 'bin/swcdb --statistics'
63  serialization of metrics:
64  [field-id:# type:INT64 value: INT64]
65  * Propotional Average require order [SUM, AVG_PROP]
66  */
67  virtual void report(uint64_t for_ns, Handlers::Base::Column* colp,
68  const DB::Cell::KeyVec& parent_key) = 0;
69 
70  virtual void reset() = 0;
71 
72  virtual Level* get_level(const char*, bool) {
73  return nullptr;
74  }
75 
76 };
77 
78 
79 
80 class Level : public Base {
81  public:
82  typedef std::unique_ptr<Level> Ptr;
83 
84  const std::string name;
86 
87  Level(const char* a_name) : name(a_name), metrics() { }
88 
89  virtual ~Level() noexcept { }
90 
91  virtual void definitions(Handlers::Base::Column* colp,
92  const DB::Cell::KeyVec& parent_key) override;
93 
94  virtual void report(uint64_t for_ns, Handlers::Base::Column* colp,
95  const DB::Cell::KeyVec& parent_key) override;
96 
97  virtual void reset() override;
98 
99  Level* get_level(const char* _name, bool inner=true) override;
100 
101 };
102 
103 
104 
107  public Base {
108  public:
109  typedef std::unique_ptr<Item_MinMaxAvgCount> Ptr;
110 
112 
113  const std::string name;
114 
115  Item_MinMaxAvgCount(const char* a_name) : name(a_name) { }
116 
117  virtual ~Item_MinMaxAvgCount() noexcept { }
118 
119  virtual void report(uint64_t for_ns, Handlers::Base::Column* colp,
120  const DB::Cell::KeyVec& parent_key) override;
121 
122  virtual void reset() override {
124  }
125 
126 };
127 
128 
129 
130 class Item_Count : public Base {
131  public:
132  typedef std::unique_ptr<Item_Count> Ptr;
133 
134  const std::string name;
135 
136  Item_Count(const char* a_name) : name(a_name), m_count(0) { }
137 
138  virtual ~Item_Count() noexcept { }
139 
141  void increment() noexcept {
142  m_count.fetch_add(1);
143  }
144 
145  virtual void report(uint64_t for_ns, Handlers::Base::Column* colp,
146  const DB::Cell::KeyVec& parent_key) override;
147 
148  virtual void reset() override {
149  m_count.store(0);
150  }
151 
152  protected:
154 
155 };
156 
157 
158 
159 class Item_Volume : public Base {
160  public:
161  typedef std::unique_ptr<Item_Volume> Ptr;
162 
163  const std::string name;
164 
165  Item_Volume(const char* a_name) : name(a_name), m_volume(0) { }
166 
167  virtual ~Item_Volume() noexcept { }
168 
170  void increment() noexcept {
171  m_volume.fetch_add(1);
172  }
173 
175  void decrement() noexcept {
176  m_volume.fetch_sub(1);
177  }
178 
179  virtual void report(uint64_t for_ns, Handlers::Base::Column* colp,
180  const DB::Cell::KeyVec& parent_key) override;
181 
182  virtual void reset() override {
183  m_volume.store(0);
184  }
185 
186  protected:
188 
189 };
190 
191 
192 
193 class Item_CountVolume : public Base {
194  public:
195  typedef std::unique_ptr<Item_CountVolume> Ptr;
196 
197  const std::string name;
198 
199  Item_CountVolume(const char* a_name)
200  : name(a_name), m_count(0), m_volume(0) { }
201 
202  virtual ~Item_CountVolume() noexcept { }
203 
205  void increment() noexcept {
206  m_count.fetch_add(1);
207  m_volume.fetch_add(1);
208  }
209 
211  void decrement() noexcept {
212  m_volume.fetch_sub(1);
213  }
214 
215  virtual void report(uint64_t for_ns, Handlers::Base::Column* colp,
216  const DB::Cell::KeyVec& parent_key) override;
217 
218  virtual void reset() override {
219  m_count.store(0);
220  m_volume.store(0);
221  }
222 
223  protected:
226 
227 };
228 
229 
230 
231 
232 
233 class Reporting : public BaseSingleColumn {
234  public:
235 
236  typedef std::shared_ptr<Reporting> Ptr;
237 
242 
243  Reporting(const Clients::Ptr& a_clients,
244  const Comm::IoContextPtr& a_io,
247 
248  Reporting(const Reporting&) = delete;
249 
250  Reporting& operator=(const Reporting&) = delete;
251 
252  virtual ~Reporting() noexcept { }
253 
254  virtual void start() {
255  bool at = false;
256  if(running.compare_exchange_weak(at, true))
257  schedule();
258  }
259 
260  virtual void stop();
261 
262  virtual void wait();
263 
264  Level* get_level(const char* name);
265 
266  virtual uint64_t apply_time(uint32_t intval, DB::Cell::KeyVec& key);
267 
268  protected:
269 
271 
272  virtual bool valid() noexcept override {
273  return running;
274  }
275 
276  virtual void response(int err=Error::OK) override;
277 
278 
279  private:
280 
281  void report();
282 
283  void schedule();
284 
285  asio::high_resolution_timer m_timer;
286 
287 };
288 
289 
290 
291 
292 }}}}}}
293 
294 
295 #ifdef SWC_IMPL_SOURCE
297 #endif
298 
299 
300 #endif // swcdb_db_client_Query_Update_Handlers_Metrics_h
SWC::client::Query::Update::Handlers::Metric::Reporting::Reporting
Reporting(const Clients::Ptr &a_clients, const Comm::IoContextPtr &a_io, Config::Property::Value_int32_g::Ptr a_cfg_intval, Clients::Flag a_executor=client::Clients::DEFAULT)
Definition: Metrics.cc:197
SWC::Core::AtomicBase::compare_exchange_weak
constexpr SWC_CAN_INLINE bool compare_exchange_weak(T &at, T value) noexcept
Definition: Atomic.h:52
SWC::client::Query::Update::Handlers::Metric::Reporting::start
virtual void start()
Definition: Metrics.h:254
BaseSingleColumn.h
SWC::client::Query::Update::Handlers::Metric::Base::Ptr
std::unique_ptr< Base > Ptr
Definition: Metrics.h:47
SWC::client::Query::Update::Handlers::Metric::Reporting
Definition: Metrics.h:233
SWC::Core::AtomicBase< bool >
SWC::client::Query::Update::Handlers::Metric::Reporting::io
const Comm::IoContextPtr io
Definition: Metrics.h:238
SWC::client::Query::Update::Handlers::Metric::Level::name
const std::string name
Definition: Metrics.h:84
SWC::client::Query::Update::Handlers::Metric::Level::definitions
virtual void definitions(Handlers::Base::Column *colp, const DB::Cell::KeyVec &parent_key) override
Definition: Metrics.cc:34
SWC::client::Query::Update::Handlers::Metric::Base::reset
virtual void reset()=0
SWC::client::Clients::DEFAULT
@ DEFAULT
Definition: Clients.h:61
SWC::Core::Atomic< uint64_t >
SWC::DB::Cell::KeyVec
Definition: CellKeyVec.h:21
SWC::client::Query::Update::Handlers::Metric::Item_Volume::increment
SWC_CAN_INLINE void increment() noexcept
Definition: Metrics.h:170
SWC::client::Query::Update::Handlers::Metric::Item_Count::Ptr
std::unique_ptr< Item_Count > Ptr
Definition: Metrics.h:132
SWC::client::Query::Update::Handlers::Metric::Reporting::m_mutex
Core::MutexSptd m_mutex
Definition: Metrics.h:270
SWC::client::Query::Update::Handlers::Metric::Item_CountVolume::m_count
Core::Atomic< uint64_t > m_count
Definition: Metrics.h:224
SWC::client::Clients::Ptr
ClientsPtr Ptr
Definition: Clients.h:58
SWC::Comm::IoContextPtr
std::shared_ptr< IoContext > IoContextPtr
Definition: IoContext.h:16
SWC::client::Query::Update::Handlers::Metric::MIN
@ MIN
Definition: Metrics.h:28
SWC::client::Query::Update::Handlers::Metric::Reporting::schedule
void schedule()
Definition: Metrics.cc:307
SWC::client::Query::Update::Handlers::Metric::Reporting::get_level
Level * get_level(const char *name)
Definition: Metrics.cc:232
SWC::client::Query::Update::Handlers::Metric::MAX
@ MAX
Definition: Metrics.h:29
SWC::client::Query::Update::Handlers::Metric::Item_MinMaxAvgCount::name
const std::string name
Definition: Metrics.h:113
SWC::client::Query::Update::Handlers::Metric::Reporting::Reporting
Reporting(const Reporting &)=delete
SWC::client::Query::Update::Handlers::Metric::Reporting::wait
virtual void wait()
Definition: Metrics.cc:223
SWC::client::Query::Update::Handlers::Metric::Item_CountVolume::reset
virtual void reset() override
Definition: Metrics.h:218
SWC::client::Query::Update::Handlers::Metric::Item_MinMaxAvgCount::report
virtual void report(uint64_t for_ns, Handlers::Base::Column *colp, const DB::Cell::KeyVec &parent_key) override
Definition: Metrics.cc:74
SWC::client::Query::Update::Handlers::Metric::Reporting::Ptr
std::shared_ptr< Reporting > Ptr
Definition: Metrics.h:236
SWC::client::Query::Update::Handlers::Metric::Item_CountVolume::~Item_CountVolume
virtual ~Item_CountVolume() noexcept
Definition: Metrics.h:202
SWC::client::Query::Update::Handlers::Metric::Item_MinMaxAvgCount
Definition: Metrics.h:107
SWC::Common::Stats::MinMaxAvgCount_Safe
Definition: Stat.h:62
SWC::client::Query::Update::Handlers::Metric::Reporting::cfg_intval
Config::Property::Value_int32_g::Ptr cfg_intval
Definition: Metrics.h:239
SWC::client::Query::Update::Handlers::Metric::Item_Volume::decrement
SWC_CAN_INLINE void decrement() noexcept
Definition: Metrics.h:175
SWC::client::Query::Update::Handlers::Metric::Item_Volume::~Item_Volume
virtual ~Item_Volume() noexcept
Definition: Metrics.h:167
SWC::client::Query::Update::Handlers::Metric::FIELD_ID_MAX
static const uint24_t FIELD_ID_MAX
Definition: Metrics.h:37
SWC::client::Query::Update::Handlers::Metric::Item_Volume::Item_Volume
Item_Volume(const char *a_name)
Definition: Metrics.h:165
SWC::client::Query::Update::Handlers::Metric::Item_MinMaxAvgCount::reset
virtual void reset() override
Definition: Metrics.h:122
SWC::client::Query::Update::Handlers::Metric::AVG
@ AVG
Definition: Metrics.h:30
SWC::client::Query::Update::Handlers::Metric::Item_Volume::name
const std::string name
Definition: Metrics.h:163
SWC::client::Query::Update::Handlers::Metric::Level::get_level
Level * get_level(const char *_name, bool inner=true) override
Definition: Metrics.cc:59
SWC::client::Query::Update::Handlers::Metric::Reporting::operator=
Reporting & operator=(const Reporting &)=delete
SWC::Core::AtomicBase::store
constexpr SWC_CAN_INLINE void store(T v) noexcept
Definition: Atomic.h:37
SWC_CONST_FUNC
#define SWC_CONST_FUNC
Definition: Compat.h:107
SWC::Error::OK
@ OK
Definition: Error.h:45
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
CellValueSerialFields.h
SWC::client::Query::Update::Handlers::Metric::Base::~Base
virtual ~Base() noexcept
Definition: Metrics.h:49
Metrics.cc
SWC::client::Query::Update::Handlers::Metric::Level::~Level
virtual ~Level() noexcept
Definition: Metrics.h:89
SWC::client::Query::Update::Handlers::Metric::Reporting::stop
virtual void stop()
Definition: Metrics.cc:215
SWC::client::Query::Update::Handlers::Metric::Item_CountVolume::increment
SWC_CAN_INLINE void increment() noexcept
Definition: Metrics.h:205
SWC::client::Query::Update::Handlers::Metric::Level::reset
virtual void reset() override
Definition: Metrics.cc:54
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::client::Query::Update::Handlers::Metric::Item_MinMaxAvgCount::~Item_MinMaxAvgCount
virtual ~Item_MinMaxAvgCount() noexcept
Definition: Metrics.h:117
SWC::client::Query::Update::Handlers::Metric::Level::metrics
Core::Vector< Base::Ptr > metrics
Definition: Metrics.h:85
SWC::client::Query::Update::Handlers::Metric::Item_MinMaxAvgCount::Item_MinMaxAvgCount
Item_MinMaxAvgCount(const char *a_name)
Definition: Metrics.h:115
SWC::client::Query::Update::Handlers::Metric::Base::get_level
virtual Level * get_level(const char *, bool)
Definition: Metrics.h:72
SWC::client::Query::Update::Handlers::Metric::Item_Count::increment
SWC_CAN_INLINE void increment() noexcept
Definition: Metrics.h:141
SWC::client::Query::Update::Handlers::Metric::Item_Volume::report
virtual void report(uint64_t for_ns, Handlers::Base::Column *colp, const DB::Cell::KeyVec &parent_key) override
Definition: Metrics.cc:140
SWC::client::Query::Update::Handlers::Metric::Aggregation
Aggregation
Definition: Metrics.h:26
Compat.h
SWC::client::Clients::Flag
Flag
Definition: Clients.h:60
SWC::client::Query::Update::Handlers::Metric::Item_Count::report
virtual void report(uint64_t for_ns, Handlers::Base::Column *colp, const DB::Cell::KeyVec &parent_key) override
Definition: Metrics.cc:116
SWC::client::Query::Update::Handlers::Metric::Level::Ptr
std::unique_ptr< Level > Ptr
Definition: Metrics.h:82
SWC::client::Query::Update::Handlers::Metric::Base::definitions
virtual void definitions(Handlers::Base::Column *colp, const DB::Cell::KeyVec &parent_key)=0
SWC::client::Query::Update::Handlers::Metric::SUM
@ SUM
Definition: Metrics.h:27
SWC::client::Query::Update::Handlers::Base::Column
Definition: Base.h:30
SWC::client::Query::Update::Handlers::Metric::Item_CountVolume::decrement
SWC_CAN_INLINE void decrement() noexcept
Definition: Metrics.h:211
SWC::client::Query::Update::Handlers::Metric::FIELD_ID_MIN
static const uint24_t FIELD_ID_MIN
Definition: Metrics.h:36
SWC::client::Query::Update::Handlers::BaseSingleColumn
Definition: BaseSingleColumn.h:18
SWC::client::Query::Update::Handlers::Metric::Reporting::metrics
Core::Vector< Metric::Base::Ptr > metrics
Definition: Metrics.h:240
SWC::client::Query::Update::Handlers::Metric::FIELD_ID_VOLUME
static const uint24_t FIELD_ID_VOLUME
Definition: Metrics.h:40
SWC::client::Query::Update::Handlers::Metric::Item_CountVolume
Definition: Metrics.h:193
SWC::client::Query::Update::Handlers::Metric::AVG_PROP
@ AVG_PROP
Definition: Metrics.h:31
SWC::client::Query::Update::Handlers::Metric::Item_CountVolume::m_volume
Core::Atomic< uint64_t > m_volume
Definition: Metrics.h:225
SWC::client::Query::Update::Handlers::Metric::Item_Count
Definition: Metrics.h:130
SWC::client::Query::Update::Handlers::Metric::FIELD_ID_AVG
static const uint24_t FIELD_ID_AVG
Definition: Metrics.h:39
SWC::client::Query::Update::Handlers::Metric::aggregation_to_string
const char *SWC_CONST_FUNC aggregation_to_string(uint8_t agg) noexcept
Definition: Metrics.cc:16
SWC::client::Query::Update::Handlers::Metric::Item_Count::~Item_Count
virtual ~Item_Count() noexcept
Definition: Metrics.h:138
SWC::client::Query::Update::Handlers::Metric::Item_Volume::Ptr
std::unique_ptr< Item_Volume > Ptr
Definition: Metrics.h:161
SWC::Core::Vector< Base::Ptr >
SWC::client::Query::Update::Handlers::Metric::Item_Count::m_count
Core::Atomic< uint64_t > m_count
Definition: Metrics.h:153
SWC::client::Query::Update::Handlers::Metric::Item_CountVolume::name
const std::string name
Definition: Metrics.h:197
SWC::uint24_t
Core::uint24_t uint24_t
Definition: BitFieldInt.h:401
SWC::client::Query::Update::Handlers::Metric::Item_Volume
Definition: Metrics.h:159
SWC::client::Query::Update::Handlers::Metric::Reporting::report
void report()
Definition: Metrics.cc:282
SWC::client::Query::Update::Handlers::Metric::Reporting::valid
virtual bool valid() noexcept override
Definition: Metrics.h:272
SWC::client::Query::Update::Handlers::Metric::Reporting::response
virtual void response(int err=Error::OK) override
Definition: Metrics.cc:248
SWC::client::Query::Update::Handlers::Metric::Item_CountVolume::report
virtual void report(uint64_t for_ns, Handlers::Base::Column *colp, const DB::Cell::KeyVec &parent_key) override
Definition: Metrics.cc:164
SWC::client::Query::Update::Handlers::Metric::Item_Count::Item_Count
Item_Count(const char *a_name)
Definition: Metrics.h:136
SWC::client::Query::Update::Handlers::Metric::Reporting::~Reporting
virtual ~Reporting() noexcept
Definition: Metrics.h:252
SWC::client::Query::Update::Handlers::Metric::Item_MinMaxAvgCount::Ptr
std::unique_ptr< Item_MinMaxAvgCount > Ptr
Definition: Metrics.h:109
SWC::client::Query::Update::Handlers::Metric::Item_Count::name
const std::string name
Definition: Metrics.h:134
SWC::client::Query::Update::Handlers::Metric::Item_CountVolume::Item_CountVolume
Item_CountVolume(const char *a_name)
Definition: Metrics.h:199
SWC::client::Query::Update::Handlers::Metric::Item_Count::reset
virtual void reset() override
Definition: Metrics.h:148
SWC::Core::MutexSptd
Definition: MutexSptd.h:16
SWC::client::Query::Update::Handlers::Metric::Item_Volume::m_volume
Core::Atomic< uint64_t > m_volume
Definition: Metrics.h:187
Stat.h
SWC::client::Query::Update::Handlers::Metric::Item_Volume::reset
virtual void reset() override
Definition: Metrics.h:182
SWC::client::Query::Update::Handlers::Metric::Level::Level
Level(const char *a_name)
Definition: Metrics.h:87
SWC::client::Query::Update::Handlers::Metric::FIELD_ID_COUNT
static const uint24_t FIELD_ID_COUNT
Definition: Metrics.h:38
SWC::Core::Atomic::fetch_sub
constexpr SWC_CAN_INLINE T fetch_sub(T v) noexcept
Definition: Atomic.h:88
SWC::client::Query::Update::Handlers::Metric::Base::report
virtual void report(uint64_t for_ns, Handlers::Base::Column *colp, const DB::Cell::KeyVec &parent_key)=0
SWC::client::Query::Update::Handlers::Metric::Level
Definition: Metrics.h:80
SWC::client::Query::Update::Handlers::Metric::Reporting::apply_time
virtual uint64_t apply_time(uint32_t intval, DB::Cell::KeyVec &key)
Definition: Metrics.cc:242
SWC::Core::Atomic::fetch_add
constexpr SWC_CAN_INLINE T fetch_add(T v) noexcept
Definition: Atomic.h:93
SWC::Common::Stats::MinMaxAvgCount_Safe::reset
SWC_CAN_INLINE void reset() noexcept
Definition: Stat.h:114
SWC::client::Query::Update::Handlers::Metric::Base
Definition: Metrics.h:46
SWC::client::Query::Update::Handlers::Metric::Item_CountVolume::Ptr
std::unique_ptr< Item_CountVolume > Ptr
Definition: Metrics.h:195
SWC::Config::Property::Value_int32_g
Definition: Property.h:586
SWC::client::Query::Update::Handlers::Metric::Reporting::m_timer
asio::high_resolution_timer m_timer
Definition: Metrics.h:285
SWC::client::Query::Update::Handlers::Metric::Level::report
virtual void report(uint64_t for_ns, Handlers::Base::Column *colp, const DB::Cell::KeyVec &parent_key) override
Definition: Metrics.cc:44
SWC::client::Query::Update::Handlers::Metric::Reporting::running
Core::AtomicBool running
Definition: Metrics.h:241