private:
static std::string serialize_name(const std::string &name, const std::vector<std::pair<std::string, std::string>> &labels);
+ static std::string serialize_labels(const std::vector<std::pair<std::string, std::string>> &labels);
enum DataType {
DATA_TYPE_INT64,
};
struct MetricKey {
MetricKey(const std::string &name, const std::vector<std::pair<std::string, std::string>> labels)
- : name(name), labels(labels), serialized(serialize_name(name, labels))
+ : name(name), labels(labels), serialized_labels(serialize_labels(labels))
{
}
bool operator< (const MetricKey &other) const
{
- return serialized < other.serialized;
+ if (name != other.name)
+ return name < other.name;
+ return serialized_labels < other.serialized_labels;
}
const std::string name;
const std::vector<std::pair<std::string, std::string>> labels;
- const std::string serialized;
+ const std::string serialized_labels;
};
struct Metric {
DataType data_type;
};
mutable std::mutex mu;
- std::map<std::string, Type> types; // Ordered the same as metrics, assuming no { signs in names (which are illegal).
+ std::map<std::string, Type> types; // Ordered the same as metrics.
std::map<MetricKey, Metric> metrics;
std::vector<Histogram> histograms;