Packages
kreuzberg
4.2.3
4.10.2
4.10.1
4.10.0
4.9.9
4.9.7
4.9.5
4.9.4
4.9.3
4.9.2
4.9.1
4.8.6
4.8.5
4.8.4
4.8.3
4.8.2
4.8.1
4.8.0
4.7.4
4.7.3
4.7.2
4.7.1
4.7.0
4.6.3
4.6.2
4.6.1
4.6.0
4.5.4
4.5.3
4.5.2
4.5.1
4.4.6
4.4.5
4.4.4
4.4.3
4.4.2
4.4.1
4.4.0
4.3.8
4.3.7
4.3.6
4.3.5
4.3.4
4.3.3
4.3.2
4.3.0
4.2.15
4.2.14
4.2.13
4.2.12
4.2.11
4.2.10
4.2.9
4.2.8
4.2.7
4.2.6
4.2.5
4.2.4
4.2.3
4.2.2
4.2.1
4.2.0
4.1.2
4.1.1
4.1.0
4.0.8
4.0.7
4.0.6
4.0.4
4.0.3
4.0.2
4.0.1
4.0.0
4.0.0-rc.27
4.0.0-rc.26
High-performance document intelligence library with OCR support
Current section
Files
Jump to
Current section
Files
lib/kreuzberg/plugin/supervisor.ex
defmodule Kreuzberg.Plugin.Supervisor do
@moduledoc """
OTP Supervisor for the Kreuzberg plugin system.
This supervisor manages the plugin system's core components, specifically
the Registry GenServer that maintains the registry of loaded plugins.
## Supervision Strategy
Uses a `:one_for_one` strategy, meaning if the Registry process terminates,
only that process will be restarted, not the entire supervision tree.
## Usage
The supervisor is typically started automatically as part of the Kreuzberg
application supervision tree. To start it manually:
{:ok, pid} = Kreuzberg.Plugin.Supervisor.start_link([])
## Children
- `Kreuzberg.Plugin.Registry` - GenServer managing plugin registration and lookup
"""
use Supervisor
@doc """
Start the plugin supervisor.
## Options
* `:name` - Registered process name (defaults to module name)
## Returns
* `{:ok, pid()}` - Successfully started
* `{:error, reason}` - Failed to start
"""
@spec start_link(keyword()) :: Supervisor.on_start()
def start_link(opts) do
Supervisor.start_link(__MODULE__, opts, name: Keyword.get(opts, :name, __MODULE__))
end
@doc """
Return the supervisor child specification.
This is useful for including the plugin supervisor in a parent supervision tree.
## Returns
* Child specification map
"""
@spec child_spec(keyword()) :: Supervisor.child_spec()
def child_spec(opts) do
%{
id: __MODULE__,
start: {__MODULE__, :start_link, [opts]},
type: :supervisor
}
end
@impl true
def init(_opts) do
children = [
{Kreuzberg.Plugin.Registry, [name: Kreuzberg.Plugin.Registry]}
]
Supervisor.init(children, strategy: :one_for_one)
end
end