Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
kcenon::monitoring::dynamic_plugin_loader Class Reference

Concrete implementation of plugin_loader using OS dynamic loading APIs. More...

#include <plugin_loader.h>

Inheritance diagram for kcenon::monitoring::dynamic_plugin_loader:
Inheritance graph
Collaboration diagram for kcenon::monitoring::dynamic_plugin_loader:
Collaboration graph

Classes

struct  plugin_entry
 Information about a loaded plugin. More...
 

Public Member Functions

 dynamic_plugin_loader ()
 
 ~dynamic_plugin_loader () override
 
 dynamic_plugin_loader (const dynamic_plugin_loader &)=delete
 
dynamic_plugin_loaderoperator= (const dynamic_plugin_loader &)=delete
 
 dynamic_plugin_loader (dynamic_plugin_loader &&) noexcept
 
dynamic_plugin_loaderoperator= (dynamic_plugin_loader &&) noexcept
 
auto load_plugin (std::string_view path) -> std::unique_ptr< collector_plugin > override
 Load a plugin from a shared library.
 
auto unload_plugin (std::string_view plugin_name) -> bool override
 Unload a previously loaded plugin.
 
auto get_last_error () const -> plugin_load_error override
 Get the last error that occurred.
 
auto get_last_error_message () const -> std::string override
 Get detailed error message for the last error.
 
auto is_plugin_loaded (std::string_view plugin_name) const -> bool override
 Check if a plugin is currently loaded.
 
auto get_loaded_plugins () const -> std::vector< std::string > override
 Get list of loaded plugin names.
 
- Public Member Functions inherited from kcenon::monitoring::plugin_loader
virtual ~plugin_loader ()=default
 

Private Member Functions

auto load_library (std::string_view path) -> std::unique_ptr< library_handle >
 Load a library file.
 
void unload_library (std::unique_ptr< library_handle > handle)
 Unload a library.
 
template<typename T >
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.
 
void set_error (plugin_load_error error, std::string message)
 Set error state.
 

Private Attributes

std::unordered_map< std::string, plugin_entryloaded_plugins_
 
plugin_load_error last_error_ {plugin_load_error::none}
 
std::string last_error_message_
 
std::mutex mutex_
 

Detailed Description

Concrete implementation of plugin_loader using OS dynamic loading APIs.

This class uses platform-specific APIs:

  • Linux/macOS: dlopen, dlsym, dlclose
  • Windows: LoadLibrary, GetProcAddress, FreeLibrary

Thread Safety:

  • All operations are thread-safe
  • Uses internal mutex for synchronization

Definition at line 150 of file plugin_loader.h.

Constructor & Destructor Documentation

◆ dynamic_plugin_loader() [1/3]

kcenon::monitoring::dynamic_plugin_loader::dynamic_plugin_loader ( )

◆ ~dynamic_plugin_loader()

kcenon::monitoring::dynamic_plugin_loader::~dynamic_plugin_loader ( )
override

◆ dynamic_plugin_loader() [2/3]

kcenon::monitoring::dynamic_plugin_loader::dynamic_plugin_loader ( const dynamic_plugin_loader & )
delete

◆ dynamic_plugin_loader() [3/3]

kcenon::monitoring::dynamic_plugin_loader::dynamic_plugin_loader ( dynamic_plugin_loader && )
noexcept

Member Function Documentation

◆ get_last_error()

auto kcenon::monitoring::dynamic_plugin_loader::get_last_error ( ) const -> plugin_load_error
overridevirtual

Get the last error that occurred.

Returns
Error code

Implements kcenon::monitoring::plugin_loader.

◆ get_last_error_message()

auto kcenon::monitoring::dynamic_plugin_loader::get_last_error_message ( ) const -> std::string
overridevirtual

Get detailed error message for the last error.

Returns
Error message string

Implements kcenon::monitoring::plugin_loader.

◆ get_loaded_plugins()

auto kcenon::monitoring::dynamic_plugin_loader::get_loaded_plugins ( ) const -> std::vector< std::string >
overridevirtual

Get list of loaded plugin names.

Returns
Vector of plugin names

Implements kcenon::monitoring::plugin_loader.

◆ is_plugin_loaded()

auto kcenon::monitoring::dynamic_plugin_loader::is_plugin_loaded ( std::string_view plugin_name) const -> bool
overridevirtual

Check if a plugin is currently loaded.

Parameters
plugin_nameName of the plugin
Returns
True if the plugin is loaded

Implements kcenon::monitoring::plugin_loader.

◆ load_library()

auto kcenon::monitoring::dynamic_plugin_loader::load_library ( std::string_view path) -> std::unique_ptr< library_handle >
private

Load a library file.

Parameters
pathLibrary file path
Returns
Library handle or nullptr

◆ load_plugin()

auto kcenon::monitoring::dynamic_plugin_loader::load_plugin ( std::string_view path) -> std::unique_ptr< collector_plugin >
overridevirtual

Load a plugin from a shared library.

Parameters
pathPath to the plugin library (.so/.dylib/.dll)
Returns
Unique pointer to the loaded plugin, or nullptr on failure

The loader will:

  1. Load the shared library
  2. Resolve required symbols (create_plugin, etc.)
  3. Verify API version compatibility
  4. Create the plugin instance
  5. Track the plugin for cleanup

On failure, check get_last_error() for details.

Implements kcenon::monitoring::plugin_loader.

◆ operator=() [1/2]

dynamic_plugin_loader & kcenon::monitoring::dynamic_plugin_loader::operator= ( const dynamic_plugin_loader & )
delete

◆ operator=() [2/2]

dynamic_plugin_loader & kcenon::monitoring::dynamic_plugin_loader::operator= ( dynamic_plugin_loader && )
noexcept

◆ resolve_symbol()

template<typename T >
auto kcenon::monitoring::dynamic_plugin_loader::resolve_symbol ( library_handle * handle,
const char * symbol_name ) -> T
private

Resolve a symbol from a library.

Template Parameters
TFunction pointer type
Parameters
handleLibrary handle
symbol_nameSymbol name to resolve
Returns
Function pointer or nullptr

◆ set_error()

void kcenon::monitoring::dynamic_plugin_loader::set_error ( plugin_load_error error,
std::string message )
private

Set error state.

Parameters
errorError code
messageDetailed error message

◆ unload_library()

void kcenon::monitoring::dynamic_plugin_loader::unload_library ( std::unique_ptr< library_handle > handle)
private

Unload a library.

Parameters
handleLibrary handle to unload

◆ unload_plugin()

auto kcenon::monitoring::dynamic_plugin_loader::unload_plugin ( std::string_view plugin_name) -> bool
overridevirtual

Unload a previously loaded plugin.

Parameters
plugin_nameName of the plugin to unload
Returns
True if unloaded successfully

This will:

  1. Destroy the plugin instance
  2. Unload the shared library
  3. Clean up tracking data

The plugin instance must have been destroyed before calling this.

Implements kcenon::monitoring::plugin_loader.

◆ verify_api_version()

auto kcenon::monitoring::dynamic_plugin_loader::verify_api_version ( const plugin_api_metadata & metadata) const -> bool
private

Verify plugin API version compatibility.

Parameters
metadataPlugin API metadata
Returns
True if compatible

Member Data Documentation

◆ last_error_

plugin_load_error kcenon::monitoring::dynamic_plugin_loader::last_error_ {plugin_load_error::none}
private

◆ last_error_message_

std::string kcenon::monitoring::dynamic_plugin_loader::last_error_message_
private

Definition at line 238 of file plugin_loader.h.

◆ loaded_plugins_

std::unordered_map<std::string, plugin_entry> kcenon::monitoring::dynamic_plugin_loader::loaded_plugins_
private

Definition at line 234 of file plugin_loader.h.

◆ mutex_

std::mutex kcenon::monitoring::dynamic_plugin_loader::mutex_
mutableprivate

Definition at line 241 of file plugin_loader.h.


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