26 {
27 std::cout << "=== Collector Factory Example ===" << std::endl;
28
29 try {
30
31 std::cout << "\n1. Getting factory singleton instance..." << std::endl;
32
35
36 std::cout << " Factory instance obtained" << std::endl;
37 std::cout << " Same instance: " << (&factory == &factory2 ? "Yes" : "No") << std::endl;
38
39
40 std::cout << "\n2. Listing registered collectors..." << std::endl;
41
42 auto registered = factory.get_registered_collectors();
43 std::cout << " Registered collectors (" << registered.size() << "):" << std::endl;
44 for (const auto& name : registered) {
45 std::cout << " - " << name << std::endl;
46 }
47
48
49 std::cout << "\n3. Checking specific collector registration..." << std::endl;
50
51 std::vector<std::string> check_collectors = {
52 "system_resource_collector",
53 "network_metrics_collector",
54 "process_metrics_collector",
55 "platform_metrics_collector",
56 "nonexistent_collector"
57 };
58
59 for (const auto& name : check_collectors) {
60 bool is_reg = factory.is_registered(name);
61 std::cout << " " << name << ": " << (is_reg ? "Registered" : "Not registered") << std::endl;
62 }
63
64
65 std::cout << "\n4. Creating collectors with configuration..." << std::endl;
66
67
69 {"collect_cpu", "true"},
70 {"collect_memory", "true"}
71 };
72
73 auto sys_result = factory.create("system_resource_collector", sys_config);
74 if (sys_result) {
75 std::cout << " ✓ Created: " << sys_result.collector->get_name() << std::endl;
76 std::cout << " Health: " << (sys_result.collector->is_healthy() ? "OK" : "UNHEALTHY") << std::endl;
77
78 auto metric_types = sys_result.collector->get_metric_types();
79 std::cout << " Metric types: " << metric_types.size() << std::endl;
80 } else {
81 std::cout << " ✗ Failed: " << sys_result.error_message << std::endl;
82 }
83
84
85 std::cout << "\n5. Dynamic collector instantiation..." << std::endl;
86
87 std::vector<std::string> to_create = {
88 "network_metrics_collector",
89 "process_metrics_collector",
90 "platform_metrics_collector"
91 };
92
93 std::vector<std::unique_ptr<collector_interface>> collectors;
94
95 for (const auto& name : to_create) {
96 auto result = factory.create(name);
97 if (result) {
98 std::cout << " ✓ Created: " << result.collector->get_name() << std::endl;
99 collectors.push_back(std::move(result.collector));
100 } else {
101 std::cout << " ✗ Failed: " << name << " - " << result.error_message << std::endl;
102 }
103 }
104
105 std::cout << " Total collectors created: " << collectors.size() << std::endl;
106
107
108 std::cout << "\n6. Attempting to create non-existent collector..." << std::endl;
109
110 auto invalid_result = factory.create("nonexistent_collector");
111 if (!invalid_result) {
112 std::cout << " Expected failure: " << invalid_result.error_message << std::endl;
113 }
114
115 std::cout << "\n=== Example completed successfully ===" << std::endl;
116
117 } catch (const std::exception& e) {
118 std::cerr << "Exception: " << e.what() << std::endl;
119 return 1;
120 }
121
122 return 0;
123}
static metric_factory & instance()
Get the singleton instance.
std::unordered_map< std::string, std::string > config_map
Type alias for configuration map.