MySQL 26.10.0
Source Code Documentation
health_monitor_disk_forecaster.h
Go to the documentation of this file.
1/* Copyright (c) 2025, 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 <mutex>
28
30#include "fx_sample.h"
35
36namespace hm {
37
38struct Disk_forecast_reset_context;
39
40class Disk_Forecaster : public Collector {
41 public:
43 uint64_t total_mb{0};
44 uint64_t used_mb{0};
45 double used_pct{0.0};
46 size_t metric_count{0};
48 std::vector<Disk_Forecast> forecasts;
50 };
51
54
55 // Disable copy and move operations
60
61 // ---------------------------------------------------------------------------
62 // Operational Mode and State Definitions
63 // ---------------------------------------------------------------------------
64 // A note on terminology:
65 // - mode: Refers to a configuration or operational regime that persists
66 // until changed by explicit action.
67 // - state: Refers to the current condition or status of a process, and can
68 // change as a result of internal events.
69 // ---------------------------------------------------------------------------
70
71 // Run_Mode - Disk Forecaster operational mode.
72 // Configurable as system variable.
73 enum class Dfx_Run_Mode {
74 NONE, // system not initialized
75 NORMAL, // active normal operation, collecting live data (default)
76 TEST, // run unit test from preloaded disk metrics
77 STANDBY // forecaster thread is alive but not processing data
78 };
79 static const std::array<std::string, 4> RUN_MODE_NAMES;
80
81 // Test_State - Current state of the test process, distinct from the run mode.
82 // Set internally, visible as status variable.
83 enum class Dfx_Test_State {
84 NONE, // no test is running or configured (default)
85 IDLE, // no test is running, ready to accept a new test command
86 RUNNING // test currently executing, processing input test data
87 };
88 static const std::array<std::string, 3> TEST_STATE_NAMES;
89
90 // For system variable registration
91 static const char *dfx_run_mode_names[5]; // 4 names + nullptr
92
93 private:
94 // Forecaster status variables
95 static char m_dfx_run_mode_name[32]; // disk_forecaster_run_mode
96 static char m_dfx_test_state_name[32]; // disk_forecaster_test_state
97
98 // ---------------------------------------------------------------------------
99 // Process
100 // ---------------------------------------------------------------------------
101 public:
102 void initialize();
103 void initialize_timers();
105 // Metric collection and forecasting
106 void pre_process() override;
108 void process() override;
109 void post_process() override;
110
111 void set_disk_input_available(bool available) {
112 m_disk_input_available.store(available, std::memory_order_release);
113 }
114
115 // ---------------------------------------------------------------------------
116 // Operational modes
117 // ---------------------------------------------------------------------------
118 [[nodiscard]] Dfx_Run_Mode run_mode() const { return m_run_mode; }
119 [[nodiscard]] bool is_new_run_mode() const { return m_is_new_run_mode; }
120 [[nodiscard]] Dfx_Test_State test_state() const { return m_test_state; }
121
123 void set_is_new_run_mode(bool is_new) { m_is_new_run_mode = is_new; }
124 void set_test_state(Dfx_Test_State state);
125
126 const std::string &run_mode_name();
127 const std::string &test_state_name();
128
129 // Accessor for status variable 'disk_forecaster_run_mode'
130 [[nodiscard]] const char *run_mode_name_ptr() const {
131 return m_dfx_run_mode_name;
132 }
133 // Accessor for status variable 'disk_forecaster_test_state'
134 [[nodiscard]] const char *test_state_name_ptr() const {
136 }
137
138 // Forecast depletion ETA classifications
139 static const std::array<std::string, 4> FORECAST_STATUS_NAMES;
140 const std::string &forecast_status_name(Dfx_Status status);
141
142 private:
144 bool m_is_new_run_mode{false};
146 std::string m_test_filename; // disk metrics input file
147
148 // ---------------------------------------------------------------------------
149 // Settings
150 // ---------------------------------------------------------------------------
151 public:
152 [[nodiscard]] bool running() const override;
153 [[nodiscard]] int report_interval() const {
154 return m_report_interval_seconds / 60;
155 }
156 std::string test_filename() { return m_test_filename; }
157 std::string volume() { return m_volume; } // from Disk Collector
158 bool dynamic_settings_changed() override;
159 bool static_settings_changed() override;
160 void set_params() final;
161 bool update_settings() override;
162
163 private:
164 // Prevents settings application from blocking the Supervisor during a cycle.
166 // Serializes processing with live settings checks and updates.
170
171 // ---------------------------------------------------------------------------
172 // Data buffers
173 // ---------------------------------------------------------------------------
177
178 public:
182 }
186 }
187
188 private:
193
194 protected:
195 // ---------------------------------------------------------------------------
196 // Logging
197 // ---------------------------------------------------------------------------
198 void log_info_message(const std::string &msg, bool levels);
199 void log_info_message(const std::string &msg);
200 void log_resource_status() override;
201 void log_resource_levels() override;
202
203 std::string format_settings() override;
204 std::string format_status_info() override;
205
206 // ---------------------------------------------------------------------------
207 // Timing and interval settings
208 // ---------------------------------------------------------------------------
212
213 private:
218
219 public:
220 [[nodiscard]] static constexpr int default_sample_interval() {
222 }
223 [[nodiscard]] static constexpr int default_report_interval() {
225 }
226
227 private:
228 // Base interval (internal, fixed)
229 // - frequency that the Collector calls process(), in seconds
230 // - not configurable
232
233 // Time series interval (internal, configurable, aka sample_interval)
234 // - frequency of storing time series samples, in seconds
235 // - always a multiple of the base interval
236 // - default: 60 seconds
237 static constexpr int k_time_series_interval_seconds{60};
238
239 // Data retention interval (internal, fixed) - Disk_Metric table
240 // - duration raw time series records are retained, in seconds
241 // - default: 14 days
242 // - rows: 14 days * 1440/day = 20,160 disk metrics
243 // - size: 20,160 metrics * 24 bytes/metric = 484 KB
244 static constexpr size_t k_metric_retention_seconds{seconds_per_day * 14};
245
246 // Forecast interval (internal, fixed)
247 // - frequency that forecasts are made
248 // - default: 1 hour
251
252 // Forecast report interval (configurable)
253 // - frequency that the forecast report is written to the diagnostics log
254 // - default 4 hours
257
258 // Forecast status interval (internal, fixed)
259 // - Frequency that forecast messages are written to the error log
260 // - Default 1 hour
262
263 // Disk Collector input availability for NORMAL mode
264 std::atomic<bool> m_disk_input_available{false};
265
266 // Forecast record retention (internal, fixed)
267 // - how long forecast records are retained in the Disk_Forecast table
268 // - default: 14 days @ 1 forecast per hour
269 // - rows: 14 days * 24 fx/day * 3 (1h/1d/7d) = 1008 records
270 // - size: 1008 records * 52 bytes/record = 52 KB
272
273 // ---------------------------------------------------------------------------
274 // Data aggregation
275 // ---------------------------------------------------------------------------
276 // M = 1440 minutes per day
277 // W = aggregation window in minutes (5, 15 or 60)
278 // Intervals/Day
279 // | Aggregation Tier | Days/Tier | (M/W) | Rows = Days × M/W |
280 // |------------------------|-----------|--------------|-------------------|
281 // | 5-minute (Days 8–30) | 23 | 288 | 23 × 288 = 6,624 |
282 // | 15-minute (Days 31–90) | 60 | 96 | 60 × 96 = 5,760 |
283 // | 1-hour (Days 91–365) | 275 | 24 | 275 × 24 = 6,600 |
284 // | Total = 18,984 |
285 static constexpr int k_tier_1_days{23};
286 static constexpr int k_tier_2_days{60};
287 static constexpr int k_tier_3_days{275};
291
292 // Current storage in MiB
293 uint64_t m_total_mb{}; // filesystem capacity
294 uint64_t m_last_total_mb{}; // to detect if volume changed
295 uint64_t m_used_mb{}; // current used space, MiB
296 double m_used_pct{}; // current used space, percent of total
297 std::string m_configured_volume; // configured monitored path
298 std::string m_volume; // effective monitored path
300 bool m_volume_size_changed{}; // true if volume size changed
301
302 [[nodiscard]] bool volume_size_changed() const {
304 __LINE__);
306 }
307 void set_volume_size_changed(bool change) {
309 __LINE__);
310 m_volume_size_changed = change;
311 }
312
313 // ---------------------------------------------------------------------------
314 // Forecasting
315 // ---------------------------------------------------------------------------
317 Dfx_Status compute_status(double current_usage_pct, bool has_depletion_eta,
318 double days_to_full, double usage_rate_pct_per_day);
320 double volume_size_mb,
321 double current_usage_mb);
322 int generate_forecast(std::vector<Disk_Forecast> &disk_forecasts,
323 Disk_Forecast_Summary &summary);
324 bool ready_to_forecast(bool log_warning = true);
325 void update_forecast_tables(std::vector<Disk_Forecast> &forecasts,
326 Disk_Forecast_Summary &summary);
327 void update_storage_totals(const Disk_Metric &disk_metric);
328
329 public:
332 Status_snapshot status_snapshot() const;
333
334 private:
335 void set_total_metric_count(size_t metric_count) {
336 m_total_metric_count = metric_count;
337 }
338 void save_forecast_status(const std::vector<Disk_Forecast> &forecasts,
339 const Disk_Forecast_Summary &summary) {
341 __LINE__);
342 m_last_forecasts = forecasts;
343 m_last_forecast_summary = summary;
345 }
346 static mysql_rwlock_t *model_lock();
347
348 private:
350 std::mutex m_series_mutex; // serializes time series operations
351
352 // Disk forecaster locking scheme.
353 //
354 // m_series_mutex serializes operations that act on the complete time series,
355 // such as a filesystem reset and running in TEST mode.
356 //
357 // The metric buffer R/W lock protects metric rows, counters and logical
358 // positions. The model R/W lock protects the Holt-Winters model and
359 // the reporting state. Forecast and summary buffers use their own locks.
360 //
361 // Acquire locks in this order:
362 // m_series_mutex
363 // metric buffer R/W lock
364 // forecast model R/W lock
365 //
366 // - The metric and model locks block forecasting during a filesystem reset.
367 // - The m_series_mutex prevents a reset from interrupting TEST mode.
368 // - Functions with a `_no_lock` suffix require the caller to hold the
369 // applicable lock and must not acquire it again.
370
371 static mysql_rwlock_t m_model_lock; // R/W lock for the forecast model
374 std::vector<Disk_Forecast> m_last_forecasts; // most recent set of forecasts
375 Disk_Forecast_Summary m_last_forecast_summary; // and summary for reporting
376
377 // ---------------------------------------------------------------------------
378 // Reporting
379 // ---------------------------------------------------------------------------
380 protected:
381 std::string generate_report(std::vector<Disk_Forecast> &forecasts,
382 Disk_Forecast_Summary &summary);
383 void log_forecast_status(std::vector<Disk_Forecast> &forecasts,
384 Disk_Forecast_Summary &summary);
385 std::string format_disk_forecast(const Disk_Forecast &dfx);
386 std::string format_forecast_summary(const Disk_Forecast_Summary &dfxs);
387
388 // ---------------------------------------------------------------------------
389 // Testing
390 // ---------------------------------------------------------------------------
391 int initialize_test();
392 int process_test_cycle();
394 int read_unit_test_file(std::vector<Disk_Metric> &disk_metrics);
395 void run_unit_test();
396
397 // clang-format off
398
399 // ---------------------------------------------------------------------------
400 // Instrumentation
401 // ---------------------------------------------------------------------------
402 // Mutexes
414 };
415 // Memory
421 {&m_metric_memory_key, "disk_forecaster_metric", PSI_FLAG_ONLY_GLOBAL_STAT, PSI_VOLATILITY_PROVISIONING, "Health Monitor disk metrics buffer"},
422 {&m_aggregate_memory_key, "disk_forecaster_aggregate", PSI_FLAG_ONLY_GLOBAL_STAT, PSI_VOLATILITY_PROVISIONING, "Health Monitor aggregated metrics buffer"},
423 {&m_forecast_memory_key, "disk_forecaster_forecast", PSI_FLAG_ONLY_GLOBAL_STAT, PSI_VOLATILITY_PROVISIONING, "Health Monitor forecast buffer"},
424 {&m_forecast_summary_memory_key, "disk_forecaster_forecast_summary", PSI_FLAG_ONLY_GLOBAL_STAT, PSI_VOLATILITY_PROVISIONING, "Health Monitor forecast summary buffer"}
425 };
426
427 // clang-format on
428};
429
430} // namespace hm
Implements the Holt-Winters forecasting algorithm for time series data.
Definition: fx_holt_winters_forecaster.h:44
Definition: health_monitor_collector.h:41
Cycle-driven timer.
Definition: health_monitor_timer.h:125
Definition: health_monitor_disk_forecaster.h:40
void update_forecast_tables(std::vector< Disk_Forecast > &forecasts, Disk_Forecast_Summary &summary)
Update disk forecast buffers with the lastest forecast and summary.
Definition: health_monitor_disk_forecaster_core.cc:406
std::string volume()
Definition: health_monitor_disk_forecaster.h:157
int load_unit_test_data()
Load the unit test data into the disk metrics buffer.
Definition: health_monitor_disk_forecaster_test.cc:60
Disk_Forecast_Summary_Buffer m_disk_forecast_summary_buffer
Definition: health_monitor_disk_forecaster.h:192
static constexpr int k_forecast_interval_seconds
Definition: health_monitor_disk_forecaster.h:249
void set_test_state(Dfx_Test_State state)
Definition: health_monitor_disk_forecaster_mode.cc:50
Holt_Winters_Forecaster & forecaster()
Definition: health_monitor_disk_forecaster.h:316
bool is_new_run_mode() const
Definition: health_monitor_disk_forecaster.h:119
Cycle_Timer & forecast_timer()
Definition: health_monitor_disk_forecaster.h:209
Cycle_Timer & short_report_timer()
Definition: health_monitor_disk_forecaster.h:211
time_t m_last_forecast_time
Definition: health_monitor_disk_forecaster.h:373
PSI_memory_key m_forecast_summary_memory_key
Definition: health_monitor_disk_forecaster.h:419
static const char * dfx_run_mode_names[5]
Definition: health_monitor_disk_forecaster.h:91
static char m_dfx_run_mode_name[32]
Definition: health_monitor_disk_forecaster.h:95
bool ready_to_forecast(bool log_warning=true)
Check if the forecaster is ready to produce forecasts.
Definition: health_monitor_disk_forecaster_core.cc:377
void set_run_mode(Dfx_Run_Mode mode)
Definition: health_monitor_disk_forecaster_mode.cc:36
bool m_static_settings_changed
Definition: health_monitor_disk_forecaster.h:168
Dfx_Test_State test_state() const
Definition: health_monitor_disk_forecaster.h:120
const char * run_mode_name_ptr() const
Definition: health_monitor_disk_forecaster.h:130
std::string format_forecast_summary(const Disk_Forecast_Summary &dfxs)
Generate a human-readable log message from a Disk_Forecast_Summary.
Definition: health_monitor_disk_forecaster_report.cc:284
PSI_rwlock_key m_metric_rwlock_key
Definition: health_monitor_disk_forecaster.h:403
Disk_Forecast_Summary compute_summary(const Holt_Winters_State &model, double volume_size_mb, double current_usage_mb)
Compute a summary of the forecast model and current usage.
Definition: health_monitor_disk_forecaster_core.cc:112
PSI_memory_key m_aggregate_memory_key
Definition: health_monitor_disk_forecaster.h:417
double m_used_pct
Definition: health_monitor_disk_forecaster.h:296
static constexpr int k_tier_2_rows
Definition: health_monitor_disk_forecaster.h:289
void set_total_metric_count(size_t metric_count)
Definition: health_monitor_disk_forecaster.h:335
Disk_Forecaster()
Definition: health_monitor_disk_forecaster.cc:44
Holt_Winters_Forecaster m_forecaster
Definition: health_monitor_disk_forecaster.h:349
std::mutex m_processing_mutex
Definition: health_monitor_disk_forecaster.h:165
std::string generate_report(std::vector< Disk_Forecast > &forecasts, Disk_Forecast_Summary &summary)
Format the disk forecast report for the diagnostic log.
Definition: health_monitor_disk_forecaster_report.cc:93
bool m_is_new_run_mode
Definition: health_monitor_disk_forecaster.h:144
void save_forecast_status(const std::vector< Disk_Forecast > &forecasts, const Disk_Forecast_Summary &summary)
Definition: health_monitor_disk_forecaster.h:338
static constexpr int k_time_series_interval_seconds
Definition: health_monitor_disk_forecaster.h:237
void log_forecast_status(std::vector< Disk_Forecast > &forecasts, Disk_Forecast_Summary &summary)
Send disk usage forecast summary to the error log.
Definition: health_monitor_disk_forecaster_report.cc:252
Disk_Forecast_Buffer disk_forecast_buffer()
Definition: health_monitor_disk_forecaster.h:183
std::string test_filename()
Definition: health_monitor_disk_forecaster.h:156
Disk_Metric_Buffer disk_metric_buffer()
Definition: health_monitor_disk_forecaster.h:179
bool m_volume_size_changed
Definition: health_monitor_disk_forecaster.h:300
static char m_dfx_test_state_name[32]
Definition: health_monitor_disk_forecaster.h:96
std::atomic< bool > m_disk_input_available
Definition: health_monitor_disk_forecaster.h:264
int process_test_cycle()
Runs the unit test driven by the test data file.
Definition: health_monitor_disk_forecaster_test.cc:380
Cycle_Timer m_short_report_timer
Definition: health_monitor_disk_forecaster.h:216
static const std::array< std::string, 4 > RUN_MODE_NAMES
Definition: health_monitor_disk_forecaster.h:79
void set_is_new_run_mode(bool is_new)
Definition: health_monitor_disk_forecaster.h:123
static constexpr int k_tier_2_days
Definition: health_monitor_disk_forecaster.h:286
size_t m_total_metric_count
Definition: health_monitor_disk_forecaster.h:372
void run_unit_test()
Run the unit test: Generate forecasts from the uploaded disk metric data, update the forecast tables ...
Definition: health_monitor_disk_forecaster_test.cc:331
Dfx_Status compute_status(double current_usage_pct, bool has_depletion_eta, double days_to_full, double usage_rate_pct_per_day)
Determine disk status based on usage and forecast metrics.
Definition: health_monitor_disk_forecaster_core.cc:79
std::mutex m_series_mutex
Definition: health_monitor_disk_forecaster.h:350
void set_disk_metric_buffer_size()
Resize the disk metric time series buffer if sample interval changes.
Definition: health_monitor_disk_forecaster.cc:362
const std::string & run_mode_name()
Definition: health_monitor_disk_forecaster_mode.cc:79
PSI_rwlock_key m_forecast_rwlock_key
Definition: health_monitor_disk_forecaster.h:405
std::vector< Disk_Forecast > m_last_forecasts
Definition: health_monitor_disk_forecaster.h:374
void set_disk_forecast_buffer_size()
Set the sizes for the disk forecast and disk forecast summary buffers.
Definition: health_monitor_disk_forecaster.cc:388
Cycle_Timer & report_timer()
Definition: health_monitor_disk_forecaster.h:210
static constexpr int default_sample_interval()
Definition: health_monitor_disk_forecaster.h:220
void log_resource_levels() override
Forecast status, no message.
Definition: health_monitor_disk_forecaster.cc:551
uint64_t m_used_mb
Definition: health_monitor_disk_forecaster.h:295
bool static_settings_changed() override
Indicate if the static Disk Forecast settings have changed.
Definition: health_monitor_disk_forecaster.cc:423
static constexpr int k_tier_3_days
Definition: health_monitor_disk_forecaster.h:287
int m_report_interval_seconds
Definition: health_monitor_disk_forecaster.h:256
void reset_filesystem_series()
Reset disk metrics and forecasts before sampling a different filesystem.
Definition: health_monitor_disk_forecaster_core.cc:441
bool running() const override
Return health_monitor.disk_forecast_running.
Definition: health_monitor_disk_forecaster.cc:486
const char * test_state_name_ptr() const
Definition: health_monitor_disk_forecaster.h:134
void initialize_timers()
Initialize the forecast and report timers.
Definition: health_monitor_disk_forecaster.cc:101
int generate_forecast(std::vector< Disk_Forecast > &disk_forecasts, Disk_Forecast_Summary &summary)
Terminology level - Baseline ('real') value with trend and seasonal components removed.
Definition: health_monitor_disk_forecaster_core.cc:223
void update_storage_totals(const Disk_Metric &disk_metric)
Update storage totals, convert to MiB.
Definition: health_monitor_disk_forecaster_core.cc:422
PSI_rwlock_key m_forecast_model_rwlock_key
Definition: health_monitor_disk_forecaster.h:407
void initialize()
Initialize the Disk Forecaster.
Definition: health_monitor_disk_forecaster.cc:86
Dfx_Run_Mode run_mode() const
Definition: health_monitor_disk_forecaster.h:118
bool update_settings() override
Apply pending settings unless a Disk Forecaster processing cycle is active.
Definition: health_monitor_disk_forecaster.cc:207
PSI_rwlock_key m_aggregate_rwlock_key
Definition: health_monitor_disk_forecaster.h:404
static constexpr int k_forecast_retention_seconds
Definition: health_monitor_disk_forecaster.h:271
static constexpr size_t k_metric_retention_seconds
Definition: health_monitor_disk_forecaster.h:244
virtual ~Disk_Forecaster() override
Definition: health_monitor_disk_forecaster.h:53
PSI_rwlock_info m_rwlock_info[5]
Definition: health_monitor_disk_forecaster.h:408
void process() override
Main processing loop, 10 second interval.
Definition: health_monitor_disk_forecaster.cc:147
int read_unit_test_file(std::vector< Disk_Metric > &disk_metrics)
Read the unit test file and populate the disk metrics buffer.
Definition: health_monitor_disk_forecaster_test.cc:92
PSI_memory_key m_metric_memory_key
Definition: health_monitor_disk_forecaster.h:416
Disk_Forecast_Summary_Buffer disk_forecast_summary_buffer()
Definition: health_monitor_disk_forecaster.h:184
Dfx_Test_State m_test_state
Definition: health_monitor_disk_forecaster.h:145
void log_info_message(const std::string &msg, bool levels)
Informational message with collector state and optional forecast status.
Definition: health_monitor_disk_forecaster.cc:532
Status_snapshot status_snapshot() const
Definition: health_monitor_disk_forecaster_core.cc:48
static mysql_rwlock_t m_model_lock
Definition: health_monitor_disk_forecaster.h:371
PSI_memory_info m_memory_info[4]
Definition: health_monitor_disk_forecaster.h:420
int report_interval() const
Definition: health_monitor_disk_forecaster.h:153
Cycle_Timer m_report_timer
Definition: health_monitor_disk_forecaster.h:215
uint64_t m_total_mb
Definition: health_monitor_disk_forecaster.h:293
void process_normal_cycle()
Normal processing cycle.
Definition: health_monitor_disk_forecaster.cc:247
Disk_Forecast_Summary m_last_forecast_summary
Definition: health_monitor_disk_forecaster.h:375
static constexpr int k_disk_forecast_base_interval_seconds
Definition: health_monitor_disk_forecaster.h:231
Dfx_Run_Mode
Definition: health_monitor_disk_forecaster.h:73
static constexpr int k_tier_1_rows
Definition: health_monitor_disk_forecaster.h:288
bool m_first_normal_cycle
Definition: health_monitor_disk_forecaster.h:217
PSI_rwlock_key m_forecast_summary_rwlock_key
Definition: health_monitor_disk_forecaster.h:406
void set_params() final
Set collection parameters from the system variables.
Definition: health_monitor_disk_forecaster.cc:440
static constexpr int k_report_interval_seconds
Definition: health_monitor_disk_forecaster.h:255
Disk_Forecast_Buffer m_disk_forecast_buffer
Definition: health_monitor_disk_forecaster.h:191
int m_forecast_interval_seconds
Definition: health_monitor_disk_forecaster.h:250
Disk_Forecaster & operator=(const Disk_Forecaster &)=delete
std::string m_test_filename
Definition: health_monitor_disk_forecaster.h:146
bool volume_size_changed() const
Definition: health_monitor_disk_forecaster.h:302
int initialize_test()
Initialize the unit test.
Definition: health_monitor_disk_forecaster_test.cc:48
uint64_t m_volume_generation
Definition: health_monitor_disk_forecaster.h:299
std::string format_status_info() override
Definition: health_monitor_disk_forecaster.cc:509
Dfx_Run_Mode m_run_mode
Definition: health_monitor_disk_forecaster.h:143
void set_disk_metric_aggregate_buffer_size()
Set the disk metric aggregated buffer size to include rows for all 3 aggregation tiers.
Definition: health_monitor_disk_forecaster.cc:379
static constexpr int k_tier_1_days
Definition: health_monitor_disk_forecaster.h:285
bool m_dynamic_settings_changed
Definition: health_monitor_disk_forecaster.h:169
uint64_t m_last_total_mb
Definition: health_monitor_disk_forecaster.h:294
static constexpr int default_report_interval()
Definition: health_monitor_disk_forecaster.h:223
void set_volume_size_changed(bool change)
Definition: health_monitor_disk_forecaster.h:307
std::string m_configured_volume
Definition: health_monitor_disk_forecaster.h:297
int m_short_report_interval_seconds
Definition: health_monitor_disk_forecaster.h:261
static mysql_rwlock_t * model_lock()
Definition: health_monitor_disk_forecaster_core.cc:46
bool dynamic_settings_changed() override
Indicate if the dynamic Disk Forecast settings have changed.
Definition: health_monitor_disk_forecaster.cc:405
std::string format_disk_forecast(const Disk_Forecast &dfx)
Generate a human-readable log message from a Disk_Forecast value.
Definition: health_monitor_disk_forecaster_report.cc:267
std::mutex m_settings_mutex
Definition: health_monitor_disk_forecaster.h:167
Cycle_Timer m_forecast_timer
Definition: health_monitor_disk_forecaster.h:214
PSI_memory_key m_forecast_memory_key
Definition: health_monitor_disk_forecaster.h:418
Disk_Metric_Buffer m_disk_metric_buffer
Definition: health_monitor_disk_forecaster.h:189
Disk_Metric_Aggregate_Buffer m_disk_metric_aggregate_buffer
Definition: health_monitor_disk_forecaster.h:190
Dfx_Test_State
Definition: health_monitor_disk_forecaster.h:83
void advance_cycle_timers()
Advance the timers driven by the base interval.
Definition: health_monitor_disk_forecaster.cc:118
Disk_Metric_Aggregate_Buffer disk_metric_aggregate_buffer()
Definition: health_monitor_disk_forecaster.h:180
static constexpr int k_tier_3_rows
Definition: health_monitor_disk_forecaster.h:290
void pre_process() override
Issue status before starting the collection cycle.
Definition: health_monitor_disk_forecaster.cc:138
const std::string & test_state_name()
Definition: health_monitor_disk_forecaster_mode.cc:88
static const std::array< std::string, 3 > TEST_STATE_NAMES
Definition: health_monitor_disk_forecaster.h:88
std::string format_settings() override
Definition: health_monitor_disk_forecaster.cc:494
Disk_Forecaster & operator=(Disk_Forecaster &&)=delete
Disk_Forecaster(const Disk_Forecaster &)=delete
void log_resource_status() override
Collector or forecast status.
Definition: health_monitor_disk_forecaster.cc:546
static const std::array< std::string, 4 > FORECAST_STATUS_NAMES
Definition: health_monitor_disk_forecaster.h:139
const std::string & forecast_status_name(Dfx_Status status)
Definition: health_monitor_disk_forecaster_mode.cc:97
void set_disk_input_available(bool available)
Definition: health_monitor_disk_forecaster.h:111
std::string m_volume
Definition: health_monitor_disk_forecaster.h:298
void post_process() override
Issue a status message after stopping the collection cycle.
Definition: health_monitor_disk_forecaster.cc:352
Disk_Forecaster(Disk_Forecaster &&)=delete
Scoped r/w lock.
Definition: health_monitor_lock.h:50
#define PSI_DOCUMENT_ME
Definition: component_common.h:29
#define PSI_FLAG_SINGLETON
Singleton flag.
Definition: component_common.h:35
#define mysql_rwlock_destroy(T)
Definition: mysql_rwlock.h:51
unsigned int PSI_memory_key
Instrumented memory key.
Definition: psi_memory_bits.h:49
unsigned int PSI_rwlock_key
Instrumented rwlock key.
Definition: psi_rwlock_bits.h:44
#define PSI_VOLATILITY_PROVISIONING
Definition: psi_bits.h:155
#define PSI_FLAG_ONLY_GLOBAL_STAT
Global stat only flag.
Definition: psi_bits.h:112
#define log_warning(msg,...)
Definition: health_monitor_log.h:87
Definition: component_command.h:29
Dfx_Status
Definition: health_monitor_disk_bits.h:91
constexpr bool Lock_Write
Definition: health_monitor_lock.h:31
static PSI_metric_info_v1 disk_metrics[]
Definition: health_monitor_metrics.cc:1278
std::shared_ptr< Stat_Buffer< Disk_Metric_Aggregate > > Disk_Metric_Aggregate_Buffer
Definition: health_monitor_disk_bits.h:88
std::shared_ptr< Stat_Buffer< Disk_Forecast_Summary > > Disk_Forecast_Summary_Buffer
Definition: health_monitor_disk_bits.h:135
static constexpr uint64_t minutes_per_day
Definition: health_monitor_constants.h:47
static constexpr uint64_t seconds_per_day
Definition: health_monitor_constants.h:41
std::shared_ptr< Stat_Buffer< Disk_Forecast > > Disk_Forecast_Buffer
Definition: health_monitor_disk_bits.h:116
std::shared_ptr< Metric_Buffer< Disk_Metric > > Disk_Metric_Buffer
Definition: health_monitor_disk_bits.h:72
constexpr bool Lock_Read
Definition: health_monitor_lock.h:32
static constexpr uint64_t seconds_per_hour
Definition: health_monitor_constants.h:40
Define std::hash<Gtid>.
Definition: gtid.h:355
mode
Definition: file_handle.h:61
static std::mutex lock
Definition: net_ns.cc:56
required uint32 status
Definition: replication_asynchronous_connection_failover.proto:61
Holt-Winters parameters, fitted state and residual statistics.
Definition: fx_holt_winters_state.h:44
Memory instrument information.
Definition: psi_memory_bits.h:58
Rwlock information.
Definition: psi_rwlock_bits.h:162
Definition: health_monitor_disk_bits.h:118
time_t timestamp
Definition: health_monitor_disk_bits.h:119
Forecast record.
Definition: health_monitor_disk_bits.h:97
Definition: health_monitor_disk_forecaster.h:42
Disk_Forecast_Summary summary
Definition: health_monitor_disk_forecaster.h:49
uint64_t total_mb
Definition: health_monitor_disk_forecaster.h:43
double used_pct
Definition: health_monitor_disk_forecaster.h:45
std::vector< Disk_Forecast > forecasts
Definition: health_monitor_disk_forecaster.h:48
size_t metric_count
Definition: health_monitor_disk_forecaster.h:46
time_t last_forecast_time
Definition: health_monitor_disk_forecaster.h:47
uint64_t used_mb
Definition: health_monitor_disk_forecaster.h:44
Disk metric time series.
Definition: health_monitor_disk_bits.h:56
The context reset atomically discards all forecasting state, and is used when the monitored filesyste...
Definition: health_monitor_disk_forecast_reset.h:51
An instrumented rwlock structure.
Definition: mysql_rwlock_bits.h:51