9#ifndef KCENON_MONITORING_ADAPTERS_THREAD_TO_MONITORING_ADAPTER_H
10#define KCENON_MONITORING_ADAPTERS_THREAD_TO_MONITORING_ADAPTER_H
39#if !defined(MONITORING_THREAD_SYSTEM_AVAILABLE)
40# if defined(MONITORING_HAS_THREAD_SYSTEM)
41# define MONITORING_THREAD_SYSTEM_AVAILABLE 1
42# elif __has_include(<kcenon/thread/thread_pool.h>)
43# define MONITORING_THREAD_SYSTEM_AVAILABLE 1
45# define MONITORING_THREAD_SYSTEM_AVAILABLE 0
50#if MONITORING_THREAD_SYSTEM_AVAILABLE
51# include <kcenon/thread/interfaces/service_container.h>
52# if __has_include(<kcenon/common/interfaces/monitoring_interface.h>)
53# include <kcenon/common/interfaces/monitoring_interface.h>
54# define MONITORING_HAS_COMMON_INTERFACES 1
58namespace kcenon {
namespace monitoring {
63 std::chrono::milliseconds
interval{std::chrono::milliseconds{1000}};
68 :
bus_(std::move(bus)) {}
73#if MONITORING_THREAD_SYSTEM_AVAILABLE
75# if defined(MONITORING_HAS_COMMON_INTERFACES)
78 auto&
container = kcenon::thread::service_container::global();
79 auto monitorable =
container.resolve<kcenon::common::interfaces::IMonitorable>();
80 return static_cast<bool>(monitorable);
94 std::vector<metric> out;
96#if MONITORING_THREAD_SYSTEM_AVAILABLE && defined(MONITORING_HAS_COMMON_INTERFACES)
98 auto&
container = kcenon::thread::service_container::global();
99 auto monitorable =
container.resolve<kcenon::common::interfaces::IMonitorable>();
103 auto monitoring_result = monitorable->get_monitoring_data();
104 if (!monitoring_result.is_err()) {
105 const auto& snap = monitoring_result.value();
107 for (
const auto& m : snap.metrics) {
108 metric adapted{m.name, m.value, {}};
109 out.emplace_back(std::move(adapted));
118 return common::ok(std::move(out));
123#if MONITORING_THREAD_SYSTEM_AVAILABLE
125 "thread.pool.jobs_pending",
126 "thread.pool.jobs_completed",
127 "thread.pool.worker_threads"
146 worker_ = std::thread([
this, cfg]() {
152 std::this_thread::sleep_for(cfg.
interval);
172 std::shared_ptr<event_bus>
bus_;
Event containing collected metrics batch.
thread_to_monitoring_adapter(std::shared_ptr< event_bus > bus)
bool is_thread_system_available() const
std::atomic< bool > running_
common::Result< std::vector< metric > > collect_metrics()
common::VoidResult stop_collection()
~thread_to_monitoring_adapter()
std::shared_ptr< event_bus > bus_
common::VoidResult start_collection(const collection_config &cfg)
std::vector< std::string > get_metric_types() const
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::milliseconds interval