MySQL 9.7.0
Source Code Documentation
tm_mysql_metric.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2023, 2026, Oracle and/or its affiliates.
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License, version 2.0,
6 as published by the Free Software Foundation.
7
8 This program is designed to work with certain software (including
9 but not limited to OpenSSL) that is licensed under separate terms,
10 as designated in a particular file or component or in included license
11 documentation. The authors of MySQL hereby grant you an additional
12 permission to link the program and your derivative works with the
13 separately licensed software that they have either included with
14 the program or referenced in the documentation.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License, version 2.0, for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24*/
25
26#ifndef TELEMETRY_MYSQL_METRIC_H_INCLUDED
27#define TELEMETRY_MYSQL_METRIC_H_INCLUDED
28
29#include <opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h>
30#include <opentelemetry/metrics/async_instruments.h>
31#include <opentelemetry/metrics/meter.h>
32#include <opentelemetry/metrics/observer_result.h>
33#include <opentelemetry/nostd/shared_ptr.h>
34#include <opentelemetry/nostd/unique_ptr.h>
35#include <opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h>
36#include <opentelemetry/sdk/metrics/meter_context.h>
37#include <opentelemetry/sdk/metrics/meter_provider.h>
38#include <opentelemetry/sdk/metrics/push_metric_exporter.h>
39#include <opentelemetry/sdk/metrics/view/view_registry.h>
40#include <opentelemetry/sdk/resource/resource.h>
41
43
44namespace telemetry {
45
46class MySQLMeter;
47
49 public:
50 static void callback(opentelemetry::metrics::ObserverResult result,
51 void *state);
52
53 MySQLMetric(opentelemetry::nostd::shared_ptr<
54 opentelemetry::metrics::ObservableInstrument>
55 otel_instrument,
56 measurement_callback_t metric_cb, void *metric_cb_context);
57
58 void addCallback();
59 void removeCallback();
60
61 void observe(opentelemetry::metrics::ObserverResult result);
62
64
65 private:
66 opentelemetry::nostd::shared_ptr<opentelemetry::metrics::ObservableInstrument>
72};
73
75 public:
76 explicit MySQLMeter(
77 opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Meter>
78 otel_meter)
79 : m_otel_meter(std::move(otel_meter)) {}
80 ~MySQLMeter() = default;
81
82 void createInt64ObservableCounter(const char *metric_name,
83 const char *metric_desc,
84 const char *metric_unit,
85 measurement_callback_t metric_cb,
86 void *metric_cb_context);
87
88 void createInt64ObservableUpDownCounter(const char *metric_name,
89 const char *metric_desc,
90 const char *metric_unit,
91 measurement_callback_t metric_cb,
92 void *metric_cb_context);
93
94 void createInt64ObservableGauge(const char *metric_name,
95 const char *metric_desc,
96 const char *metric_unit,
97 measurement_callback_t metric_cb,
98 void *metric_cb_context);
99
100 void createDoubleObservableCounter(const char *metric_name,
101 const char *metric_desc,
102 const char *metric_unit,
103 measurement_callback_t metric_cb,
104 void *metric_cb_context);
105
106 void createDoubleObservableUpDownCounter(const char *metric_name,
107 const char *metric_desc,
108 const char *metric_unit,
109 measurement_callback_t metric_cb,
110 void *metric_cb_context);
111
112 void createDoubleObservableGauge(const char *metric_name,
113 const char *metric_desc,
114 const char *metric_unit,
115 measurement_callback_t metric_cb,
116 void *metric_cb_context);
117
118 private:
119 opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Meter> m_otel_meter;
120 std::vector<std::unique_ptr<MySQLMetric>> m_metrics;
121};
122
123/*
124 Note:
125 Class MySQLMeterProviders is a work around for the following issue:
126
127 Metrics SDK: allow metric readers to filter Meters during Collect()
128
129 https://github.com/open-telemetry/opentelemetry-specification/issues/3617
130
131 TODO: Once the issue is fixed, remove MySQLMeterProviders entirely.
132*/
133
135 public:
138
139 opentelemetry::metrics::MeterProvider *get(size_t frequency);
140
141 void add(size_t frequency,
142 std::unique_ptr<opentelemetry::metrics::MeterProvider> provider);
143
144 void remove_meter(opentelemetry::nostd::string_view name,
145 opentelemetry::nostd::string_view version,
146 opentelemetry::nostd::string_view url);
147
148 void reset();
149
150 private:
151 struct entry {
153 std::unique_ptr<opentelemetry::metrics::MeterProvider> m_provider;
154
155 entry(size_t frequency,
156 std::unique_ptr<opentelemetry::metrics::MeterProvider> provider)
157 : m_frequency(frequency), m_provider(std::move(provider)) {}
158 };
159
160 /**
161 Meter providers.
162 This vector is sorted by ascending exporter frequency
163 (expressed in seconds, so really revert frequency).
164 m_providers[i].m_frequency < m_providers[i+1].m_frequency
165 */
166 std::vector<entry> m_providers;
167};
168
169} // namespace telemetry
170
171#endif /* TELEMETRY_MYSQL_METRIC_H_INCLUDED */
Definition: tm_mysql_metric.h:134
void add(size_t frequency, std::unique_ptr< opentelemetry::metrics::MeterProvider > provider)
Definition: tm_mysql_metric.cc:392
std::vector< entry > m_providers
Meter providers.
Definition: tm_mysql_metric.h:166
void reset()
Definition: tm_mysql_metric.cc:408
void remove_meter(opentelemetry::nostd::string_view name, opentelemetry::nostd::string_view version, opentelemetry::nostd::string_view url)
Definition: tm_mysql_metric.cc:398
opentelemetry::metrics::MeterProvider * get(size_t frequency)
Definition: tm_mysql_metric.cc:380
Definition: tm_mysql_metric.h:74
void createDoubleObservableCounter(const char *metric_name, const char *metric_desc, const char *metric_unit, measurement_callback_t metric_cb, void *metric_cb_context)
Definition: tm_mysql_metric.cc:325
void createInt64ObservableGauge(const char *metric_name, const char *metric_desc, const char *metric_unit, measurement_callback_t metric_cb, void *metric_cb_context)
Definition: tm_mysql_metric.cc:306
void createDoubleObservableUpDownCounter(const char *metric_name, const char *metric_desc, const char *metric_unit, measurement_callback_t metric_cb, void *metric_cb_context)
Definition: tm_mysql_metric.cc:344
void createInt64ObservableCounter(const char *metric_name, const char *metric_desc, const char *metric_unit, measurement_callback_t metric_cb, void *metric_cb_context)
Definition: tm_mysql_metric.cc:270
void createInt64ObservableUpDownCounter(const char *metric_name, const char *metric_desc, const char *metric_unit, measurement_callback_t metric_cb, void *metric_cb_context)
Definition: tm_mysql_metric.cc:289
MySQLMeter(opentelemetry::nostd::shared_ptr< opentelemetry::metrics::Meter > otel_meter)
Definition: tm_mysql_metric.h:76
void createDoubleObservableGauge(const char *metric_name, const char *metric_desc, const char *metric_unit, measurement_callback_t metric_cb, void *metric_cb_context)
Definition: tm_mysql_metric.cc:361
opentelemetry::nostd::shared_ptr< opentelemetry::metrics::Meter > m_otel_meter
Definition: tm_mysql_metric.h:119
std::vector< std::unique_ptr< MySQLMetric > > m_metrics
Definition: tm_mysql_metric.h:120
Definition: tm_mysql_metric.h:48
void removeCallback()
Definition: tm_mysql_metric.cc:228
~MySQLMetric()
Definition: tm_mysql_metric.cc:199
MySQLMetric(opentelemetry::nostd::shared_ptr< opentelemetry::metrics::ObservableInstrument > otel_instrument, measurement_callback_t metric_cb, void *metric_cb_context)
Definition: tm_mysql_metric.cc:187
void observe(opentelemetry::metrics::ObserverResult result)
Definition: tm_mysql_metric.cc:239
static void callback(opentelemetry::metrics::ObserverResult result, void *state)
Definition: tm_mysql_metric.cc:179
void * m_metric_cb_context
Definition: tm_mysql_metric.h:69
opentelemetry::nostd::shared_ptr< opentelemetry::metrics::ObservableInstrument > m_otel_instrument
Definition: tm_mysql_metric.h:67
bool m_collecting
Definition: tm_mysql_metric.h:70
measurement_callback_t m_metric_cb
Definition: tm_mysql_metric.h:68
void addCallback()
Definition: tm_mysql_metric.cc:204
mysql_mutex_t m_lock
Definition: tm_mysql_metric.h:71
Define std::hash<Gtid>.
Definition: gtid.h:355
Definition: option_usage.cc:40
void(* measurement_callback_t)(void *measurement_context, measurement_delivery_callback_t delivery, void *delivery_context)
Single metric measurement callback can return multiple measurement values.
Definition: psi_metric_bits.h:97
required uint64 version
Definition: replication_group_member_actions.proto:41
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:50
Definition: result.h:30
Definition: tm_mysql_metric.h:151
std::unique_ptr< opentelemetry::metrics::MeterProvider > m_provider
Definition: tm_mysql_metric.h:153
size_t m_frequency
Definition: tm_mysql_metric.h:152
entry(size_t frequency, std::unique_ptr< opentelemetry::metrics::MeterProvider > provider)
Definition: tm_mysql_metric.h:155