Documentation
¶
Index ¶
- Constants
- Variables
- func Deserializer(data []byte, v any) error
- func ExecutePluginGeneric[T any, R any](m *Manager, name string, data T) (R, error)
- func LoadConfig(filename string, pluginDir ...string) (*config, error)
- func NewConfig(filename string) *config
- func Serializer(data any) ([]byte, error)
- type Event
- type EventData
- type EventHandler
- type ISandbox
- type Logger
- type Manager
- func (m *Manager) ConfigUpdated(name string, config any) ([]byte, error)
- func (m *Manager) DeployRepository(repo *PluginRepository, localPath string) error
- func (m *Manager) DisablePlugin(name string) error
- func (m *Manager) EnablePlugin(name string) error
- func (m *Manager) ExecutePlugin(name string, data any) (any, error)
- func (m *Manager) ExecutePluginInt(name string, data any) (int, error)
- func (m *Manager) ExecutePluginString(name string, data any) (string, error)
- func (m *Manager) GetEventBus() *eventBus
- func (m *Manager) GetPluginConfig(name string) (*PluginData, error)
- func (m *Manager) GetPluginMarket() *PluginMarket
- func (m *Manager) GetPluginStats(name string) (*PluginStats, error)
- func (m *Manager) GetVersionManager() *VersionManager
- func (m *Manager) HasPermission(pluginName, action string) bool
- func (m *Manager) HotReload(name string, path string) error
- func (m *Manager) HotUpdatePlugin(name, newVersion string) error
- func (m *Manager) InstallPlugin(name, version string) error
- func (m *Manager) ListAvailablePlugins() []PluginInfo
- func (m *Manager) ListPlugins() []string
- func (m *Manager) LoadEnabledPlugins(pluginDir string) error
- func (m *Manager) LoadPlugin(path string) error
- func (m *Manager) LoadPluginPermissions(permissions map[string]*PluginPermission)
- func (m *Manager) LoadPluginWithData(path string, data ...any) error
- func (m *Manager) PreloadPlugins(names []string) error
- func (m *Manager) PublishPlugin(info PluginInfo) error
- func (m *Manager) RemovePluginPermission(pluginName string)
- func (m *Manager) RollbackPlugin(name, version string) error
- func (m *Manager) SetLogger(logger Logger)
- func (m *Manager) SetPluginPermission(pluginName string, permission *PluginPermission)
- func (m *Manager) SetSandbox(sandbox Sandbox)
- func (m *Manager) SetupRemoteRepository(url, sshKeyPath string) (*PluginRepository, error)
- func (m *Manager) SubscribeToEvent(eventName string, handler EventHandler)
- func (m *Manager) UnloadPlugin(name string) error
- func (m *Manager) VerifyPluginSignature(pluginPath string, publicKeyPath string) error
- type Plugin
- type PluginData
- type PluginError
- type PluginInfo
- type PluginMarket
- type PluginMetadata
- type PluginPermission
- type PluginRepository
- type PluginStats
- type Sandbox
- type VersionManager
Constants ¶
const ( PluginLoaded = "PluginLoaded" PluginInitialized = "PluginInitialized" PluginExecuted = "PluginExecuted" PluginConfigUpdated = "PluginConfigUpdated" PluginPreUnload = "PluginPreUnload" PluginUnloaded = "PluginUnloaded" PluginExecutionError = "PluginExecutionError" PluginHotReloaded = "PluginHotReloaded" )
const PluginSymbol = "Plugin"
Variables ¶
var ( ErrPluginAlreadyLoaded = newPluginError("插件已加载", errTypeValidation) ErrInvalidPluginInterface = newPluginError("无效的插件接口", errTypeValidation) ErrPluginNotFound = newPluginError("未找到插件", errTypeValidation) ErrIncompatibleVersion = newPluginError("插件版本不兼容", errTypeValidation) ErrMissingDependency = newPluginError("缺少插件依赖", errTypeValidation) ErrCircularDependency = newPluginError("检测到循环依赖", errTypeValidation) ErrPluginSandboxViolation = newPluginError("插件违反沙箱规则", errTypeRuntime) )
常用的插件错误
Functions ¶
func Deserializer ¶
Deserializer 反序列化数据
参数: - data: 待反序列化的字节数组 - v: 目标结构体指针 返回: - error: 反序列化过程中的错误 功能: - 将字节数组反序列化为指定类型 - 用于配置加载和数据恢复
func ExecutePluginGeneric ¶
ExecutePluginGeneric 通用插件执行函数
类型参数: - T: 输入数据类型 - R: 返回结果类型 参数: - m: 插件管理器实例 - name: 插件名称 - data: 传递给插件的数据 功能: - 在沙箱环境中安全执行插件 - 记录执行时间和统计信息 - 确保类型安全的结果转换 返回: - R: 类型安全的执行结果 - error: 执行过程中的错误信息
func LoadConfig ¶
LoadConfig 加载配置文件
func Serializer ¶
Serializer 序列化数据
参数: - data: 需要序列化的数据 返回: - []byte: 序列化后的字节数组 - error: 序列化过程中的错误 功能: - 将任意类型数据序列化为字节数组 - 用于配置存储和数据传输
Types ¶
type EventHandler ¶
type EventHandler func(Event)
type ISandbox ¶
type ISandbox struct {
// contains filtered or unexported fields
}
func (*ISandbox) VerifyPluginPath ¶
VerifyPluginPath 验证插件路径是否在沙箱目录内
参数: - path: 插件路径 返回: - error: 验证过程中的错误 功能: - 使用 filepath.Abs 获取插件的绝对路径 - 使用 filepath.Clean 规范化路径 - 检查插件路径是否在沙箱目录内
type Logger ¶
type Logger interface {
Debug(msg string, args ...any)
Info(msg string, args ...any)
Warn(msg string, args ...any)
Error(msg string, args ...any)
}
Logger 日志接口
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager 插件管理器
功能: - 管理插件的生命周期(加载、执行、卸载) - 处理插件配置和依赖关系 - 提供插件权限控制 字段说明: - plugins: 已加载的插件映射 - config: 插件配置管理器 - dependencies: 插件依赖关系映射 - stats: 插件执行统计信息 - eventBus: 事件总线,用于插件事件通知 - sandbox: 插件沙箱环境 - publicKeyPath: 插件签名验证公钥路径 - pluginDir: 插件目录路径 - logger: 日志记录器 - versionManager: 插件版本管理器 - pluginMarket: 插件市场接口 - permissions: 插件权限配置映射
func NewManager ¶
NewManager 创建新的插件管理器实例
参数: - pluginDir: 插件目录路径 - configPath: 配置文件路径 - publicKeyPath: 可选的公钥路径,用于验证插件签名 功能: - 初始化插件管理器及其依赖组件 - 加载配置文件 - 设置沙箱环境 - 初始化事件总线、版本管理器和插件市场 - 如果未指定启用的插件,则加载所有插件 返回: - *Manager: 插件管理器实例 - error: 初始化过程中的错误信息
func (*Manager) ConfigUpdated ¶
ConfigUpdated 管理插件配置
name: 插件名称 config: 新的配置数据 功能: - 序列化配置数据 - 更新插件配置 - 保存配置到持久化存储
func (*Manager) DeployRepository ¶
func (m *Manager) DeployRepository(repo *PluginRepository, localPath string) error
DeployRepository 部署插件仓库
参数: - repo: 插件仓库配置对象 - localPath: 本地部署路径 返回: - error: 部署过程中的错误 功能: - 下载 redbean 执行文件 - 使用 SSH 或本地方式部署仓库 - 验证部署结果
func (*Manager) ExecutePlugin ¶
ExecutePlugin 执行插件并返回通用类型结果
name: 插件名称 data: 传递给插件的数据 功能: - 在沙箱环境中执行插件 - 更新执行统计信息 - 返回任意类型的结果
func (*Manager) ExecutePluginInt ¶
ExecutePluginInt 执行插件并返回整数结果
name: 插件名称 data: 传递给插件的数据 功能: - 执行插件并确保返回整数类型
func (*Manager) ExecutePluginString ¶
ExecutePluginString 执行插件并返回字符串结果
name: 插件名称 data: 传递给插件的数据 功能: - 执行插件并确保返回字符串类型
func (*Manager) GetEventBus ¶
func (m *Manager) GetEventBus() *eventBus
GetEventBus 获取事件总线
功能: - 获取事件总线实例
func (*Manager) GetPluginConfig ¶
func (m *Manager) GetPluginConfig(name string) (*PluginData, error)
GetPluginConfig 获取插件配置
name: 插件名称 功能: - 返回插件的当前配置
func (*Manager) GetPluginMarket ¶
func (m *Manager) GetPluginMarket() *PluginMarket
GetPluginMarket 获取插件市场
功能: - 获取插件市场实例
func (*Manager) GetPluginStats ¶
func (m *Manager) GetPluginStats(name string) (*PluginStats, error)
GetPluginStats 获取插件统计信息
name: 插件名称 功能: - 返回插件的执行统计信息
func (*Manager) GetVersionManager ¶
func (m *Manager) GetVersionManager() *VersionManager
GetVersionManager 获取版本管理器
功能: - 获取版本管理器实例
func (*Manager) HasPermission ¶
HasPermission 检查插件权限
EventName: 插件名称 action: 操作名称 功能: - 验证插件是否有权限执行指定操作
func (*Manager) HotReload ¶
HotReload 热重载插件
name: 插件名称 path: 新插件文件的路径 功能: - 验证新插件签名 - 保持原有配置的情况下更新插件 - 触发热重载事件
func (*Manager) HotUpdatePlugin ¶
HotUpdatePlugin 热更新插件
参数: - name: 插件名称 - newVersion: 新版本号 返回: - error: 更新过程中的错误 功能: - 在不停止系统的情况下更新插件 - 保持原有配置 - 更新版本信息
func (*Manager) InstallPlugin ¶
InstallPlugin 下载并安装插件
参数: - name: 插件名称 - version: 插件版本 返回: - error: 下载或安装过程中的错误 功能: - 从插件市场下载指定版本的插件 - 安装并初始化插件 - 更新版本信息
func (*Manager) ListAvailablePlugins ¶
func (m *Manager) ListAvailablePlugins() []PluginInfo
ListAvailablePlugins 列出可用插件
返回: - []PluginInfo: 可用插件信息列表 功能: - 获取插件市场中所有可用插件的信息 - 包含插件名称、版本等元数据
func (*Manager) LoadEnabledPlugins ¶
LoadEnabledPlugins 加载所有启用的插件
pluginDir: 插件目录路径 功能: - 并发加载所有启用的插件
func (*Manager) LoadPlugin ¶
LoadPlugin 加载一个插件
path: 插件文件的完整路径 功能: - 验证插件签名(如果启用) - 加载插件并初始化 - 设置默认权限 - 触发加载事件
func (*Manager) LoadPluginPermissions ¶
func (m *Manager) LoadPluginPermissions(permissions map[string]*PluginPermission)
LoadPluginPermissions 从配置加载插件权限
参数: - permissions: 插件权限配置映射,key为插件名称,value为权限配置 功能: - 批量导入插件权限配置 - 用于系统启动时初始化权限 - 支持动态更新多个插件的权限
func (*Manager) LoadPluginWithData ¶
LoadPluginWithData 加载插件并设置初始数据
path: 插件文件路径 data: 可选的初始配置数据 功能: - 加载插件 - 设置初始配置 - 执行完整的插件初始化流程
func (*Manager) PreloadPlugins ¶
PreloadPlugins 添加预加载方法
参数: - names: 插件名称列表 返回: - error: 预加载过程中的错误 功能: - 预加载指定插件 - 不立即初始化,仅加载插件符号
func (*Manager) PublishPlugin ¶
func (m *Manager) PublishPlugin(info PluginInfo) error
PublishPlugin 发布插件到插件市场
参数: - info: 插件信息 返回: - error: 发布过程中的错误 功能: - 将插件信息添加到插件市场 - 使插件对其他用户可见
func (*Manager) RemovePluginPermission ¶
RemovePluginPermission 移除插件权限
参数: - EventName: 插件名称 功能: - 从权限管理器中删除指定插件的所有权限配置 - 用于插件卸载或权限重置场景
func (*Manager) RollbackPlugin ¶
RollbackPlugin 回滚插件版本
参数: - name: 插件名称 - version: 目标版本号 返回: - error: 回滚过程中的错误 功能: - 将插件回滚到指定版本 - 恢复该版本的配置 - 更新版本信息
func (*Manager) SetPluginPermission ¶
func (m *Manager) SetPluginPermission(pluginName string, permission *PluginPermission)
SetPluginPermission 设置插件权限
EventName: 插件名称 permission: 权限配置 功能: - 更新插件的权限配置
func (*Manager) SetupRemoteRepository ¶
func (m *Manager) SetupRemoteRepository(url, sshKeyPath string) (*PluginRepository, error)
SetupRemoteRepository 设置远程插件仓库
参数: - url: 远程仓库的 URL 地址 - sshKeyPath: SSH 密钥文件的路径 返回: - *PluginRepository: 配置好的插件仓库对象 - error: 设置过程中的错误 功能: - 读取并解析 SSH 密钥 - 创建并返回插件仓库配置对象
func (*Manager) SubscribeToEvent ¶
func (m *Manager) SubscribeToEvent(eventName string, handler EventHandler)
SubscribeToEvent 订阅插件事件 参数: - eventName: 事件名称 - handler: 事件处理函数 功能: - 注册事件处理器 - 当指定事件发生时触发处理函数
func (*Manager) UnloadPlugin ¶
UnloadPlugin 卸载指定的插件
name: 插件名称 功能: - 执行插件的预卸载和关闭钩子 - 清理插件资源和权限 - 触发卸载事件
type Plugin ¶
type Plugin interface {
// Metadata 返回插件的元数据信息
// 包含插件名称、版本、依赖关系等基本信息
Metadata() PluginMetadata
// Init 插件初始化
// 在插件加载后执行,用于初始化插件的资源和状态
Init() error
// PostLoad 加载后处理
// 在插件初始化完成后执行,用于处理依赖项和建立连接
PostLoad() error
// PreUnload 卸载前处理
// 在插件卸载前执行,用于清理资源和保存状态
PreUnload() error
// Shutdown 关闭插件
// 在插件完全卸载前执行,用于释放所有资源
Shutdown() error
// PreLoad 加载前处理
// 在插件初始化前执行,用于加载配置和验证环境
// 参数 config: 插件的配置数据
PreLoad(config []byte) error
// ConfigUpdated 管理插件配置
// 用于更新和维护插件的配置信息
// 参数 config: 新的配置数据
// 返回: 处理后的配置数据和可能的错误
ConfigUpdated(config []byte) ([]byte, error)
// Execute 执行插件功能
// 插件的主要业务逻辑实现
// 参数 data: 输入数据
// 返回: 处理结果和可能的错误
Execute(data any) (any, error)
}
Plugin 定义了插件必须实现的接口
type PluginData ¶
type PluginData struct {
Config []byte `msgpack:"config"` // 插件的配置数据
UpdatedAt time.Time `msgpack:"updated_at"` // 最后更新时间
Permissions *PluginPermission `msgpack:"permissions,omitempty"`
}
PluginData 存储插件配置的详细信息
type PluginError ¶
type PluginError struct {
// contains filtered or unexported fields
}
PluginError 定义插件错误结构
func (*PluginError) Metadata ¶
func (e *PluginError) Metadata() map[string]interface{}
Metadata 获取错误的元数据
func (*PluginError) WithMetadata ¶
func (e *PluginError) WithMetadata(key string, value interface{}) *PluginError
WithMetadata 添加元数据到错误
type PluginInfo ¶
type PluginMarket ¶
type PluginMarket struct {
// contains filtered or unexported fields
}
func (*PluginMarket) AddPlugin ¶
func (pm *PluginMarket) AddPlugin(info PluginInfo)
func (*PluginMarket) GetPlugin ¶
func (pm *PluginMarket) GetPlugin(name string) (PluginInfo, bool)
func (*PluginMarket) ListPlugins ¶
func (pm *PluginMarket) ListPlugins() []PluginInfo
type PluginMetadata ¶
type PluginPermission ¶
PluginPermission 插件权限定义
type PluginRepository ¶
type PluginStats ¶
type VersionManager ¶
type VersionManager struct {
// contains filtered or unexported fields
}
func (*VersionManager) AddVersion ¶
func (vm *VersionManager) AddVersion(pluginName, version string)
func (*VersionManager) GetActiveVersion ¶
func (vm *VersionManager) GetActiveVersion(pluginName string) (string, bool)
func (*VersionManager) GetVersions ¶
func (vm *VersionManager) GetVersions(pluginName string) []string
func (*VersionManager) SetActiveVersion ¶
func (vm *VersionManager) SetActiveVersion(pluginName, version string)
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
http
command
|
|
|
plugins/hello
command
|
|
|
plugins/math
command
|
|
|
plugins/myplugin
command
|