MySQL 26.10.0
Source Code Documentation
health_monitor_collector.h
Go to the documentation of this file.
1/* Copyright (c) 2020, 2026, Oracle and/or its affiliates.
2
3This program is free software; you can redistribute it and/or modify
4it under the terms of the GNU General Public License, version 2.0,
5as published by the Free Software Foundation.
6
7This program is designed to work with certain software (including
8but not limited to OpenSSL) that is licensed under separate terms,
9as designated in a particular file or component or in included license
10documentation. The authors of MySQL hereby grant you an additional
11permission to link the program and your derivative works with the
12separately licensed software that they have either included with
13the program or referenced in the documentation.
14
15This program is distributed in the hope that it will be useful,
16but WITHOUT ANY WARRANTY; without even the implied warranty of
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18GNU General Public License, version 2.0, for more details.
19
20You should have received a copy of the GNU General Public License
21along with this program; if not, write to the Free Software
22Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
24#pragma once
25
26#include <atomic>
27#include <cstdint>
28#include <limits>
29#include <string>
30
33
34namespace hm {
35
36class System_vars;
37template <typename T>
38class Stat_Buffer;
39class mutex_guard;
40
41class Collector : public Thread {
42 public:
43 Collector() = default;
44 Collector(const char *name, const char *resource_name, const char *instr_name,
45 const char *os_name, const char *description);
46 ~Collector() override = default;
47 Collector(const Collector &) = delete;
48 Collector &operator=(const Collector &) = delete;
49 Collector(Collector &&) = delete;
51
52 [[nodiscard]] const char *resource_name() const {
53 return m_resource_name.c_str();
54 }
55
56 // Sample collection
57 void run_process() override;
58 void process() override {}
59
60 // Settings
61 virtual void set_buffer_size() {}
62 virtual bool settings_changed() { return false; }
63 virtual bool dynamic_settings_changed() { return false; }
64 virtual bool static_settings_changed() { return false; }
66 [[nodiscard]] bool settings_pending() const {
67 return m_settings_pending.load(std::memory_order_acquire);
68 }
69 void set_settings_pending(bool pending) {
70 m_settings_pending.store(pending, std::memory_order_release);
71 }
72 virtual void set_params() {}
73 virtual bool update_settings();
74 [[nodiscard]] int base_interval() const { return m_base_interval; }
75 [[nodiscard]] int sample_interval() const { return m_sample_interval; }
76
77 private:
79
80 public:
83
84 // Logging
85 virtual void log_collector_status(bool settings);
86 virtual void log_collector_status(const std::string &state_msg,
87 bool settings);
88 virtual void log_resource_status() = 0; // defined by collector
89 virtual void log_status();
90 virtual void log_resource_levels();
91
92 protected:
95
96 // Collector timers
101
102 public:
103 virtual std::string build_collector_message(const std::string &status,
104 const std::string &mode,
105 const std::string &message,
106 bool settings);
107
108 virtual std::string build_resource_message(const std::string &status,
109 const std::string &mode,
110 const std::string &message,
111 bool levels);
112 static std::string format_level(uint64_t mbytes);
113 static std::string format_mb(uint64_t mbytes, int prec, bool show_units);
114 virtual std::string format_settings() { return ""; }
115 virtual std::string format_status_info() { return ""; }
116 virtual std::string tag_collector_state() { return "Started"; }
117 virtual std::string tag_resource_state() { return ""; }
118 virtual std::string tag_mode() { return ""; }
119
120 // Constants and conversions
122
123 const std::string k_started{"Started"};
124 const std::string k_stopped{"Stopped"};
125 const std::string k_offline_mode{"OFFLINE_MODE"};
126 const std::string k_super_read_only{"SUPER_READ_ONLY"};
127 const std::string k_invalid_path{"Invalid Path"};
128 const std::string k_error{"ERROR"};
129 const std::string k_system_error{"SYSTEM ERROR"};
130 const std::string k_failed{"failed"};
131 const std::string k_remaining{"attempts remaining"};
132
133 // The base interval is the frequency that the Collector checks the resource,
134 // i.e. the rate at which process() is called.
135 // The sample interval is the frequency of storing resource info.
136 // By default, the base interval == the sample interval, however, a collector
137 // may choose a shorter base interval in order to monitor the resource at a
138 // rate higher than sample collection and storage.
139 // In that case, then the collector must check the sample_timer() to determine
140 // when to store the sample.
141 static constexpr int k_min_interval{1};
142 static constexpr int k_max_interval{86400}; // 1 day
143 static constexpr int k_default_base_interval{10};
145
146 // clang-format off
147 protected:
148 // Resource name for logging such as 'Disk', 'Memory', 'System', etc.
149 const std::string m_resource_name;
150 // Current settings from system variables
151 bool m_running{false}; // enable/disable sample collection
152
153 private:
154 int m_base_interval{k_default_base_interval}; // monitoring interval, in seconds
155 int m_sample_interval{k_default_sample_interval}; // sample storage interval, in seconds
156 bool m_custom_base_interval{false}; // true if base interval was set separately
157
158 public:
159 int m_retention{0}; // how long samples are retained, in seconds
160 // true if system variable changes are pending
161 std::atomic<bool> m_settings_pending{false};
162 int m_status_interval{0}; // number of samples between status updates
163 int m_status_counter{0}; // countdown of samples to the next status
164 bool m_verbose_log{false}; // use a less compact log message format
165 bool m_force_status{false}; // force status message wrt status counter
166
167 Cycle_Timer m_sample_timer; // timer for sample collection
168 Cycle_Timer m_status_timer; // timer for status messages
169 // clang-format on
170};
171
172} // namespace hm
Definition: table_disk_forecast.h:30
Definition: health_monitor_collector.h:41
void consume_settings_pending()
Consume one pending notification without clearing a concurrent update.
Definition: health_monitor_collector.cc:173
void set_base_interval(int base_interval)
Set the base monitoring interval if different than the sample interval.
Definition: health_monitor_collector.cc:185
static constexpr uint64_t no_warn_level
Definition: health_monitor_collector.h:121
const std::string m_resource_name
Definition: health_monitor_collector.h:149
const std::string k_offline_mode
Definition: health_monitor_collector.h:125
bool settings_pending() const
Definition: health_monitor_collector.h:66
const std::string k_invalid_path
Definition: health_monitor_collector.h:127
virtual bool settings_changed()
Definition: health_monitor_collector.h:62
void set_settings_pending(bool pending)
Definition: health_monitor_collector.h:69
const std::string k_stopped
Definition: health_monitor_collector.h:124
bool m_custom_base_interval
Definition: health_monitor_collector.h:156
void advance_sample_timers()
Process collector sample and status timers.
Definition: health_monitor_collector.cc:106
virtual bool static_settings_changed()
Definition: health_monitor_collector.h:64
static std::string format_level(uint64_t mbytes)
Format storage amount in MiB, no units.
Definition: health_monitor_collector.cc:344
Cycle_Timer & sample_timer()
Definition: health_monitor_collector.h:97
void run_process() override
Sample collection loop.
Definition: health_monitor_collector.cc:50
static constexpr int k_min_interval
Definition: health_monitor_collector.h:141
static constexpr int k_max_interval
Definition: health_monitor_collector.h:142
virtual std::string tag_mode()
Definition: health_monitor_collector.h:118
void set_sample_interval(int sample_interval)
Set the sample interval, adjust to the nearest multiple of the base interval.
Definition: health_monitor_collector.cc:201
int m_sample_interval
Definition: health_monitor_collector.h:155
virtual std::string format_settings()
Definition: health_monitor_collector.h:114
std::atomic< bool > m_settings_pending
Definition: health_monitor_collector.h:161
static constexpr int k_default_base_interval
Definition: health_monitor_collector.h:143
virtual void log_collector_status(bool settings)
Collector status with optional settings.
Definition: health_monitor_collector.cc:240
static std::string format_mb(uint64_t mbytes, int prec, bool show_units)
Format storage amount.
Definition: health_monitor_collector.cc:354
void process() override
Definition: health_monitor_collector.h:58
virtual void set_params()
Definition: health_monitor_collector.h:72
int base_interval() const
Definition: health_monitor_collector.h:74
const std::string k_failed
Definition: health_monitor_collector.h:130
int sample_interval() const
Definition: health_monitor_collector.h:75
~Collector() override=default
const char * resource_name() const
Definition: health_monitor_collector.h:52
virtual std::string format_status_info()
Definition: health_monitor_collector.h:115
const std::string k_remaining
Definition: health_monitor_collector.h:131
virtual bool dynamic_settings_changed()
Definition: health_monitor_collector.h:63
static constexpr int k_default_sample_interval
Definition: health_monitor_collector.h:144
virtual void log_resource_levels()
Log general resource status with state, mode (Fallback, Recovery, ...) and levels.
Definition: health_monitor_collector.cc:273
virtual std::string tag_resource_state()
Definition: health_monitor_collector.h:117
virtual std::string build_resource_message(const std::string &status, const std::string &mode, const std::string &message, bool levels)
Formatted resource message, no levels or settings.
Definition: health_monitor_collector.cc:318
void initialize_sample_timers()
Initialize collection timers.
Definition: health_monitor_collector.cc:92
const std::string k_error
Definition: health_monitor_collector.h:128
int m_base_interval
Definition: health_monitor_collector.h:154
virtual bool update_settings()
Update system variable settings for the Collector.
Definition: health_monitor_collector.cc:137
void mark_settings_pending()
Mark a settings update for evaluation by the Supervisor.
Definition: health_monitor_collector.cc:125
virtual std::string tag_collector_state()
Definition: health_monitor_collector.h:116
void set_collector_intervals(int base_interval, int sample_interval)
Set the base and sample intervals together to ensure that the sample interval is a multiple of the ba...
Definition: health_monitor_collector.cc:231
const std::string k_super_read_only
Definition: health_monitor_collector.h:126
virtual void set_buffer_size()
Definition: health_monitor_collector.h:61
int m_status_counter
Definition: health_monitor_collector.h:163
bool m_running
Definition: health_monitor_collector.h:151
Collector(Collector &&)=delete
const std::string k_system_error
Definition: health_monitor_collector.h:129
bool m_force_status
Definition: health_monitor_collector.h:165
void apply_pending_settings()
Apply settings while the collector command lock is held.
Definition: health_monitor_collector.cc:146
Collector & operator=(Collector &&)=delete
Cycle_Timer m_status_timer
Definition: health_monitor_collector.h:168
virtual void log_resource_status()=0
int m_retention
Definition: health_monitor_collector.h:159
int m_status_interval
Definition: health_monitor_collector.h:162
Collector(const Collector &)=delete
virtual void log_status()
Issue a log status message for the collector.
Definition: health_monitor_collector.cc:263
virtual std::string build_collector_message(const std::string &status, const std::string &mode, const std::string &message, bool settings)
Formatted collector message with optional settings.
Definition: health_monitor_collector.cc:289
Collector()=default
bool m_verbose_log
Definition: health_monitor_collector.h:164
Collector & operator=(const Collector &)=delete
Cycle_Timer m_sample_timer
Definition: health_monitor_collector.h:167
Cycle_Timer & status_message_timer()
Definition: health_monitor_collector.h:98
const std::string k_started
Definition: health_monitor_collector.h:123
Cycle-driven timer.
Definition: health_monitor_timer.h:125
Definition: health_monitor_thread.h:44
const char * name() const
Definition: health_monitor_thread.h:51
Definition: component_command.h:29
ValueType max(X &&first)
Definition: gtid.h:103
mode
Definition: file_handle.h:61
required uint32 status
Definition: replication_asynchronous_connection_failover.proto:61
Definition: dbug.cc:193