修复当响应分块传输时,日志变量response获取数据失败的问题

This commit is contained in:
Liujian
2025-12-17 18:11:07 +08:00
parent be90da354a
commit 9cae36a935
4 changed files with 35 additions and 6 deletions

View File

@@ -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()

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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) {