dataRT/data/influx/ssu_point.go

145 lines
5.0 KiB
Go
Raw Normal View History

2025-09-19 16:17:46 +08:00
package influx
import (
"context"
"fmt"
"net/url"
"strings"
)
2025-10-11 14:56:11 +08:00
const (
FieldCPrifix string = "c"
FieldIPrefix string = "i"
// FieldP string = "p"
// FieldQ string = "q"
// FieldS string = "s"
// FieldPF string = "pf"
// FieldF string = "f"
FieldDF string = "df"
// FieldUABPrefix string = "uab"
// FieldUBCPrefix string = "ubc"
// FieldUCAPrefix string = "uca"
FieldSuffixAMP = "_amp"
FieldSuffixPA = "_pa"
FieldSuffixRMS = "_rms"
)
func (client *influxClient) GetSSUPointLastLimit(ctx context.Context, req *Request, limit int) ([]TV, error) {
2025-09-19 16:17:46 +08:00
sql := fmt.Sprintf("select last(%s) as %s from %s where station='%s' and device='%s';",
req.SubPos, req.SubPos, req.Measure, req.Station, req.MainPos)
if limit > 1 {
sql = fmt.Sprintf("select %s from %s where station='%s' and device='%s' and time>%dms order by time desc limit %d;",
req.SubPos, req.Measure, req.Station, req.MainPos, req.Begin, limit) // begin = time.Now().UnixMilli()-int64(limit*20+20)
}
reqData := url.Values{
2025-10-23 18:02:29 +08:00
"db": {req.Bucket},
2025-09-19 16:17:46 +08:00
"q": {sql},
}
return client.getTVsResp(ctx, reqData, req.RespType)
}
2025-10-11 14:56:11 +08:00
func (client *influxClient) GetSSUPointsLastLimit(ctx context.Context, req *Request, limit int) (map[string][]TV, error) {
2025-09-19 16:17:46 +08:00
sql := ""
if limit == 1 {
fields := strings.Split(req.SubPos, ",")
for i, field := range fields {
fields[i] = "last(" + field + ") as " + field
}
sql = fmt.Sprintf("select %s from %s where station='%s' and device='%s';",
strings.Join(fields, ","), req.Measure, req.Station, req.MainPos)
} else {
sql = fmt.Sprintf("select %s from %s where station='%s' and device='%s' and time>%dms order by time desc limit %d;",
req.SubPos, req.Measure, req.Station, req.MainPos, req.Begin, limit) // begin = time.Now().UnixMilli()-int64(limit*20+20)
}
reqData := url.Values{
2025-10-23 18:02:29 +08:00
"db": {req.Bucket},
2025-09-19 16:17:46 +08:00
"q": {sql},
}
return client.getF2TVsResp(ctx, reqData, req.RespType)
}
2025-10-23 18:02:29 +08:00
func (client *influxClient) GetSSUPointDurationData(ctx context.Context, req *Request) ([]TV, error) {
2025-09-19 16:17:46 +08:00
sql := fmt.Sprintf("select %s from %s where station='%s' and device='%s' and time>=%dms and time<%dms;",
req.SubPos, req.Measure, req.Station, req.MainPos, req.Begin, req.End)
if req.Operate != "" && req.Step != "" && req.Default != "" {
sql = fmt.Sprintf("select %s(%s) as %s from %s where station='%s' and device='%s' and time>=%dms and time<%dms group by time(%s) fill(%s);",
req.Operate, req.SubPos, req.SubPos, req.Measure, req.Station, req.MainPos, req.Begin, req.End, req.Step, req.Default)
}
reqData := url.Values{
2025-10-23 18:02:29 +08:00
"db": {req.Bucket},
2025-09-19 16:17:46 +08:00
"q": {sql},
}
return client.getTVsResp(ctx, reqData, req.RespType)
}
2025-10-23 18:02:29 +08:00
func (client *influxClient) GetSSUPointsDurationData(ctx context.Context, req *Request) (map[string][]TV, error) {
sql := fmt.Sprintf("select %s from %s where station='%s' and device='%s' and time>=%dms and time<%dms;",
req.SubPos, req.Measure, req.Station, req.MainPos, req.Begin, req.End)
if req.Operate != "" && req.Step != "" && req.Default != "" {
subPoss := strings.Split(req.SubPos, ",")
selectSections := make([]string, len(subPoss))
for i, subPos := range subPoss {
selectSections[i] = req.Operate + "(" + subPos + ")" + " as " + subPos
}
sql = fmt.Sprintf("select %s from %s where station='%s' and device='%s' and time>=%dms and time<%dms group by time(%s) fill(%s);",
strings.Join(selectSections, ", "), req.Measure, req.Station, req.MainPos, req.Begin, req.End, req.Step, req.Default)
}
2025-09-19 16:17:46 +08:00
reqData := url.Values{
2025-10-23 18:02:29 +08:00
"db": {req.Bucket},
2025-09-19 16:17:46 +08:00
"q": {sql},
}
2025-10-23 18:02:29 +08:00
return client.getF2TVsResp(ctx, reqData, req.RespType)
2025-09-19 16:17:46 +08:00
}
2025-10-23 18:02:29 +08:00
func (client *influxClient) GetSSUPointAfterLimit(ctx context.Context, req *Request, limit int) ([]TV, error) {
sql := fmt.Sprintf("select %s from %s where station='%s' and device='%s' and time>=%dms and time<=%dms limit %d;",
req.SubPos, req.Measure, req.Station, req.MainPos, req.Begin, req.End, limit)
2025-09-19 16:17:46 +08:00
reqData := url.Values{
2025-10-23 18:02:29 +08:00
"db": {req.Bucket},
"q": {sql},
2025-09-19 16:17:46 +08:00
}
return client.getTVsResp(ctx, reqData, req.RespType)
}
2025-10-23 18:02:29 +08:00
func (client *influxClient) GetSSUPointsAfterLimit(ctx context.Context, req *Request, limit int) (map[string][]TV, error) {
sql := fmt.Sprintf("select %s from %s where station='%s' and device='%s' and time>=%dms and time<=%dms limit %d;",
req.SubPos, req.Measure, req.Station, req.MainPos, req.Begin, req.End, limit)
reqData := url.Values{
"db": {req.Bucket},
"q": {sql},
}
return client.getF2TVsResp(ctx, reqData, req.RespType)
}
func (client *influxClient) GetSSUPointsBeforeLimit(ctx context.Context, req *Request, limit int) (map[string][]TV, error) {
reqData := url.Values{
"db": {req.Bucket},
"q": {fmt.Sprintf("select %s from %s where station='%s' and device='%s' and time>%dms and time<=%dms order by time desc limit %d;",
req.SubPos, req.Measure, req.Station, req.MainPos, req.Begin, req.End, limit)}, // begin = req.End-20-20
}
return client.getF2TVsResp(ctx, reqData, req.RespType)
}
func (client *influxClient) WriteLinesData(ctx context.Context, bucket string, data []byte) error {
2025-09-19 16:17:46 +08:00
return client.writeLinesData(ctx, bucket, data, true)
}