]> git.lizzy.rs Git - minetest.git/blob - src/util/metricsbackend.h
Fix BSD iconv declaration
[minetest.git] / src / util / metricsbackend.h
1 /*
2 Minetest
3 Copyright (C) 2013-2020 Minetest core developers team
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #pragma once
21 #include <memory>
22 #include <string>
23 #include <utility>
24 #include "config.h"
25
26 class MetricCounter
27 {
28 public:
29         MetricCounter() = default;
30
31         virtual ~MetricCounter() {}
32
33         virtual void increment(double number = 1.0) = 0;
34         virtual double get() const = 0;
35 };
36
37 typedef std::shared_ptr<MetricCounter> MetricCounterPtr;
38
39 class MetricGauge
40 {
41 public:
42         MetricGauge() = default;
43         virtual ~MetricGauge() {}
44
45         virtual void increment(double number = 1.0) = 0;
46         virtual void decrement(double number = 1.0) = 0;
47         virtual void set(double number) = 0;
48         virtual double get() const = 0;
49 };
50
51 typedef std::shared_ptr<MetricGauge> MetricGaugePtr;
52
53 class MetricsBackend
54 {
55 public:
56         MetricsBackend() = default;
57
58         virtual ~MetricsBackend() {}
59
60         typedef std::initializer_list<std::pair<const std::string, std::string>> Labels;
61
62         virtual MetricCounterPtr addCounter(
63                         const std::string &name, const std::string &help_str,
64                         Labels labels = {});
65         virtual MetricGaugePtr addGauge(
66                         const std::string &name, const std::string &help_str,
67                         Labels labels = {});
68 };
69
70 #if USE_PROMETHEUS
71 MetricsBackend *createPrometheusMetricsBackend();
72 #endif