From 9cae36a93508fe733e3dbd24a4a7c2938cf86423 Mon Sep 17 00:00:00 2001 From: Liujian <824010343@qq.com> Date: Wed, 17 Dec 2025 18:11:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BD=93=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E5=88=86=E5=9D=97=E4=BC=A0=E8=BE=93=E6=97=B6=EF=BC=8C=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=8F=98=E9=87=8Fresponse=E8=8E=B7=E5=8F=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- drivers/plugin-manager/config.go | 6 ++++-- drivers/plugin-manager/manager.go | 5 +++-- drivers/plugin-manager/plugin.go | 2 +- entries/http-entry/reader.go | 28 +++++++++++++++++++++++++++- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/drivers/plugin-manager/config.go b/drivers/plugin-manager/config.go index 7935c8a8..96c29b51 100644 --- a/drivers/plugin-manager/config.go +++ b/drivers/plugin-manager/config.go @@ -3,6 +3,7 @@ package plugin_manager import ( "fmt" "github.com/eolinker/eosc" + "github.com/eolinker/eosc/log" "github.com/eolinker/eosc/variable" "reflect" ) @@ -17,7 +18,7 @@ type PluginWorkerConfig struct { Plugins []*PluginConfig `json:"plugins" yaml:"plugins"` } -//PluginConfig 全局插件配置 +// PluginConfig 全局插件配置 type PluginConfig struct { Name string `json:"name" yaml:"name" ` ID string `json:"id" yaml:"id"` @@ -71,7 +72,8 @@ func (p *PluginConfig) Reset(originVal reflect.Value, targetVal reflect.Value, v cfgType, err := p.GetType(originVal) if err != nil { - return nil, err + log.Errorf("PluginConfig Reset get type error: %v", err) + return nil, nil } usedVariables := make([]string, 0, variables.Len()) targetType := targetVal.Type() diff --git a/drivers/plugin-manager/manager.go b/drivers/plugin-manager/manager.go index c58c4a45..817c99d7 100644 --- a/drivers/plugin-manager/manager.go +++ b/drivers/plugin-manager/manager.go @@ -16,7 +16,7 @@ import ( var ( errConfig = errors.New("invalid config") - ErrorDriverNotExit = errors.New("drive not exit") + ErrorDriverNotExist = errors.New("driver not exist") ErrorGlobalPluginMastConfig = errors.New("global must have config") ErrorGlobalPluginConfigInvalid = errors.New("invalid global config") ) @@ -171,7 +171,8 @@ func (p *PluginManager) check(conf interface{}) (Plugins, error) { log.DebugF("new plugin:%d=>%v", i, cf) newPlugin, err := p.newPlugin(cf) if err != nil { - return nil, err + log.Error("new plugin error:", err) + continue } plugins = append(plugins, newPlugin) } diff --git a/drivers/plugin-manager/plugin.go b/drivers/plugin-manager/plugin.go index f183d866..f8f4c3fa 100644 --- a/drivers/plugin-manager/plugin.go +++ b/drivers/plugin-manager/plugin.go @@ -50,7 +50,7 @@ func (p *PluginManager) getExtenderDriver(config *PluginConfig) (eosc.IExtenderD log.DebugF("getExtenderDriver:%p.get(%v)", p, config) driverFactory, has := p.extenderDrivers.GetDriver(config.ID) if !has { - return nil, fmt.Errorf("id:%w", ErrorDriverNotExit) + return nil, fmt.Errorf("id:%w", ErrorDriverNotExist) } return driverFactory.Create("plugin@setting", config.Name, config.Name, config.Name, config.InitConfig) } diff --git a/entries/http-entry/reader.go b/entries/http-entry/reader.go index bf0bfba3..fd9e71e7 100644 --- a/entries/http-entry/reader.go +++ b/entries/http-entry/reader.go @@ -4,6 +4,7 @@ import ( "bytes" "compress/gzip" "fmt" + "github.com/eolinker/eosc/log" "io" "net/url" "os" @@ -270,7 +271,32 @@ var ( "response": Fields{ "": ReadFunc(func(name string, ctx http_service.IHttpContext) (interface{}, bool) { - return ctx.Response().String(), true + builder := &strings.Builder{} + err := ctx.Response().Headers().Write(builder) + if err != nil { + log.Errorf("write response headers error: %v", err) + return "", false + } + body := ctx.Response().GetBody() + encoding := ctx.Response().Headers().Get("Content-Encoding") + if encoding == "gzip" { + reader, err := gzip.NewReader(bytes.NewReader(body)) + if err != nil { + return "", false + } + defer reader.Close() + data, err := io.ReadAll(reader) + if err != nil { + return "", false + } + body = data + } + _, err = builder.Write(body) + if err != nil { + log.Errorf("write response body error: %v", err) + return "", false + } + return builder.String(), true }), "body": Fields{ "": ReadFunc(func(name string, ctx http_service.IHttpContext) (interface{}, bool) {