Thread System 0.3.1
High-performance C++20 thread pool with work stealing and DAG scheduling
Loading...
Searching...
No Matches
mock_monitoring.h
Go to the documentation of this file.
1#pragma once
2
3// BSD 3-Clause License
4// Copyright (c) 2025, 🍀☀🌕🌥 🌊
5// See the LICENSE file in the project root for full license information.
6
7#include <kcenon/common/interfaces/monitoring_interface.h>
8#include <iostream>
9#include <deque>
10#include <mutex>
11#include <thread>
12#include <atomic>
13
23class mock_monitoring : public kcenon::common::interfaces::IMonitor {
24public:
26 : active_(false)
28 , max_history_(100) {
29 }
30
32 stop();
33 }
34
35 kcenon::common::VoidResult record_metric(const std::string& name, double value) override {
36 std::lock_guard<std::mutex> lock(mutex_);
37 current_snapshot_.add_metric(name, value);
38 return kcenon::common::ok();
39 }
40
41 kcenon::common::VoidResult record_metric(
42 const std::string& name,
43 double value,
44 const std::unordered_map<std::string, std::string>& tags) override {
45 std::lock_guard<std::mutex> lock(mutex_);
46 kcenon::common::interfaces::metric_value mv(name, value);
47 mv.tags = tags;
48 current_snapshot_.metrics.push_back(mv);
49 return kcenon::common::ok();
50 }
51
52 kcenon::common::Result<kcenon::common::interfaces::metrics_snapshot> get_metrics() override {
53 std::lock_guard<std::mutex> lock(mutex_);
54 return kcenon::common::ok(current_snapshot_);
55 }
56
57 kcenon::common::Result<kcenon::common::interfaces::health_check_result> check_health() override {
58 kcenon::common::interfaces::health_check_result result;
59 result.status = active_.load()
60 ? kcenon::common::interfaces::health_status::healthy
61 : kcenon::common::interfaces::health_status::unknown;
62 result.message = active_.load() ? "Monitoring active" : "Monitoring inactive";
63 return kcenon::common::ok(result);
64 }
65
66 kcenon::common::VoidResult reset() override {
67 std::lock_guard<std::mutex> lock(mutex_);
69 history_.clear();
70 total_collections_.store(0);
71 return kcenon::common::ok();
72 }
73
74 bool is_active() const {
75 return active_.load();
76 }
77
78 void start() {
79 if (!active_.exchange(true)) {
80 std::cout << "[MockMonitoring] Started" << std::endl;
82 }
83 }
84
85 void stop() {
86 if (active_.exchange(false)) {
87 if (collection_thread_.joinable()) {
88 collection_thread_.join();
89 }
90 std::cout << "[MockMonitoring] Stopped" << std::endl;
91 }
92 }
93
95 std::uint64_t total_collections;
96 };
97
99 return {total_collections_.load()};
100 }
101
102private:
104 while (active_.load()) {
105 std::this_thread::sleep_for(std::chrono::milliseconds(500));
106
107 if (active_.load()) {
108 std::lock_guard<std::mutex> lock(mutex_);
109
110 // Store snapshot in history
111 history_.push_back(current_snapshot_);
112 if (history_.size() > max_history_) {
113 history_.pop_front();
114 }
115
116 total_collections_.fetch_add(1);
117 }
118 }
119 }
120
121private:
122 kcenon::common::interfaces::metrics_snapshot current_snapshot_;
123 std::deque<kcenon::common::interfaces::metrics_snapshot> history_;
124 mutable std::mutex mutex_;
125
126 std::atomic<bool> active_;
128 std::atomic<std::uint64_t> total_collections_;
129 const size_t max_history_;
130};
Mock monitoring implementation for demonstration.
kcenon::common::Result< kcenon::common::interfaces::health_check_result > check_health() override
const size_t max_history_
std::atomic< std::uint64_t > total_collections_
kcenon::common::Result< kcenon::common::interfaces::metrics_snapshot > get_metrics() override
std::atomic< bool > active_
std::deque< kcenon::common::interfaces::metrics_snapshot > history_
kcenon::common::VoidResult reset() override
kcenon::common::VoidResult record_metric(const std::string &name, double value, const std::unordered_map< std::string, std::string > &tags) override
kcenon::common::VoidResult record_metric(const std::string &name, double value) override
monitoring_stats get_stats() const
kcenon::common::interfaces::metrics_snapshot current_snapshot_
bool is_active() const
std::thread collection_thread_