一些err接受问题
This commit is contained in:
@@ -39,6 +39,7 @@ type SDKConfig struct {
|
|||||||
FlushInterval int // 刷新间隔
|
FlushInterval int // 刷新间隔
|
||||||
DiskBakPath string // 磁盘备份路径
|
DiskBakPath string // 磁盘备份路径
|
||||||
RetryN int // 每N次重试
|
RetryN int // 每N次重试
|
||||||
|
ChanSize int // 信道大小, 默认1000
|
||||||
|
|
||||||
reportN int
|
reportN int
|
||||||
}
|
}
|
||||||
@@ -100,6 +101,12 @@ func (sdk *SDK) varinit() error {
|
|||||||
}
|
}
|
||||||
sdk.sdkConfig.RetryN = _retryN.Int()
|
sdk.sdkConfig.RetryN = _retryN.Int()
|
||||||
|
|
||||||
|
_chanSize, err := g.Config().Get(ctx, "angergs.bisdk.chanSize")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
sdk.sdkConfig.ChanSize = _chanSize.Int()
|
||||||
|
|
||||||
g.Log().Infof(ctx, "[GameLog]client init success, config: %v", sdk.sdkConfig)
|
g.Log().Infof(ctx, "[GameLog]client init success, config: %v", sdk.sdkConfig)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -124,6 +131,9 @@ func (sdk *SDK) checkConfig() error {
|
|||||||
if config.RetryN == 0 {
|
if config.RetryN == 0 {
|
||||||
config.RetryN = 10
|
config.RetryN = 10
|
||||||
}
|
}
|
||||||
|
if config.ChanSize == 0 {
|
||||||
|
config.ChanSize = 1000
|
||||||
|
}
|
||||||
config.DiskBakPath = strings.TrimSuffix(config.DiskBakPath, "/")
|
config.DiskBakPath = strings.TrimSuffix(config.DiskBakPath, "/")
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -148,7 +158,9 @@ func INIT(config *SDKConfig) (*SDK, error) {
|
|||||||
sdk.buffer = make([]GameLog, 0, 100)
|
sdk.buffer = make([]GameLog, 0, 100)
|
||||||
// 加载失败日志
|
// 加载失败日志
|
||||||
failLogs, err := sdk.loadFailLogs4disk()
|
failLogs, err := sdk.loadFailLogs4disk()
|
||||||
if err != nil && len(failLogs) > 0 {
|
if err != nil {
|
||||||
|
g.Log().Errorf(ctx, "[GameLog]load fail logs error: %v", err)
|
||||||
|
} else if len(failLogs) > 0 {
|
||||||
sdk.buffer = append(sdk.buffer, failLogs...)
|
sdk.buffer = append(sdk.buffer, failLogs...)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,7 +224,11 @@ func (sdk *SDK) loadFailLogs4disk() (logs []GameLog, err error) {
|
|||||||
// 备份失败日志追加到磁盘
|
// 备份失败日志追加到磁盘
|
||||||
func (sdk *SDK) bakFailLogs2disk(failLogs []GameLog) {
|
func (sdk *SDK) bakFailLogs2disk(failLogs []GameLog) {
|
||||||
bakPath := fmt.Sprintf("%s/failBuffer%s.bak.log", sdk.sdkConfig.DiskBakPath, gtime.Now().Format("YmdH"))
|
bakPath := fmt.Sprintf("%s/failBuffer%s.bak.log", sdk.sdkConfig.DiskBakPath, gtime.Now().Format("YmdH"))
|
||||||
content, _ := json.Marshal(failLogs)
|
content, err := json.Marshal(failLogs)
|
||||||
|
if err != nil {
|
||||||
|
g.Log().Errorf(ctx, "[GameLog]marshal fail logs error: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
gfile.PutContentsAppend(bakPath, string(content)+"\n")
|
gfile.PutContentsAppend(bakPath, string(content)+"\n")
|
||||||
g.Log().Infof(ctx, "[GameLog]backup fail buffer to %s", bakPath)
|
g.Log().Infof(ctx, "[GameLog]backup fail buffer to %s", bakPath)
|
||||||
}
|
}
|
||||||
@@ -288,7 +304,11 @@ func (sdk *SDK) send(logs []GameLog) {
|
|||||||
data := make([][]any, 0, len(logs))
|
data := make([][]any, 0, len(logs))
|
||||||
// logs 拆分成二维数组
|
// logs 拆分成二维数组
|
||||||
for _, log := range logs {
|
for _, log := range logs {
|
||||||
propertyJson, _ := json.Marshal(log.Property)
|
propertyJson, err := json.Marshal(log.Property)
|
||||||
|
if err != nil {
|
||||||
|
g.Log().Errorf(ctx, "[GameLog]skip log parse, marshal property error: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
data = append(data, []any{
|
data = append(data, []any{
|
||||||
log.Uid,
|
log.Uid,
|
||||||
log.Event,
|
log.Event,
|
||||||
@@ -302,7 +322,11 @@ func (sdk *SDK) send(logs []GameLog) {
|
|||||||
Pid: sdk.sdkConfig.Pid,
|
Pid: sdk.sdkConfig.Pid,
|
||||||
Data: data,
|
Data: data,
|
||||||
}
|
}
|
||||||
jsonBody, _ := json.Marshal(sbody)
|
jsonBody, err := json.Marshal(sbody)
|
||||||
|
if err != nil {
|
||||||
|
g.Log().Errorf(ctx, "[GameLog]marshal send body error: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// giz压缩
|
// giz压缩
|
||||||
gzBody := bytes.NewBuffer([]byte{})
|
gzBody := bytes.NewBuffer([]byte{})
|
||||||
@@ -315,18 +339,18 @@ func (sdk *SDK) send(logs []GameLog) {
|
|||||||
|
|
||||||
sdk.sdkConfig.reportN += 1
|
sdk.sdkConfig.reportN += 1
|
||||||
res, err := gamelogClient.Post(timeoutCtx, sdk.sdkConfig.BaseUrl+"/report/event", xorBody)
|
res, err := gamelogClient.Post(timeoutCtx, sdk.sdkConfig.BaseUrl+"/report/event", xorBody)
|
||||||
defer func() {
|
|
||||||
cerr := res.Close()
|
|
||||||
if cerr != nil {
|
|
||||||
g.Log().Errorf(ctx, "[GameLog]close response error: %v", cerr)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
// 失败重新加入缓冲区
|
// 失败重新加入缓冲区
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sdk.bakFailLogs2disk(logs)
|
sdk.bakFailLogs2disk(logs)
|
||||||
g.Log().Warningf(ctx, "[GameLog]send log error, bak to fail buffer(%d): %v", len(logs), err)
|
g.Log().Warningf(ctx, "[GameLog]send log error, bak to fail buffer(%d): %v", len(logs), err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
defer func() {
|
||||||
|
cerr := res.Close()
|
||||||
|
if cerr != nil {
|
||||||
|
g.Log().Errorf(ctx, "[GameLog]close response error: %v", cerr)
|
||||||
|
}
|
||||||
|
}()
|
||||||
httpcode := res.StatusCode
|
httpcode := res.StatusCode
|
||||||
resBody := res.ReadAllString()
|
resBody := res.ReadAllString()
|
||||||
// 收集器拦截, 重新加入缓冲区
|
// 收集器拦截, 重新加入缓冲区
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ func TestGamelog(t *testing.T) {
|
|||||||
FlushInterval: 5, // 上报间隔
|
FlushInterval: 5, // 上报间隔
|
||||||
DiskBakPath: "gamelog", // 本地磁盘备份, 用于意外情况下临时保存日志, 请确保该目录持久化(容器内要挂载). 每次启动时或每N次上报时加载到失败队列
|
DiskBakPath: "gamelog", // 本地磁盘备份, 用于意外情况下临时保存日志, 请确保该目录持久化(容器内要挂载). 每次启动时或每N次上报时加载到失败队列
|
||||||
// 可填
|
// 可填
|
||||||
RetryN: 2, // 默认每10次上传检查一次磁盘的失败数据
|
RetryN: 2, // 默认每10次, 上传检查一次磁盘的失败数据
|
||||||
|
ChanSize: 500, // 默认1000, 信道size
|
||||||
})
|
})
|
||||||
|
|
||||||
// 随机测试事件和属性
|
// 随机测试事件和属性
|
||||||
|
|||||||
Reference in New Issue
Block a user