Files
ternfs-XTXMarkets/cpp/core/Metrics.hpp
Francesco Mazzoli 110705db8d EggsFS -> TernFS rename
Things not done because probably disruptive:

* kmod filesystem string
* sysctl/debugfs/trace
* metrics names
* xmon instance names

Some of these might be renamed too, but starting with a relatively
safe set.
2025-09-03 09:29:53 +01:00

58 lines
1.2 KiB
C++

#pragma once
#include "Time.hpp"
struct MetricsBuilder {
private:
enum State : uint8_t {
INIT,
MEASUREMENT,
TAGS,
FIELDS,
TIMESTAMP
};
State _state = State::INIT;
std::string _payload;
public:
void reset() {
_state = State::INIT;
_payload.clear();
}
const std::string& payload() const {
ALWAYS_ASSERT(_state == State::INIT || _state == State::TIMESTAMP);
return _payload;
}
void measurement(const std::string& name);
void tagRaw(const std::string& name, const std::string& value);
template<typename A>
void tag(const std::string& name, const A& value) {
std::ostringstream ss;
ss << value;
tagRaw(name, ss.str());
}
void fieldRaw(const std::string& name, const std::string& value);
void fieldU64(const std::string& name, uint64_t x) {
std::ostringstream ss;
ss << x << "i";
fieldRaw(name, ss.str());
}
void fieldFloat(const std::string& name, double x) {
std::ostringstream ss;
ss << x;
fieldRaw(name, ss.str());
}
void timestamp(TernTime t);
};
// error string on error
std::string sendMetrics(Duration timeout, const std::string& payload);