28#include "iceberg/iceberg_export.h"
29#include "iceberg/result.h"
30#include "iceberg/util/string_util.h"
35enum class CounterUnit {
42ICEBERG_EXPORT
constexpr std::string_view ToString(CounterUnit unit)
noexcept {
44 case CounterUnit::kCount:
46 case CounterUnit::kBytes:
48 case CounterUnit::kUndefined:
58ICEBERG_EXPORT
inline Result<CounterUnit> CounterUnitFromString(std::string_view s) {
59 auto unit = StringUtils::ToLower(s);
60 if (unit ==
"count")
return CounterUnit::kCount;
61 if (unit ==
"bytes")
return CounterUnit::kBytes;
62 if (unit ==
"undefined")
return CounterUnit::kUndefined;
63 return InvalidArgument(
"Invalid unit: {}", s);
78 virtual int64_t
value()
const = 0;
81 virtual CounterUnit
unit()
const {
return CounterUnit::kCount; }
84 virtual bool IsNoop()
const {
return false; }
87 static std::shared_ptr<Counter> Noop();
95 using Counter::Increment;
96 void Increment(int64_t amount)
override;
97 int64_t value()
const override;
98 CounterUnit
unit()
const override {
return unit_; }
101 std::atomic<int64_t> count_{0};
Abstract counter for tracking event totals.
Definition counter.h:67
virtual void Increment()
Increment the counter by 1.
Definition counter.h:72
virtual bool IsNoop() const
Return true if this counter is a no-op.
Definition counter.h:84
virtual int64_t value() const =0
Return the current count.
virtual void Increment(int64_t amount)=0
Increment the counter by the given amount.
virtual CounterUnit unit() const
Return the unit for this counter.
Definition counter.h:81
Thread-safe counter backed by std::atomic<int64_t>.
Definition counter.h:91
CounterUnit unit() const override
Return the unit for this counter.
Definition counter.h:98