mirror of
https://github.com/XTXMarkets/ternfs.git
synced 2026-01-04 01:49:42 -06:00
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.
58 lines
1.2 KiB
C++
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); |