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.cc
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 
10 
11 
12 namespace SWC { namespace client { namespace Query { namespace Update {
13 namespace Handlers { namespace Metric {
14 
15 
16 const char* aggregation_to_string(uint8_t agg) noexcept {
17  switch(agg) {
18  case Aggregation::SUM:
19  return "SUM";
20  case Aggregation::MIN:
21  return "MIN";
22  case Aggregation::MAX:
23  return "MAX";
24  case Aggregation::AVG:
25  return "AVG";
27  return "AVG_PROP";
28  default:
29  return "UNKNOWN";
30  }
31 }
32 
33 
35  const DB::Cell::KeyVec& parent_key) {
36  DB::Cell::KeyVec key;
37  key.reserve(parent_key.size() + 1);
38  key.copy(parent_key);
39  key.add(name);
40  for(auto& m : metrics)
41  m->definitions(colp, key);
42 }
43 
44 void Level::report(uint64_t for_ns, Handlers::Base::Column* colp,
45  const DB::Cell::KeyVec& parent_key) {
46  DB::Cell::KeyVec key;
47  key.reserve(parent_key.size() + 1);
48  key.copy(parent_key);
49  key.add(name);
50  for(auto& m : metrics)
51  m->report(for_ns, colp, key);
52 }
53 
54 void Level::reset() {
55  for(auto& m : metrics)
56  m->reset();
57 }
58 
59 Level* Level::get_level(const char* _name, bool inner) {
60  if(!inner)
61  return Condition::str_eq(name.c_str(), _name) ? this : nullptr;
62 
63  Level* level;
64  for(auto& m : metrics) {
65  if((level = m->get_level(_name, false)))
66  return level;
67  }
68  metrics.emplace_back((level = new Level(_name)));
69  return level;
70 }
71 
72 
73 
74 void Item_MinMaxAvgCount::report(uint64_t for_ns,
76  const DB::Cell::KeyVec& parent_key) {
78  gather(value);
79  if(!value.count)
80  return;
81 
82  DB::Cell::KeyVec key;
83  key.reserve(parent_key.size() + 1);
84  key.copy(parent_key);
85  key.add(name);
86 
87  DB::Cells::Cell cell;
88  cell.flag = DB::Cells::INSERT;
89  cell.set_time_order_desc(true);
90  cell.set_timestamp(for_ns);
91  cell.key.add(key);
92 
93  size_t sz = 4;
94  uint64_t avg = value.avg();
95  if(avg != value.min)
96  sz += 2 + Serialization::encoded_length_vi64(value.min);
97  if(avg != value.max)
98  sz += 2 + Serialization::encoded_length_vi64(value.max);
101 
103  wfields.ensure(sz);
104  if(avg != value.min)
105  wfields.add(FIELD_ID_MIN, int64_t(value.min));
106  if(avg != value.max)
107  wfields.add(FIELD_ID_MAX, int64_t(value.max));
108  wfields.add(FIELD_ID_COUNT, int64_t(value.count));
109  wfields.add(FIELD_ID_AVG, int64_t(avg));
110  cell.set_value(wfields.base, wfields.fill(), false);
111 
112  colp->add(cell);
113 }
114 
115 
116 void Item_Count::report(uint64_t for_ns, Handlers::Base::Column* colp,
117  const DB::Cell::KeyVec& parent_key) {
118  int64_t _count = m_count.exchange(0);
119 
120  DB::Cell::KeyVec key;
121  key.reserve(parent_key.size() + 1);
122  key.copy(parent_key);
123  key.add(name);
124 
125  DB::Cells::Cell cell;
126  cell.flag = DB::Cells::INSERT;
127  cell.set_time_order_desc(true);
128  cell.set_timestamp(for_ns);
129  cell.key.add(key);
130 
132  wfields.add(FIELD_ID_COUNT, _count);
133 
134  cell.set_value(wfields.base, wfields.fill(), false);
135  colp->add(cell);
136 }
137 
138 
139 
140 void Item_Volume::report(uint64_t for_ns, Handlers::Base::Column* colp,
141  const DB::Cell::KeyVec& parent_key) {
142  int64_t _volume = m_volume.load();
143 
144  DB::Cell::KeyVec key;
145  key.reserve(parent_key.size() + 1);
146  key.copy(parent_key);
147  key.add(name);
148 
149  DB::Cells::Cell cell;
150  cell.flag = DB::Cells::INSERT;
151  cell.set_time_order_desc(true);
152  cell.set_timestamp(for_ns);
153  cell.key.add(key);
154 
156  wfields.add(FIELD_ID_VOLUME, _volume);
157 
158  cell.set_value(wfields.base, wfields.fill(), false);
159  colp->add(cell);
160 }
161 
162 
163 
165  const DB::Cell::KeyVec& parent_key) {
166  int64_t _count = m_count.exchange(0);
167  int64_t _volume = m_volume.load();
168 
169  DB::Cell::KeyVec key;
170  key.reserve(parent_key.size() + 1);
171  key.copy(parent_key);
172  key.add(name);
173 
174  DB::Cells::Cell cell;
175  cell.flag = DB::Cells::INSERT;
176  cell.set_time_order_desc(true);
177  cell.set_timestamp(for_ns);
178  cell.key.add(key);
179 
181  wfields.ensure(
184  + 4
185  );
186  wfields.add(FIELD_ID_COUNT, _count);
187  wfields.add(FIELD_ID_VOLUME, _volume);
188 
189  cell.set_value(wfields.base, wfields.fill(), false);
190  colp->add(cell);
191 }
192 
193 
194 
195 
196 
198  const Comm::IoContextPtr& a_io,
200  Clients::Flag a_executor)
202  a_clients,
203  DB::Types::SystemColumn::SYS_CID_DEFINE_LEXIC,
204  DB::Types::KeySeq::LEXIC, 1, 0, DB::Types::Column::SERIAL,
205  a_executor
206  ),
207  io(a_io),
208  cfg_intval(a_cfg_intval),
209  metrics(),
210  running(false),
211  m_mutex(),
212  m_timer(io->executor()) {
213 }
214 
216  bool at = true;
217  if(running.compare_exchange_weak(at, false)) {
219  m_timer.cancel();
220  }
221 }
222 
224  for(size_t n=0; completion.count(); ++n) {
225  if(n % 30000 == 0)
226  SWC_LOGF(LOG_WARN, "Reporting::wait completion=" SWC_FMT_LU,
227  completion.count());
228  std::this_thread::sleep_for(std::chrono::microseconds(100));
229  }
230 }
231 
232 Level* Reporting::get_level(const char* _name) {
233  Level* level;
234  for(auto& m : metrics) {
235  if((level = m->get_level(_name, false)))
236  return level;
237  }
238  metrics.emplace_back((level = new Level(_name)));
239  return level;
240 }
241 
242 uint64_t Reporting::apply_time(uint32_t intval, DB::Cell::KeyVec& key) {
243  uint64_t for_ns = (::time(nullptr) / intval) * intval;
244  key.add(std::to_string(for_ns));
245  return for_ns * 1000000000;
246 }
247 
248 void Reporting::response(int err) {
249  if(!completion.is_last())
250  return;
251 
252  if(!err && running && requires_commit()) {
253  commit(&column);
254  return;
255  }
256 
257  if(err)
258  error(err);
259  else if(!empty())
261 
262  profile.finished();
263 
264  if(error() || column.error()) {
266  SWC_LOG_OSTREAM << "Problem Updating Statistics cid=" << column.cid;
267  Error::print(SWC_LOG_OSTREAM << " hdlr=", error());
268  Error::print(SWC_LOG_OSTREAM << " colm=", column.error());
269  );
270  // reset-state
275  report();
276  return;
277  }
278 
279  schedule();
280 }
281 
283  auto intval = cfg_intval->get();
284  if(!intval) {
285  for(auto& m : metrics)
286  m->reset();
287  return schedule();
288  }
289  if(!running)
290  return;
291 
292  DB::Cell::KeyVec key;
295  for(auto& m : metrics)
296  m->definitions(&column, key);
297  } else {
298  uint64_t for_ns = apply_time(intval, key);
299  for(auto& m : metrics)
300  m->report(for_ns, &column, key);
301  }
302  profile.reset();
303 
304  column.empty() ? schedule() : commit(&column);
305 }
306 
308  auto intval = cfg_intval->get();
309  if(!intval)
310  intval = 300;
311  uint32_t secs = ::time(nullptr);
312  secs = ((secs/intval) * intval + intval) - secs;
314  if(!running)
315  return;
316  m_timer.expires_after(std::chrono::seconds(secs));
317  struct TimerTask {
318  Reporting* ptr;
320  TimerTask(Reporting* a_ptr) noexcept : ptr(a_ptr) { }
321  void operator()(const asio::error_code& ec) {
322  if(ec != asio::error::operation_aborted)
323  ptr->report();
324  }
325  };
326  m_timer.async_wait(TimerTask(this));
327 }
328 
329 
330 
331 
332 
333 }}}}}}
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::client::Query::Update::Handlers::ColumnMutable::error
virtual void error(int err) noexcept override
Definition: BaseColumnMutable.h:90
SWC::Core::AtomicBase::compare_exchange_weak
constexpr SWC_CAN_INLINE bool compare_exchange_weak(T &at, T value) noexcept
Definition: Atomic.h:52
SWC::DB::Cells::Cell::set_value
SWC_CAN_INLINE void set_value(uint8_t *v, uint32_t len, bool owner)
Definition: Cell.h:223
SWC_LOG_OSTREAM
#define SWC_LOG_OSTREAM
Definition: Logger.h:44
SWC::client::Query::Update::Handlers::Metric::Reporting
Definition: Metrics.h:233
Clients.h
SWC::Common::Stats::MinMaxAvgCount::count
ValueT count
Definition: Stat.h:19
SWC::client::Query::Update::Handlers::Metric::Level::name
const std::string name
Definition: Metrics.h:84
SWC_LOGF
#define SWC_LOGF(priority, fmt,...)
Definition: Logger.h:188
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_LOG_OUT
#define SWC_LOG_OUT(pr, _code_)
Definition: Logger.h:178
SWC::client::Query::Update::Handlers::ColumnMutable::empty
virtual bool empty() noexcept override
Definition: BaseColumnMutable.cc:25
SWC::Common::Stats::MinMaxAvgCount_Safe< uint64_t >::avg
SWC_CAN_INLINE uint64_t avg() const noexcept
Definition: Stat.h:90
SWC::DB::Cell::KeyVec
Definition: CellKeyVec.h:21
SWC::client::Query::Update::Handlers::BaseSingleColumn::column
ColumnMutable column
Definition: BaseSingleColumn.h:24
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::Common::Stats::MinMaxAvgCount::avg
SWC_CAN_INLINE ValueT avg() const noexcept
Definition: Stat.h:40
SWC::Core::MutexSptd::scope
Definition: MutexSptd.h:96
SWC::DB::Types::SystemColumn::SYS_CID_DEFINE_LEXIC
const cid_t SYS_CID_DEFINE_LEXIC
Definition: SystemColumn.h:25
SWC::Core::BufferDyn::ensure
SWC_CAN_INLINE void ensure(size_t len)
Definition: Buffer.h:212
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::DB::Cells::Cell
Definition: Cell.h:92
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::Config::Property::Value_int32_g::get
SWC_CAN_INLINE int32_t get() const noexcept
Definition: Property.h:610
SWC::client::Query::Update::Handlers::Metric::Item_MinMaxAvgCount::name
const std::string name
Definition: Metrics.h:113
SWC::client::Query::Update::Handlers::ColumnMutable::cid
cid_t cid
Definition: BaseColumnMutable.h:25
SWC::DB::Cells::Cell::key
DB::Cell::Key key
Definition: Cell.h:357
SWC::client::Query::Update::Handlers::BaseSingleColumn::empty
virtual bool empty() noexcept override
Definition: BaseSingleColumn.h:53
SWC::DB::Cell::Serial::Value::FieldsWriter::add
SWC_CAN_INLINE void add(Field *field)
Definition: CellValueSerialFields.h:42
SWC::client::Query::Profiling::reset
void reset() noexcept
Definition: Profiling.h:171
SWC::client::Query::Update::Handlers::Metric::Reporting::wait
virtual void wait()
Definition: Metrics.cc:223
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::Common::Stats::MinMaxAvgCount< uint64_t >
SWC::client::Query::Update::Handlers::Metric::Reporting::cfg_intval
Config::Property::Value_int32_g::Ptr cfg_intval
Definition: Metrics.h:239
SWC::DB::Cell::Key::add
SWC_CAN_INLINE void add(const std::string_view &fraction)
Definition: CellKey.h:86
SWC::client::Query::Update::Handlers::Metric::FIELD_ID_MAX
static const uint24_t FIELD_ID_MAX
Definition: Metrics.h:37
SWC::Condition::str_eq
bool str_eq(const char *s1, const char *s2) noexcept SWC_ATTRIBS((SWC_ATTRIB_O3))
Definition: Comparators_basic.h:237
SWC::client::Query::Update::Handlers::Base::commit
void commit()
Definition: Base.h:179
SWC::client::Query::Update::Handlers::Metric::AVG
@ AVG
Definition: Metrics.h:30
SWC::DB::Types::KeySeq
KeySeq
Definition: KeySeq.h:13
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::Core::AtomicBase::store
constexpr SWC_CAN_INLINE void store(T v) noexcept
Definition: Atomic.h:37
SWC::Error::OK
@ OK
Definition: Error.h:45
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::client::Query::Update::Handlers::Metric::Reporting::stop
virtual void stop()
Definition: Metrics.cc:215
SWC::Core::Buffer::base
value_type * base
Definition: Buffer.h:131
Metrics.h
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::Base::completion
Core::CompletionCounter< uint64_t > completion
Definition: Base.h:113
SWC::DB::Cell::KeyVec::size
constexpr SWC_CAN_INLINE size_type size() const noexcept
Definition: Vector.h:189
SWC::client::Query::Update::Handlers::Metric::Level::metrics
Core::Vector< Base::Ptr > metrics
Definition: Metrics.h:85
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::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::SUM
@ SUM
Definition: Metrics.h:27
SWC::client::Query::Update::Handlers::Base::Column
Definition: Base.h:30
SWC::client::Query::Update::Handlers::Metric::FIELD_ID_MIN
static const uint24_t FIELD_ID_MIN
Definition: Metrics.h:36
SWC::DB::Cells::INSERT
@ INSERT
Definition: Cell.h:62
SWC::client::Query::Update::Handlers::BaseSingleColumn
Definition: BaseSingleColumn.h:18
SWC::client::Query::Profiling::finished
SWC_CAN_INLINE void finished() noexcept
Definition: Profiling.h:127
SWC::DB::Cells::Cell::set_time_order_desc
constexpr SWC_CAN_INLINE void set_time_order_desc(bool desc) noexcept
Definition: Cell.h:169
SWC::client::Query::Update::Handlers::Metric::Reporting::metrics
Core::Vector< Metric::Base::Ptr > metrics
Definition: Metrics.h:240
SWC::Serialization::encoded_length_vi64
constexpr SWC_CAN_INLINE uint8_t encoded_length_vi64(uint64_t val) noexcept
Definition: Serialization.h:272
SWC::Error::CLIENT_DATA_REMAINED
@ CLIENT_DATA_REMAINED
Definition: Error.h:125
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::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_FMT_LU
#define SWC_FMT_LU
Definition: Compat.h:98
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::Core::CompletionCounter::count
constexpr SWC_CAN_INLINE CountT count() const noexcept
Definition: CompletionCounter.h:42
SWC::Core::AtomicBase::exchange
constexpr SWC_CAN_INLINE T exchange(T value) noexcept
Definition: Atomic.h:47
SWC::DB::Cell::Serial::Value::FieldsWriter
Definition: CellValueSerialFields.h:34
SWC::client::Query::Update::Handlers::Base::error
virtual int error() noexcept
Definition: Base.h:159
SWC::Common::Stats::MinMaxAvgCount_Safe< uint64_t >::gather
SWC_CAN_INLINE void gather(MinMaxAvgCount< uint64_t > &to) noexcept
Definition: Stat.h:108
SWC::client::Query::Update::Handlers::Metric::Item_Count::m_count
Core::Atomic< uint64_t > m_count
Definition: Metrics.h:153
SWC::Common::Stats::MinMaxAvgCount::min
ValueT min
Definition: Stat.h:21
SWC::Core::BufferDyn::fill
constexpr SWC_CAN_INLINE size_t fill() const noexcept
Definition: Buffer.h:192
SWC::client::Query::Update::Handlers::Metric::Item_CountVolume::name
const std::string name
Definition: Metrics.h:197
Committer.h
SWC::client::Query::Update::Handlers::Metric::Reporting::report
void report()
Definition: Metrics.cc:282
SWC::Core::AtomicBase::load
constexpr SWC_CAN_INLINE T load() const noexcept
Definition: Atomic.h:42
SWC::client::Query::Update::Handlers::ColumnMutable::state_error
Core::Atomic< int > state_error
Definition: BaseColumnMutable.h:24
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::DB::Cell::KeyVec::copy
void copy(const KeyVec &other)
Definition: CellKeyVec.h:181
SWC::client::Query::Update::Handlers::Metric::Item_Count::name
const std::string name
Definition: Metrics.h:134
SWC::Common::Stats::MinMaxAvgCount::max
ValueT max
Definition: Stat.h:22
SWC::client::Query::Update::Handlers::Metric::Item_Volume::m_volume
Core::Atomic< uint64_t > m_volume
Definition: Metrics.h:187
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::LOG_WARN
@ LOG_WARN
Definition: Logger.h:33
SWC::Core::CompletionCounter::is_last
constexpr SWC_CAN_INLINE bool is_last() noexcept
Definition: CompletionCounter.h:37
SWC::client::Query::Update::Handlers::Base::profile
Profiling profile
Definition: Base.h:111
SWC::DB::Cell::KeyVec::add
SWC_CAN_INLINE void add(const Fraction &fraction)
Definition: CellKeyVec.h:62
SWC::client::Query::Update::Handlers::Base::Column::add
virtual size_t add(const DynamicBuffer &cells, const DB::Cell::Key &upto_key, const DB::Cell::Key &from_key, uint32_t skip, bool malformed)=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::Error::print
void print(std::ostream &out, int err)
Definition: Error.cc:191
SWC::Core::to_string
SWC_CAN_INLINE std::string to_string(const BitFieldInt< T, SZ > &v)
Definition: BitFieldInt.h:263
SWC::client::Query::Update::Handlers::Base::state_error
Core::Atomic< int > state_error
Definition: Base.h:112
SWC::Core::Vector::emplace_back
SWC_CAN_INLINE reference emplace_back(ArgsT &&... args)
Definition: Vector.h:349
SWC::Config::Property::Value_int32_g
Definition: Property.h:586
SWC::client::Query::Update::Handlers::BaseSingleColumn::requires_commit
virtual bool requires_commit() noexcept override
Definition: BaseSingleColumn.h:49
SWC::Core::Vector::reserve
SWC_CAN_INLINE void reserve(size_type cap)
Definition: Vector.h:288
SWC::DB::Cells::Cell::flag
uint8_t flag
Definition: Cell.h:359
SWC::client::Query::Update::Handlers::Metric::Reporting::m_timer
asio::high_resolution_timer m_timer
Definition: Metrics.h:285
SWC::DB::Types::SystemColumn::SYS_CID_STATS
const cid_t SYS_CID_STATS
Definition: SystemColumn.h:24
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
SWC::DB::Cells::Cell::set_timestamp
constexpr SWC_CAN_INLINE void set_timestamp(int64_t ts) noexcept
Definition: Cell.h:182