40#include <unordered_map>
96 -> std::unique_ptr<collector_plugin> = 0;
201 auto load_library(std::string_view path) -> std::unique_ptr<library_handle>;
216 template <
typename T>
Pure virtual interface for metric collector plugins.
Concrete implementation of plugin_loader using OS dynamic loading APIs.
std::unordered_map< std::string, plugin_entry > loaded_plugins_
dynamic_plugin_loader(dynamic_plugin_loader &&) noexcept
void set_error(plugin_load_error error, std::string message)
Set error state.
auto load_library(std::string_view path) -> std::unique_ptr< library_handle >
Load a library file.
std::string last_error_message_
dynamic_plugin_loader & operator=(const dynamic_plugin_loader &)=delete
void unload_library(std::unique_ptr< library_handle > handle)
Unload a library.
dynamic_plugin_loader(const dynamic_plugin_loader &)=delete
~dynamic_plugin_loader() override
auto resolve_symbol(library_handle *handle, const char *symbol_name) -> T
Resolve a symbol from a library.
auto verify_api_version(const plugin_api_metadata &metadata) const -> bool
Verify plugin API version compatibility.
Abstract interface for plugin loading.
virtual auto get_loaded_plugins() const -> std::vector< std::string >=0
Get list of loaded plugin names.
virtual auto get_last_error() const -> plugin_load_error=0
Get the last error that occurred.
virtual auto is_plugin_loaded(std::string_view plugin_name) const -> bool=0
Check if a plugin is currently loaded.
virtual auto unload_plugin(std::string_view plugin_name) -> bool=0
Unload a previously loaded plugin.
virtual auto get_last_error_message() const -> std::string=0
Get detailed error message for the last error.
virtual auto load_plugin(std::string_view path) -> std::unique_ptr< collector_plugin >=0
Load a plugin from a shared library.
virtual ~plugin_loader()=default
Plugin interface for metric collectors.
@ none
Not in a cgroup or not Linux.
auto to_string(plugin_load_error error) -> std::string
Convert plugin_load_error to string.
plugin_load_error
Error codes for plugin loading operations.
@ incompatible_api_version
C API for dynamically loaded collector plugins.
void(* destroy_plugin_fn)(kcenon::monitoring::collector_plugin *plugin)
Destroy a plugin instance.
Information about a loaded plugin.
std::unique_ptr< library_handle > handle
plugin_api_metadata metadata
destroy_plugin_fn destroy_fn
Opaque handle to a loaded library.