Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
kcenon::network::integration::ObservabilityBridge Class Reference

Bridge for observability (logger + monitoring) integration implementing INetworkBridge. More...

#include <observability_bridge.h>

Inheritance diagram for kcenon::network::integration::ObservabilityBridge:
Inheritance graph
Collaboration diagram for kcenon::network::integration::ObservabilityBridge:
Collaboration graph

Public Types

enum class  BackendType { CommonSystem , Standalone }
 Type of observability backend. More...
 

Public Member Functions

 ObservabilityBridge (std::shared_ptr< logger_interface > logger, std::shared_ptr< monitoring_interface > monitor, BackendType backend_type=BackendType::Standalone)
 Construct bridge with logger and monitoring interfaces.
 
 ~ObservabilityBridge () override
 Destructor.
 
VoidResult initialize (const BridgeConfig &config) override
 Initialize the bridge with configuration.
 
VoidResult shutdown () override
 Shutdown the bridge.
 
bool is_initialized () const override
 Check if the bridge is initialized.
 
BridgeMetrics get_metrics () const override
 Get current metrics.
 
std::shared_ptr< logger_interfaceget_logger () const
 Get the logger interface.
 
std::shared_ptr< monitoring_interfaceget_monitor () const
 Get the monitoring interface.
 
BackendType get_backend_type () const
 Get the backend type.
 
- Public Member Functions inherited from kcenon::network::integration::INetworkBridge
virtual ~INetworkBridge ()=default
 

Private Attributes

std::shared_ptr< logger_interfacelogger_
 
std::shared_ptr< monitoring_interfacemonitor_
 
BackendType backend_type_
 
std::atomic< bool > initialized_ {false}
 
std::mutex metrics_mutex_
 
BridgeMetrics cached_metrics_
 
bool monitoring_enabled_ {true}
 

Detailed Description

Bridge for observability (logger + monitoring) integration implementing INetworkBridge.

This class consolidates logger and monitoring integrations into a single, unified bridge. It provides factory methods for creating bridges from different backend types.

Backend Types:

Lifecycle:

  1. Create using factory method (from_common_system) or direct constructor
  2. Call initialize() with configuration
  3. Use get_logger() and get_monitor() to access observability interfaces
  4. Call shutdown() before destruction

Thread Safety:

Definition at line 83 of file observability_bridge.h.

Member Enumeration Documentation

◆ BackendType

Type of observability backend.

Enumerator
CommonSystem 

Uses common_system's ILogger and IMonitor.

Standalone 

Uses network_system's logger_interface and monitoring_interface.

Definition at line 89 of file observability_bridge.h.

89 {
92 };
@ CommonSystem
Uses common_system's ILogger and IMonitor.
@ Standalone
Uses network_system's logger_interface and monitoring_interface.

Constructor & Destructor Documentation

◆ ObservabilityBridge()

kcenon::network::integration::ObservabilityBridge::ObservabilityBridge ( std::shared_ptr< logger_interface > logger,
std::shared_ptr< monitoring_interface > monitor,
BackendType backend_type = BackendType::Standalone )
explicit

Construct bridge with logger and monitoring interfaces.

Parameters
loggerLogger implementation
monitorMonitoring implementation
backend_typeType of backend (default: Standalone)
Exceptions
std::invalid_argumentif logger or monitor is nullptr

Example:

auto logger = std::make_shared<basic_logger>();
auto monitor = std::make_shared<basic_monitoring>();
auto bridge = std::make_shared<ObservabilityBridge>(logger, monitor);

Definition at line 10 of file observability_bridge.cpp.

14 : logger_(std::move(logger))
15 , monitor_(std::move(monitor))
16 , backend_type_(backend_type) {
17 if (!logger_) {
18 throw std::invalid_argument("ObservabilityBridge requires non-null logger");
19 }
20 if (!monitor_) {
21 throw std::invalid_argument("ObservabilityBridge requires non-null monitor");
22 }
23}
std::shared_ptr< monitoring_interface > monitor_

References logger_, and monitor_.

◆ ~ObservabilityBridge()

kcenon::network::integration::ObservabilityBridge::~ObservabilityBridge ( )
override

Destructor.

Automatically calls shutdown() if initialized

Definition at line 25 of file observability_bridge.cpp.

25 {
26 if (initialized_.load()) {
27 shutdown();
28 }
29}
VoidResult shutdown() override
Shutdown the bridge.

References initialized_, and shutdown().

Here is the call graph for this function:

Member Function Documentation

◆ get_backend_type()

ObservabilityBridge::BackendType kcenon::network::integration::ObservabilityBridge::get_backend_type ( ) const

Get the backend type.

Returns
Type of backend this bridge uses

Definition at line 142 of file observability_bridge.cpp.

142 {
143 return backend_type_;
144}

References backend_type_.

◆ get_logger()

std::shared_ptr< logger_interface > kcenon::network::integration::ObservabilityBridge::get_logger ( ) const

Get the logger interface.

Returns
Shared pointer to logger, or nullptr if not initialized

Thread Safety: Safe to call after initialization

Example:

if (auto logger = bridge->get_logger()) {
logger->log(log_level::info, "Application started");
}

Definition at line 134 of file observability_bridge.cpp.

134 {
135 return logger_;
136}

References logger_.

◆ get_metrics()

BridgeMetrics kcenon::network::integration::ObservabilityBridge::get_metrics ( ) const
overridevirtual

Get current metrics.

Returns
Bridge metrics including observability statistics

Custom Metrics:

  • "backend_type": Backend type (0=CommonSystem, 1=Standalone)
  • "monitoring_enabled": 1.0 if monitoring is enabled, 0.0 otherwise
  • "logger_available": 1.0 if logger is available, 0.0 otherwise
  • "monitor_available": 1.0 if monitor is available, 0.0 otherwise

Thread Safety: Safe to call concurrently

Implements kcenon::network::integration::INetworkBridge.

Definition at line 109 of file observability_bridge.cpp.

109 {
110 std::lock_guard<std::mutex> lock(metrics_mutex_);
111
112 if (!initialized_.load() || !logger_ || !monitor_) {
113 BridgeMetrics metrics;
114 metrics.is_healthy = false;
115 metrics.last_activity = cached_metrics_.last_activity;
116 return metrics;
117 }
118
119 // Update metrics with current state
120 BridgeMetrics metrics = cached_metrics_;
121 metrics.is_healthy = (logger_ && monitor_);
122 metrics.last_activity = std::chrono::steady_clock::now();
123 metrics.custom_metrics["backend_type"] = static_cast<double>(backend_type_);
124 metrics.custom_metrics["monitoring_enabled"] = monitoring_enabled_ ? 1.0 : 0.0;
125 metrics.custom_metrics["logger_available"] = logger_ ? 1.0 : 0.0;
126 metrics.custom_metrics["monitor_available"] = monitor_ ? 1.0 : 0.0;
127
128 // Update cached metrics for next call
129 cached_metrics_ = metrics;
130
131 return metrics;
132}
std::chrono::steady_clock::time_point last_activity
Timestamp of last activity or health check.
bool is_healthy
Overall health status of the bridge.

References backend_type_, cached_metrics_, kcenon::network::integration::BridgeMetrics::custom_metrics, initialized_, kcenon::network::integration::BridgeMetrics::is_healthy, kcenon::network::integration::BridgeMetrics::last_activity, logger_, metrics_mutex_, monitor_, and monitoring_enabled_.

◆ get_monitor()

std::shared_ptr< monitoring_interface > kcenon::network::integration::ObservabilityBridge::get_monitor ( ) const

Get the monitoring interface.

Returns
Shared pointer to monitoring interface, or nullptr if not initialized

Thread Safety: Safe to call after initialization

Example:

if (auto monitor = bridge->get_monitor()) {
monitor->report_counter("requests_total", 1);
}

Definition at line 138 of file observability_bridge.cpp.

138 {
139 return monitor_;
140}

References monitor_.

◆ initialize()

VoidResult kcenon::network::integration::ObservabilityBridge::initialize ( const BridgeConfig & config)
overridevirtual

Initialize the bridge with configuration.

Parameters
configConfiguration parameters
Returns
ok() on success, error_info on failure

Configuration Properties:

  • "enabled": "true" or "false" (default: "true")
  • "log_level": Minimum log level (informational)
  • "enable_monitoring": Enable/disable monitoring (default: "true")

Error Conditions:

  • Already initialized
  • Logger or monitor is null
  • Invalid configuration

Example:

config.integration_name = "common_system";
config.properties["log_level"] = "info";
config.properties["enable_monitoring"] = "true";
auto result = bridge->initialize(config);
if (result.is_err()) {
std::cerr << "Init failed: " << result.error().message << std::endl;
}
tracing_config config
Definition exporters.cpp:29
Configuration for bridge initialization.

Implements kcenon::network::integration::INetworkBridge.

Definition at line 31 of file observability_bridge.cpp.

31 {
32 if (initialized_.load()) {
33 return error_void(
35 "ObservabilityBridge already initialized",
36 "ObservabilityBridge::initialize");
37 }
38
39 if (!logger_) {
40 return error_void(
42 "Logger is null",
43 "ObservabilityBridge::initialize");
44 }
45
46 if (!monitor_) {
47 return error_void(
49 "Monitor is null",
50 "ObservabilityBridge::initialize");
51 }
52
53 // Check if bridge is enabled (default: true)
54 auto enabled_it = config.properties.find("enabled");
55 if (enabled_it != config.properties.end() && enabled_it->second == "false") {
56 return error_void(
58 "Bridge is disabled in configuration",
59 "ObservabilityBridge::initialize");
60 }
61
62 // Check if monitoring is enabled (default: true)
63 auto monitoring_enabled_it = config.properties.find("enable_monitoring");
64 monitoring_enabled_ = (monitoring_enabled_it == config.properties.end() ||
65 monitoring_enabled_it->second != "false");
66
67 // Initialize metrics
68 std::lock_guard<std::mutex> lock(metrics_mutex_);
70 cached_metrics_.last_activity = std::chrono::steady_clock::now();
71 cached_metrics_.custom_metrics["backend_type"] = static_cast<double>(backend_type_);
72 cached_metrics_.custom_metrics["monitoring_enabled"] = monitoring_enabled_ ? 1.0 : 0.0;
73 cached_metrics_.custom_metrics["logger_available"] = logger_ ? 1.0 : 0.0;
74 cached_metrics_.custom_metrics["monitor_available"] = monitor_ ? 1.0 : 0.0;
75
76 initialized_.store(true);
77 return ok();
78}
VoidResult error_void(int code, const std::string &message, const std::string &source="network_system", const std::string &details="")
VoidResult ok()
std::map< std::string, double > custom_metrics
Bridge-specific custom metrics.

References kcenon::network::error_codes::common_errors::already_exists, backend_type_, cached_metrics_, config, kcenon::network::integration::BridgeMetrics::custom_metrics, kcenon::network::error_void(), initialized_, kcenon::network::error_codes::common_errors::invalid_argument, kcenon::network::integration::BridgeMetrics::is_healthy, kcenon::network::integration::BridgeMetrics::last_activity, logger_, metrics_mutex_, monitor_, monitoring_enabled_, and kcenon::network::ok().

Here is the call graph for this function:

◆ is_initialized()

bool kcenon::network::integration::ObservabilityBridge::is_initialized ( ) const
overridevirtual

Check if the bridge is initialized.

Returns
true if initialized and ready, false otherwise

Implements kcenon::network::integration::INetworkBridge.

Definition at line 105 of file observability_bridge.cpp.

105 {
106 return initialized_.load() && logger_ && monitor_;
107}

References initialized_, logger_, and monitor_.

◆ shutdown()

VoidResult kcenon::network::integration::ObservabilityBridge::shutdown ( )
overridevirtual

Shutdown the bridge.

Returns
ok() on success, error_info on failure

Shuts down the bridge and flushes any buffered logs. Logger and monitor lifecycle is managed externally.

This method is idempotent - multiple calls are safe.

Implements kcenon::network::integration::INetworkBridge.

Definition at line 80 of file observability_bridge.cpp.

80 {
81 if (!initialized_.load()) {
82 return ok(); // Idempotent: already shut down
83 }
84
85 // Flush logger before shutdown
86 if (logger_) {
87 try {
88 logger_->flush();
89 } catch (...) {
90 // Ignore flush errors during shutdown
91 }
92 }
93
94 // Update metrics to reflect shutdown state
95 {
96 std::lock_guard<std::mutex> lock(metrics_mutex_);
98 cached_metrics_.last_activity = std::chrono::steady_clock::now();
99 }
100
101 initialized_.store(false);
102 return ok();
103}

References cached_metrics_, initialized_, kcenon::network::integration::BridgeMetrics::is_healthy, kcenon::network::integration::BridgeMetrics::last_activity, logger_, metrics_mutex_, and kcenon::network::ok().

Referenced by ~ObservabilityBridge().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ backend_type_

BackendType kcenon::network::integration::ObservabilityBridge::backend_type_
private

Definition at line 252 of file observability_bridge.h.

Referenced by get_backend_type(), get_metrics(), and initialize().

◆ cached_metrics_

BridgeMetrics kcenon::network::integration::ObservabilityBridge::cached_metrics_
mutableprivate

Definition at line 255 of file observability_bridge.h.

Referenced by get_metrics(), initialize(), and shutdown().

◆ initialized_

std::atomic<bool> kcenon::network::integration::ObservabilityBridge::initialized_ {false}
private

Definition at line 253 of file observability_bridge.h.

253{false};

Referenced by get_metrics(), initialize(), is_initialized(), shutdown(), and ~ObservabilityBridge().

◆ logger_

std::shared_ptr<logger_interface> kcenon::network::integration::ObservabilityBridge::logger_
private

◆ metrics_mutex_

std::mutex kcenon::network::integration::ObservabilityBridge::metrics_mutex_
mutableprivate

Definition at line 254 of file observability_bridge.h.

Referenced by get_metrics(), initialize(), and shutdown().

◆ monitor_

std::shared_ptr<monitoring_interface> kcenon::network::integration::ObservabilityBridge::monitor_
private

◆ monitoring_enabled_

bool kcenon::network::integration::ObservabilityBridge::monitoring_enabled_ {true}
private

Definition at line 256 of file observability_bridge.h.

256{true};

Referenced by get_metrics(), and initialize().


The documentation for this class was generated from the following files: