43 std::cout <<
"\n=== System Resource Metrics ===" << std::endl;
46 std::cout <<
"CPU:" << std::endl;
47 std::cout <<
" Usage: " << std::fixed << std::setprecision(2)
49 std::cout <<
" User: " << resources.
cpu.
user_percent <<
"%" << std::endl;
51 std::cout <<
" Idle: " << resources.
cpu.
idle_percent <<
"%" << std::endl;
52 std::cout <<
" Core Count: " << resources.
cpu.
count << std::endl;
53 std::cout <<
" Load Average: "
59 std::cout <<
"\nMemory:" << std::endl;
60 std::cout <<
" Total: " << (resources.
memory.
total_bytes / (1024.0 * 1024.0 * 1024.0))
61 <<
" GB" << std::endl;
62 std::cout <<
" Used: " << (resources.
memory.
used_bytes / (1024.0 * 1024.0 * 1024.0))
65 <<
" GB" << std::endl;
70 std::cout <<
"\nDisk:" << std::endl;
71 std::cout <<
" Total: " << (resources.
disk.
total_bytes / (1024.0 * 1024.0 * 1024.0))
72 <<
" GB" << std::endl;
73 std::cout <<
" Used: " << (resources.
disk.
used_bytes / (1024.0 * 1024.0 * 1024.0))
81 std::cout <<
"\nNetwork:" << std::endl;
92 std::cout <<
"\nProcess:" << std::endl;
93 std::cout <<
" Count: " << resources.
process.
count << std::endl;
99 std::cout <<
"\nContext Switches:" << std::endl;
141 std::cout <<
"=== System Collectors Example ===" << std::endl;
145 std::cout <<
"\n1. Creating system_resource_collector..." << std::endl;
155 sys_config.
interval = std::chrono::milliseconds(1000);
160 std::unordered_map<std::string, std::string> init_config;
162 std::cerr <<
"Failed to initialize system_resource_collector" << std::endl;
166 std::cout <<
" Initialized: " << sys_collector.
get_name() << std::endl;
167 std::cout <<
" Health: " << (sys_collector.
is_healthy() ?
"OK" :
"UNHEALTHY") << std::endl;
170 std::cout <<
"\n2. Creating network_metrics_collector..." << std::endl;
174 std::cerr <<
"Failed to initialize network_metrics_collector" << std::endl;
178 std::cout <<
" Initialized: " << net_collector.
name() << std::endl;
179 std::cout <<
" Health: " << (net_collector.
is_available() ?
"OK" :
"UNHEALTHY") << std::endl;
182 std::cout <<
"\n3. Creating process_metrics_collector..." << std::endl;
185 if (!proc_collector.
initialize(init_config)) {
186 std::cerr <<
"Failed to initialize process_metrics_collector" << std::endl;
190 std::cout <<
" Initialized: " << proc_collector.
name() << std::endl;
191 std::cout <<
" Health: " << (proc_collector.
is_available() ?
"OK" :
"UNHEALTHY") << std::endl;
193#ifdef THREAD_SYSTEM_AVAILABLE
195 std::cout <<
"\n4. Creating thread_system_collector..." << std::endl;
197 thread_system_collector thread_collector;
198 if (!thread_collector.initialize(init_config)) {
199 std::cerr <<
"Failed to initialize thread_system_collector" << std::endl;
203 std::cout <<
" Initialized: " << thread_collector.name() << std::endl;
204 std::cout <<
" Health: " << (thread_collector.is_available() ?
"OK" :
"UNHEALTHY") << std::endl;
206 std::cout <<
"\n4. thread_system_collector not available (THREAD_SYSTEM_AVAILABLE not defined)" << std::endl;
209#ifdef LOGGER_SYSTEM_AVAILABLE
211 std::cout <<
"\n5. Creating logger_system_collector..." << std::endl;
213 logger_system_collector logger_collector;
214 if (!logger_collector.initialize(init_config)) {
215 std::cerr <<
"Failed to initialize logger_system_collector" << std::endl;
219 std::cout <<
" Initialized: " << logger_collector.name() << std::endl;
220 std::cout <<
" Health: " << (logger_collector.is_available() ?
"OK" :
"UNHEALTHY") << std::endl;
222 std::cout <<
"\n5. logger_system_collector not available (LOGGER_SYSTEM_AVAILABLE not defined)" << std::endl;
226 std::cout <<
"\n6. Demonstrating collector lifecycle (3 iterations)..." << std::endl;
228 for (
int i = 0; i < 3; ++i) {
229 std::cout <<
"\n--- Iteration " << (i + 1) <<
"/3 ---" << std::endl;
232 auto sys_metrics = sys_collector.
collect();
233 std::cout <<
"System metrics collected: " << sys_metrics.size() << std::endl;
240 auto net_metrics = net_collector.
collect();
241 std::cout <<
"Network metrics collected: " << net_metrics.size() << std::endl;
245 auto proc_metrics = proc_collector.
collect();
246 std::cout <<
"Process metrics collected: " << proc_metrics.size() << std::endl;
249#ifdef THREAD_SYSTEM_AVAILABLE
251 auto thread_metrics = thread_collector.collect();
252 std::cout <<
"Thread system metrics collected: " << thread_metrics.size() << std::endl;
255#ifdef LOGGER_SYSTEM_AVAILABLE
257 auto logger_metrics = logger_collector.collect();
258 std::cout <<
"Logger system metrics collected: " << logger_metrics.size() << std::endl;
263 std::cout <<
"\nWaiting 2 seconds before next collection..." << std::endl;
264 std::this_thread::sleep_for(2s);
269 std::cout <<
"\n7. Collector Statistics:" << std::endl;
272 std::cout <<
"\nSystem Resource Collector:" << std::endl;
273 for (
const auto& [key, value] : sys_stats) {
274 std::cout <<
" " << key <<
": " << value << std::endl;
278 std::cout <<
"\nNetwork Metrics Collector:" << std::endl;
279 for (
const auto& [key, value] : net_stats) {
280 std::cout <<
" " << key <<
": " << value << std::endl;
284 std::cout <<
"\nProcess Metrics Collector:" << std::endl;
285 for (
const auto& [key, value] : proc_stats) {
286 std::cout <<
" " << key <<
": " << value << std::endl;
291 std::cout <<
"\n8. Load Average History:" << std::endl;
294 std::cout <<
" Total samples: " << load_history.size() << std::endl;
296 if (!load_history.empty()) {
299 std::cout <<
" 5-min avg: " << load_stats.load_5m_stats.avg << std::endl;
300 std::cout <<
" 15-min avg: " << load_stats.load_15m_stats.avg << std::endl;
304 std::cout <<
"\n=== Example completed successfully ===" << std::endl;
306 }
catch (
const std::exception& e) {
307 std::cerr <<
"Exception: " << e.what() << std::endl;