// Package pool define concurrency call function in ants package pool import ( "fmt" "strconv" "time" "modelRT/config" "modelRT/diagram" "modelRT/logger" "modelRT/network" "go.uber.org/zap" ) var AnchorFunc = func(anchorConfig interface{}) { logger := logger.GetLoggerInstance() var firstTimePolling bool paramConfig, ok := anchorConfig.(config.AnchorParamConfig) if !ok { logger.Error("conversion model anchor param config type failed") return } for { var beginUnixTime, endUnixTime int64 if firstTimePolling { milliUnixTime := time.Now().UnixMilli() endUnixTime = milliUnixTime beginUnixTime = milliUnixTime - 1000*60 firstTimePolling = false } else { // 判断时间差值是否小于10s,如果小于则sleep0.5s后重新获取时间 endUnixTime = time.Now().UnixMilli() if endUnixTime-beginUnixTime < 1000 { time.Sleep(time.Duration(500 * time.Millisecond)) endUnixTime = time.Now().UnixMilli() } } pollingAPI := network.APIEndpoint{ URL: paramConfig.APIURL, Method: paramConfig.APIMethod, QueryParams: map[string]string{ "station": paramConfig.StationID, "component": paramConfig.ComponentID, "point": paramConfig.AnchorName, "begin": strconv.FormatInt(beginUnixTime, 10), "end": strconv.FormatInt(endUnixTime, 10), }, } if !firstTimePolling { beginUnixTime = time.Now().UnixMilli() } valueSlice, err := network.PollAPIEndpoints(pollingAPI) if err != nil { logger.Error("polling real time data from dataRT service failed", zap.Error(err)) continue } for _, value := range valueSlice { anchorName, err := diagram.GetAnchorValue(paramConfig.UUID) if err != nil { logger.Error("can not get anchor value from map by uuid", zap.String("uuid", paramConfig.UUID), zap.Error(err)) continue } if anchorName != paramConfig.AnchorName { logger.Error("anchor name not equal param config anchor value", zap.String("map_anchor_name", anchorName), zap.String("param_anchor_name", paramConfig.AnchorName)) continue } upperLimitVal := paramConfig.CompareValUpperLimit lowerlimitVal := paramConfig.CompareValLowerLimit compareValue := paramConfig.CalculateFunc(value, paramConfig.CalculateParams...) if compareValue > upperLimitVal || compareValue < lowerlimitVal { // TODO 选择报警方式 fmt.Println("log warning") } } } }