Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
logger_to_monitoring_adapter.h
Go to the documentation of this file.
1
7#pragma once
8
9#ifndef KCENON_MONITORING_ADAPTERS_LOGGER_TO_MONITORING_ADAPTER_H
10#define KCENON_MONITORING_ADAPTERS_LOGGER_TO_MONITORING_ADAPTER_H
11
12// BSD 3-Clause License
13// Copyright (c) 2025, 🍀☀🌕🌥 🌊
14// See the LICENSE file in the project root for full license information.
15
16
17// Module description:
18// Logger system adapter for monitoring_system (Phase 2.3.3).
19// Uses common_system interfaces for logger integration via dependency injection.
20// No direct dependency on logger_system - works with any ILogger implementation.
21
22#include <atomic>
23#include <chrono>
24#include <memory>
25#include <optional>
26#include <string>
27#include <thread>
28#include <vector>
29
30#include "../core/event_bus.h"
31#include "../core/event_types.h"
34
35// Use common_system interfaces for logger integration (Phase 2.3.3)
36#include <kcenon/common/interfaces/logger_interface.h>
37#include <kcenon/common/interfaces/monitoring_interface.h>
38
39namespace kcenon { namespace monitoring {
40
49public:
56 std::shared_ptr<event_bus> bus,
57 std::shared_ptr<common::interfaces::ILogger> logger = nullptr
58 ) : bus_(std::move(bus)), logger_(std::move(logger)) {}
59
64 return logger_ != nullptr;
65 }
66
71 void set_logger(std::shared_ptr<common::interfaces::ILogger> logger) {
72 logger_ = std::move(logger);
73 }
74
78 std::shared_ptr<common::interfaces::ILogger> get_logger() const {
79 return logger_;
80 }
81
85 common::Result<std::vector<metric>> collect_metrics() {
86 std::vector<metric> out;
87 if (logger_) {
88 // If logger implements IMonitorable, collect its metrics
89 auto monitorable = std::dynamic_pointer_cast<common::interfaces::IMonitorable>(logger_);
90 if (monitorable) {
91 auto metrics_result = monitorable->get_monitoring_data();
92 if (metrics_result.is_ok()) {
93 const auto& snapshot = metrics_result.value();
94 // Convert to monitoring_system metric format
95 for (const auto& m : snapshot.metrics) {
96 metric converted;
97 converted.name = m.name;
98 converted.value = m.value;
99 converted.timestamp = m.timestamp;
100 out.push_back(converted);
101 }
102 }
103 }
104 }
105 return common::ok(std::move(out));
106 }
107
111 common::VoidResult register_logger(const std::string& /*name*/) {
112 // Logger is now provided via DI, not registered by name
113 return common::ok();
114 }
115
119 double get_current_log_rate() const {
120 if (logger_) {
121 auto monitorable = std::dynamic_pointer_cast<common::interfaces::IMonitorable>(logger_);
122 if (monitorable) {
123 auto metrics_result = monitorable->get_monitoring_data();
124 if (metrics_result.is_ok()) {
125 const auto& snapshot = metrics_result.value();
126 for (const auto& m : snapshot.metrics) {
127 if (m.name.find("messages_logged") != std::string::npos ||
128 m.name.find("log_rate") != std::string::npos) {
129 return m.value;
130 }
131 }
132 }
133 }
134 }
135 return 0.0;
136 }
137
138private:
139 std::shared_ptr<event_bus> bus_;
140 std::shared_ptr<common::interfaces::ILogger> logger_; // Phase 2.3.3
141};
142
143} } // namespace kcenon::monitoring
144
145#endif // KCENON_MONITORING_ADAPTERS_LOGGER_TO_MONITORING_ADAPTER_H
146
Logger system adapter using dependency injection (Phase 2.3.3)
void set_logger(std::shared_ptr< common::interfaces::ILogger > logger)
Set or replace the logger instance.
common::Result< std::vector< metric > > collect_metrics()
Collect metrics from logger if available (Phase 2.3.3)
common::VoidResult register_logger(const std::string &)
Register a logger instance by name.
std::shared_ptr< common::interfaces::ILogger > logger_
logger_to_monitoring_adapter(std::shared_ptr< event_bus > bus, std::shared_ptr< common::interfaces::ILogger > logger=nullptr)
Constructor with optional logger injection.
bool is_logger_system_available() const
Check if logger is available.
double get_current_log_rate() const
Get current log rate (if logger supports metrics)
std::shared_ptr< common::interfaces::ILogger > get_logger() const
Get the current logger instance.
Lightweight event bus implementation for monitoring system.
Common event type definitions for monitoring system.
Adapter for metric types to support interface definitions.
Result pattern type definitions for monitoring system.
Basic metric structure for interface compatibility.
std::chrono::system_clock::time_point timestamp
std::variant< double, int64_t, std::string > value