33int main(
int argc,
char* argv[]) {
35 std::cerr <<
"Usage: " << argv[0] <<
" <plugin_path>\n";
36 std::cerr <<
"Example: " << argv[0] <<
" ./libexample_plugin.so\n";
40 std::string plugin_path = argv[1];
42 std::cout <<
"=== Dynamic Plugin Loading Example ===\n\n";
48 std::cout <<
"Loading plugin from: " << plugin_path <<
"\n";
49 if (!registry.load_plugin(plugin_path)) {
50 std::cerr <<
"Failed to load plugin: "
51 << registry.get_plugin_loader_error() <<
"\n";
54 std::cout <<
"Plugin loaded successfully\n\n";
57 auto* plugin = registry.get_plugin(
"example_plugin");
59 std::cerr <<
"Plugin not found in registry\n";
64 auto metadata = plugin->get_metadata();
65 std::cout <<
"Plugin Metadata:\n";
66 std::cout <<
" Name: " << plugin->name() <<
"\n";
67 std::cout <<
" Description: " << metadata.description <<
"\n";
68 std::cout <<
" Version: " << metadata.version <<
"\n";
69 std::cout <<
" Available: " << (plugin->is_available() ?
"yes" :
"no") <<
"\n\n";
72 std::cout <<
"Initializing plugin...\n";
74 if (!plugin->initialize(config)) {
75 std::cerr <<
"Failed to initialize plugin\n";
78 std::cout <<
"Plugin initialized\n\n";
81 std::cout <<
"Collecting metrics (5 iterations)...\n";
82 for (
int i = 0; i < 5; ++i) {
83 std::cout <<
"\nIteration " << (i + 1) <<
":\n";
85 auto metrics = plugin->collect();
86 for (
const auto&
metric : metrics) {
90 if (!
metric.labels.empty()) {
93 for (
const auto& [key, value] :
metric.labels) {
94 if (!first) std::cout <<
", ";
95 std::cout << key <<
"=" << value;
105 std::this_thread::sleep_for(std::chrono::seconds(1));
110 std::cout <<
"\nShutting down plugin...\n";
113 std::cout <<
"Unloading plugin...\n";
114 if (!registry.unload_plugin(
"example_plugin")) {
115 std::cerr <<
"Failed to unload plugin\n";
118 std::cout <<
"Plugin unloaded successfully\n";
120 std::cout <<
"\n=== Example Complete ===\n";