{"latency-sum", &latencySum},
{"latency-count", &latencyCount},
};
- std::map<std::string, stat_t> customCounters;
- std::map<std::string, pdns::stat_t_trait<double> > customGauges;
+ std::map<std::string, stat_t, std::less<>> customCounters;
+ std::map<std::string, pdns::stat_t_trait<double>, std::less<>> customGauges;
};
extern struct DNSDistStats g_stats;
uint16_t dnsdist_ffi_dnspacket_get_record_content_length(const dnsdist_ffi_dnspacket_t* packet, size_t idx) __attribute__ ((visibility ("default")));
uint16_t dnsdist_ffi_dnspacket_get_record_content_offset(const dnsdist_ffi_dnspacket_t* packet, size_t idx) __attribute__ ((visibility ("default")));
void dnsdist_ffi_dnspacket_free(dnsdist_ffi_dnspacket_t*) __attribute__ ((visibility ("default")));
+
+void dnsdist_ffi_metric_inc(const char* metricName, size_t metricNameLen) __attribute__ ((visibility ("default")));
+void dnsdist_ffi_metric_dec(const char* metricName, size_t metricNameLen) __attribute__ ((visibility ("default")));
+void dnsdist_ffi_metric_set(const char* metricName, size_t metricNameLen, double value) __attribute__ ((visibility ("default")));
+double dnsdist_ffi_metric_get(const char* metricName, size_t metricNameLen, bool isCounter) __attribute__ ((visibility ("default")));
delete packet;
}
}
+
+void dnsdist_ffi_metric_inc(const char* metricName, size_t metricNameLen)
+{
+ auto metric = g_stats.customCounters.find(std::string_view(metricName, metricNameLen));
+ if (metric != g_stats.customCounters.end()) {
+ ++metric->second;
+ }
+}
+
+void dnsdist_ffi_metric_dec(const char* metricName, size_t metricNameLen)
+{
+ auto metric = g_stats.customCounters.find(std::string_view(metricName, metricNameLen));
+ if (metric != g_stats.customCounters.end()) {
+ --metric->second;
+ }
+}
+
+void dnsdist_ffi_metric_set(const char* metricName, size_t metricNameLen, double value)
+{
+ auto metric = g_stats.customGauges.find(std::string_view(metricName, metricNameLen));
+ if (metric != g_stats.customGauges.end()) {
+ metric->second = value;
+ }
+}
+
+double dnsdist_ffi_metric_get(const char* metricName, size_t metricNameLen, bool isCounter)
+{
+ auto name = std::string_view(metricName, metricNameLen);
+ if (isCounter) {
+ auto counter = g_stats.customCounters.find(name);
+ if (counter != g_stats.customCounters.end()) {
+ return (double)counter->second.load();
+ }
+ }
+ else {
+ auto gauge = g_stats.customGauges.find(name);
+ if (gauge != g_stats.customGauges.end()) {
+ return gauge->second.load();
+ }
+ }
+ return 0.;
+}