85 lines
2.9 KiB
C++
85 lines
2.9 KiB
C++
// Copyright 2023 Memgraph Ltd.
|
|
//
|
|
// Use of this software is governed by the Business Source License
|
|
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
|
// License, and you may not use this file except in compliance with the Business Source License.
|
|
//
|
|
// As of the Change Date specified in that file, in accordance with
|
|
// the Business Source License, use of this software will be governed
|
|
// by the Apache License, Version 2.0, included in the file
|
|
// licenses/APL.txt.
|
|
|
|
#include "utils/event_histogram.hpp"
|
|
|
|
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
|
|
#define APPLY_FOR_HISTOGRAMS(M) \
|
|
M(QueryExecutionLatency_us, Query, "Query execution latency in microseconds", 50, 90, 99) \
|
|
M(SnapshotCreationLatency_us, Snapshot, "Snapshot creation latency in microseconds", 50, 90, 99) \
|
|
M(SnapshotRecoveryLatency_us, Snapshot, "Snapshot recovery latency in microseconds", 50, 90, 99)
|
|
|
|
namespace memgraph::metrics {
|
|
|
|
// define every Event as an index in the array of counters
|
|
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
|
|
#define M(NAME, TYPE, DOCUMENTATION, ...) extern const Event NAME = __COUNTER__;
|
|
APPLY_FOR_HISTOGRAMS(M)
|
|
#undef M
|
|
|
|
inline constexpr Event END = __COUNTER__;
|
|
|
|
// Initialize array for the global histogram with all named histograms and their percentiles
|
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
Histogram global_histograms_array[END]{
|
|
|
|
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
|
|
#define M(NAME, TYPE, DOCUMENTATION, ...) Histogram({__VA_ARGS__}),
|
|
APPLY_FOR_HISTOGRAMS(M)
|
|
#undef M
|
|
};
|
|
|
|
// Initialize global histograms
|
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
EventHistograms global_histograms(global_histograms_array);
|
|
|
|
const Event EventHistograms::num_histograms = END;
|
|
|
|
void Measure(const Event event, Value value) { global_histograms.Measure(event, value); }
|
|
|
|
void EventHistograms::Measure(const Event event, Value value) { histograms_[event].Measure(value); }
|
|
|
|
const char *GetHistogramName(const Event event) {
|
|
static const char *strings[] = {
|
|
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
|
|
#define M(NAME, TYPE, DOCUMENTATION, ...) #NAME,
|
|
APPLY_FOR_HISTOGRAMS(M)
|
|
#undef M
|
|
};
|
|
|
|
return strings[event];
|
|
}
|
|
|
|
const char *GetHistogramDocumentation(const Event event) {
|
|
static const char *strings[] = {
|
|
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
|
|
#define M(NAME, TYPE, DOCUMENTATION, ...) DOCUMENTATION,
|
|
APPLY_FOR_HISTOGRAMS(M)
|
|
#undef M
|
|
};
|
|
|
|
return strings[event];
|
|
}
|
|
|
|
const char *GetHistogramType(const Event event) {
|
|
static const char *strings[] = {
|
|
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
|
|
#define M(NAME, TYPE, DOCUMENTATION, ...) #TYPE,
|
|
APPLY_FOR_HISTOGRAMS(M)
|
|
#undef M
|
|
};
|
|
|
|
return strings[event];
|
|
}
|
|
|
|
Event HistogramEnd() { return END; }
|
|
} // namespace memgraph::metrics
|