cursor help me to improve insertPlate
This commit is contained in:
parent
d234dea44a
commit
07d9a06471
4
go.sum
4
go.sum
@ -49,8 +49,8 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y
|
||||
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
|
||||
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
|
||||
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
|
||||
github.com/phyer/core v0.1.99 h1:clNHM5+7c23W1FyyHDYGXHHYZpGEbHOoRhOXpzhWwjQ=
|
||||
github.com/phyer/core v0.1.99/go.mod h1:XZdniJiiZPzOU8+QHPFRQWdvJa6m5Ilj5VClWWI0OQg=
|
||||
github.com/phyer/core v0.1.100 h1:xYOywQnKBqNqCD1NK/iFHi5EZX0CDsAfLgaE/BLmz8s=
|
||||
github.com/phyer/core v0.1.100/go.mod h1:XZdniJiiZPzOU8+QHPFRQWdvJa6m5Ilj5VClWWI0OQg=
|
||||
github.com/phyer/texus v0.0.0-20241207132635-0e7fb63f8196 h1:P1sxgCsS0VIL38ufZzgUuZLLyY/B+po6kSY7ziNZT7E=
|
||||
github.com/phyer/texus v0.0.0-20241207132635-0e7fb63f8196/go.mod h1:iZexs5agdApNlp8HW/FqKgma4Ij1x8/o+ZLcMvY3f80=
|
||||
github.com/phyer/v5sdkgo v0.1.4 h1:mAxxjPJVTYGuGDarqOcFGkzj5AgqbbzJGsnYmmsbapU=
|
||||
|
@ -2,18 +2,21 @@ package module
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/phyer/core"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/phyer/core"
|
||||
|
||||
// "sync"
|
||||
"time"
|
||||
//
|
||||
// simple "github.com/bitly/go-simplejson"
|
||||
// "github.com/go-redis/redis"
|
||||
// "github.com/phyer/core/utils"
|
||||
"sync"
|
||||
|
||||
logrus "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
@ -21,6 +24,13 @@ type MyCandle struct {
|
||||
core.Candle
|
||||
}
|
||||
|
||||
// A. 使用对象池减少内存分配
|
||||
var samplePool = sync.Pool{
|
||||
New: func() interface{} {
|
||||
return new(core.Candle)
|
||||
},
|
||||
}
|
||||
|
||||
func (cd *MyCandle) Process(cr *core.Core) {
|
||||
tmi := ToInt64(cd.Data[0])
|
||||
time.UnixMilli(tmi).Format("01-02 15:04")
|
||||
@ -86,29 +96,55 @@ func (cd *MyCandle) Process(cr *core.Core) {
|
||||
}
|
||||
|
||||
func (cd *MyCandle) InsertIntoPlate(cr *core.Core) (*core.Sample, error) {
|
||||
cr.Mu.Lock()
|
||||
defer cr.Mu.Unlock()
|
||||
// pl, plateFounded := cr.PlateMap[cd.InstID]
|
||||
// if !plateFounded || pl == nil {
|
||||
pl, _ := LoadPlate(cr, cd.InstID)
|
||||
cr.PlateMap[cd.InstID] = pl
|
||||
// }
|
||||
po, coasterFounded := pl.CoasterMap["period"+cd.Period]
|
||||
err := errors.New("")
|
||||
if !coasterFounded {
|
||||
pl.MakeCoaster(cr, cd.Period)
|
||||
// 1. 参数检查
|
||||
if cr == nil || cd.InstID == "" || cd.Period == "" {
|
||||
return nil, fmt.Errorf("invalid parameters: core=%v, instID=%s, period=%s",
|
||||
cr != nil, cd.InstID, cd.Period)
|
||||
}
|
||||
|
||||
if len(po.InstID) == 0 {
|
||||
// logrus.Debug("candle coaster: ", cd.Period, pl.CoasterMap["period"+cd.Period], pl.CoasterMap)
|
||||
//创建失败的原因是原始数据不够,一般发生在服务中断了,缺少部分数据的情况下, 后续需要数据补全措施
|
||||
erstr := fmt.Sprintln("coaster创建失败 candle instID: "+cd.InstID+"; period: "+cd.Period, "coasterFounded: ", coasterFounded, " ", err)
|
||||
err := errors.New(erstr)
|
||||
return nil, err
|
||||
// 2. 使用普通互斥锁 (因为sync.Mutex没有RLock方法)
|
||||
cr.Mu.Lock()
|
||||
pl, exists := cr.PlateMap[cd.InstID]
|
||||
|
||||
if !exists {
|
||||
var err error
|
||||
pl, err = LoadPlate(cr, cd.InstID)
|
||||
if err != nil {
|
||||
cr.Mu.Unlock()
|
||||
return nil, fmt.Errorf("failed to load plate: %v", err)
|
||||
}
|
||||
cr.PlateMap[cd.InstID] = pl
|
||||
}
|
||||
cr.Mu.Unlock()
|
||||
|
||||
if pl == nil {
|
||||
return nil, fmt.Errorf("plate is nil for InstID: %s", cd.InstID)
|
||||
}
|
||||
|
||||
// 3. 处理Coaster
|
||||
coasterKey := "period" + cd.Period
|
||||
po, coasterFounded := pl.CoasterMap[coasterKey]
|
||||
if !coasterFounded {
|
||||
if err := pl.MakeCoaster(cr, cd.Period); err != nil {
|
||||
return nil, fmt.Errorf("failed to make coaster: %v", err)
|
||||
}
|
||||
po, coasterFounded = pl.CoasterMap[coasterKey]
|
||||
}
|
||||
|
||||
// 4. 验证coaster (修改判断方式)
|
||||
if !coasterFounded || po.InstID == "" {
|
||||
return nil, fmt.Errorf("invalid coaster for %s period %s", cd.InstID, cd.Period)
|
||||
}
|
||||
|
||||
// 5. 推送样本
|
||||
sm, err := po.RPushSample(cr, &cd.Candle, "candle")
|
||||
return sm, err
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to push sample: %v", err)
|
||||
}
|
||||
|
||||
return sm, nil
|
||||
}
|
||||
|
||||
func (cad *MyCandle) AddToGeneralCandleChnl(cr *core.Core) {
|
||||
suffix := ""
|
||||
env := os.Getenv("GO_ENV")
|
||||
|
Loading…
x
Reference in New Issue
Block a user