Raxol.Core.Runtime.Plugins.PluginManager (Raxol Core v2.4.0)

Copy Markdown View Source

Facade for plugin management operations.

This module provides a unified API that delegates to specialized modules:

  • PluginRegistry - Fast ETS-backed lookups (no process serialization)
  • PluginLifecycle - GenServer for coordination (load, enable, state)

Architecture

Following Rich Hickey's principle of separating data from coordination:

PluginManager (Facade)
     |
     +-- PluginRegistry (Pure + ETS)
     |   - Plugin registration
     |   - Metadata storage
     |   - Command lookups
     |   - Fast concurrent reads
     |
     +-- PluginLifecycle (GenServer)
         - Load/unload coordination
         - Enable/disable state
         - Runtime plugin state
         - File watching/hot reload

Migration Note

This module maintains backward compatibility with the old API. New code should use:

  • PluginRegistry for lookups (faster, no process call)
  • PluginLifecycle for lifecycle operations

Usage

# Load a plugin
PluginManager.load_plugin_by_module(MyPlugin, %{config: "value"})

# List plugins (fast ETS lookup)
PluginManager.list_plugins()

# Enable/disable
PluginManager.enable_plugin(:my_plugin)
PluginManager.disable_plugin(:my_plugin)

Summary

Functions

Calls a hook on a plugin.

Calls a hook on a plugin (legacy signature with pid).

Disables a plugin.

Enables a plugin.

Gets list of loaded plugin IDs.

Gets list of loaded plugin IDs (legacy signature with pid).

Gets a plugin by ID.

Gets plugin configuration.

Gets plugin configuration (legacy signature with pid).

Gets the runtime state of a plugin.

Initializes the plugin manager.

Initializes a specific plugin.

Initializes a specific plugin (legacy signature with pid).

Initializes with configuration.

Lists all registered plugins.

Loads a plugin by ID.

Loads a plugin with config (legacy signature).

Loads a plugin by module with optional configuration.

Checks if a plugin is loaded.

Checks if a plugin is loaded (legacy signature with pid).

Reloads a plugin.

Sets the runtime state of a plugin.

Starts the plugin management system.

Unloads a plugin.

Unloads a plugin (legacy signature with pid).

Updates a plugin entry using a function.

Updates plugin configuration.

Updates plugin configuration (legacy signature with pid).

Validates plugin configuration.

Types

plugin_id()

@type plugin_id() :: atom() | String.t()

plugin_metadata()

@type plugin_metadata() :: map()

plugin_state()

@type plugin_state() :: map()

Functions

call_hook(plugin_id, hook_name, args)

Calls a hook on a plugin.

call_hook(pid, plugin_id, hook_name, args)

Calls a hook on a plugin (legacy signature with pid).

child_spec(opts)

disable_plugin(plugin_id)

Disables a plugin.

enable_plugin(plugin_id)

Enables a plugin.

get_loaded_plugins()

Gets list of loaded plugin IDs.

get_loaded_plugins(pid)

Gets list of loaded plugin IDs (legacy signature with pid).

get_plugin(plugin_id)

Gets a plugin by ID.

Fast ETS lookup.

get_plugin_config(plugin_id)

Gets plugin configuration.

get_plugin_config(pid, plugin_id)

Gets plugin configuration (legacy signature with pid).

get_plugin_state(plugin_id)

Gets the runtime state of a plugin.

initialize()

Initializes the plugin manager.

initialize_plugin(plugin_id, config)

Initializes a specific plugin.

initialize_plugin(pid, plugin_id, config)

Initializes a specific plugin (legacy signature with pid).

initialize_with_config(config)

Initializes with configuration.

list_plugins()

Lists all registered plugins.

This is a fast ETS lookup - no GenServer call required.

load_plugin(plugin_id)

Loads a plugin by ID.

load_plugin(plugin_id, config)

Loads a plugin with config (legacy signature).

load_plugin_by_module(module, config \\ %{})

Loads a plugin by module with optional configuration.

plugin_loaded?(plugin_id)

Checks if a plugin is loaded.

plugin_loaded?(pid, plugin_id)

Checks if a plugin is loaded (legacy signature with pid).

reload_plugin(plugin_id)

Reloads a plugin.

set_plugin_state(plugin_id, state)

Sets the runtime state of a plugin.

start_link(opts \\ [])

Starts the plugin management system.

Initializes both the registry and lifecycle manager.

unload_plugin(plugin_id)

Unloads a plugin.

unload_plugin(pid, plugin_id)

Unloads a plugin (legacy signature with pid).

update_plugin(plugin_id, update_fun)

Updates a plugin entry using a function.

update_plugin_config(plugin_id, config)

Updates plugin configuration.

update_plugin_config(pid, plugin_id, config)

Updates plugin configuration (legacy signature with pid).

validate_plugin_config(plugin_id, config)

Validates plugin configuration.