增强插件系统:优化插件管理和动态插件实现

- 在插件管理器中引入 DynamicPlugin 结构体,支持动态加载和管理插件,提升插件的灵活性和可扩展性。
- 更新插件接口,添加插件名称、版本、描述、作者、类型和启用状态的获取和设置方法,增强插件信息的管理能力。
- 修改现有插件实现,确保兼容新的动态插件结构,提升插件的统一性和可维护性。
- 更新示例程序,展示如何使用新的动态插件功能,提升用户体验。

此更新提升了插件系统的灵活性和可扩展性,便于开发者更好地管理和使用插件功能。
This commit is contained in:
2025-03-14 07:12:05 +00:00
parent cc4c677553
commit 557059b2d2
11 changed files with 701 additions and 107 deletions

View File

@@ -12,13 +12,19 @@ import (
// StatsPlugin 统计插件
// 用于收集和记录系统运行时统计数据
type StatsPlugin struct {
*plugin.BasePluginImpl // 改为使用BasePluginImpl
stats map[string]int64
startTime time.Time
mu sync.RWMutex
tickerStop chan bool
ticker *time.Ticker
config map[string]interface{}
plugin.Plugin // 嵌入接口,确保类型检查
name string // 插件名称
version string // 插件版本
description string // 插件描述
author string // 插件作者
pluginType plugin.PluginType // 插件类型
enabled bool // 是否启用
stats map[string]int64
startTime time.Time
mu sync.RWMutex
tickerStop chan bool
ticker *time.Ticker
config map[string]interface{}
}
// StatsParams 统计请求参数结构体
@@ -33,29 +39,60 @@ type StatsParams struct {
// Plugin 导出的插件变量
var Plugin = &StatsPlugin{
// 使用默认构造函数,不指定插件类型,将默认为通用插件
BasePluginImpl: plugin.NewPluginWithDefaultType(
"StatsPlugin",
"1.0.0",
"系统运行时统计插件",
"开发者",
),
stats: make(map[string]int64),
tickerStop: make(chan bool),
name: "StatsPlugin",
version: "1.0.0",
description: "系统运行时统计插件",
author: "开发者",
pluginType: plugin.PluginTypeUtils, // 指定为工具类插件
enabled: true,
stats: make(map[string]int64),
tickerStop: make(chan bool),
}
// 为展示如何指定类型,我们也可以显式设置插件类型
// var Plugin = &StatsPlugin{
// BasePlugin: plugin.NewBasePlugin(
// "StatsPlugin",
// "1.0.0",
// "系统运行时统计插件",
// "开发者",
// plugin.PluginTypeUtils, // 明确指定为工具类插件
// ),
// stats: make(map[string]int64),
// tickerStop: make(chan bool),
// }
// Name 返回插件名称
func (p *StatsPlugin) Name() string {
return p.name
}
// Version 返回插件版本
func (p *StatsPlugin) Version() string {
return p.version
}
// Description 返回插件描述
func (p *StatsPlugin) Description() string {
return p.description
}
// Author 返回插件作者
func (p *StatsPlugin) Author() string {
return p.author
}
// Type 返回插件类型
func (p *StatsPlugin) Type() plugin.PluginType {
return p.pluginType
}
// IsEnabled 返回插件是否启用
func (p *StatsPlugin) IsEnabled() bool {
return p.enabled
}
// SetEnabled 设置插件启用状态
func (p *StatsPlugin) SetEnabled(enabled bool) {
p.enabled = enabled
}
// GetOperationInfo 获取操作的参数信息
func (p *StatsPlugin) GetOperationInfo(operation string) (map[string]interface{}, error) {
return map[string]interface{}{}, nil
}
// GetAllOperations 获取所有操作及其参数信息
func (p *StatsPlugin) GetAllOperations() map[string]map[string]interface{} {
return map[string]map[string]interface{}{}
}
// Init 初始化插件
func (p *StatsPlugin) Init(ctx context.Context, config map[string]interface{}) error {
@@ -242,7 +279,15 @@ func (p *StatsPlugin) logStats() {
// GetAvailableOperations 获取可用操作列表
// 这是一个帮助方法列出所有可通过Execute调用的操作
func (p *StatsPlugin) GetAvailableOperations() []string {
return p.GetAvailableActions()
// 返回硬编码的操作列表,而不是调用不存在的方法
return []string{
"incrementstat",
"getstat",
"recordrequest",
"resetstats",
"generatestatsreport",
"getallstats",
}
}
// main 函数是必须的,但不会被调用