diff --git a/cmd/saastool/daemon.go b/cmd/saastool/daemon.go index 068a3c6..3335483 100644 --- a/cmd/saastool/daemon.go +++ b/cmd/saastool/daemon.go @@ -55,6 +55,8 @@ func RunDaemon(args ...string) error { apiurls.BaseUrl = "https://srta.algo.com.cn" case "prd": apiurls.BaseUrl = "https://api.rta.qq.com" + case "dev": + apiurls.BaseUrl = "http://localhost:8080" default: err = fmt.Errorf("SRTA_ENV is not demo or prd") slog.Error("Env", "err", err) @@ -76,7 +78,11 @@ func RunDaemon(args ...string) error { mux.HandleFunc("/read", daemon.httpRead) mux.HandleFunc("/write", daemon.httpWrite) - daemonPort := ":8080" + daemonPort := os.Getenv("SRTA_PORT") + if strings.TrimSpace(daemonPort) == "" { + daemonPort = "8080" + } + daemonPort = ":" + daemonPort svrHttp := http.Server{ Addr: daemonPort, Handler: mux, @@ -275,6 +281,12 @@ func (d *Daemon) parseQuery(q url.Values, lineNum int) (writeItem *saasapi.Write writeItem = &saasapi.WriteItem{ Userid: userid, } + + // 临时存储,按index排序后再写入 + u8Map := make(map[uint64]uint8) + u32Map := make(map[uint64]uint32) + flagMap := make(map[uint64]*saasapi.FlagWithExpire) + for key, value := range q { parts := strings.Split(strings.ToLower(key), ".") if len(parts) == 2 { @@ -297,18 +309,10 @@ func (d *Daemon) parseQuery(q url.Values, lineNum int) (writeItem *saasapi.Write return } - if writeItem.GetWriteBytes() == nil { - writeItem.WriteBytes = &saasapi.Bytes{} + if _, exists := u8Map[index]; !exists { + u8Map[index] = uint8(nValue) } - if writeItem.GetWriteBytes().GetIndex_1()&(1<<(index-1)) > 0 { - // 已经被写入过数据,跳过 - continue - } - - writeItem.GetWriteBytes().Bytes = append(writeItem.GetWriteBytes().Bytes, uint8(nValue)) - writeItem.GetWriteBytes().Index_1 |= 1 << (index - 1) - case "u32": index, err := strconv.ParseUint(parts[1], 10, 8) if err != nil { @@ -326,17 +330,10 @@ func (d *Daemon) parseQuery(q url.Values, lineNum int) (writeItem *saasapi.Write return } - if writeItem.GetWriteUint32S() == nil { - writeItem.WriteUint32S = &saasapi.Uint32S{} + if _, exists := u32Map[index]; !exists { + u32Map[index] = uint32(nValue) } - if writeItem.GetWriteUint32S().GetIndex_1()&(1<<(index-1)) > 0 { - // 已经被写入过数据,跳过 - continue - } - - writeItem.GetWriteUint32S().Uint32S = append(writeItem.GetWriteUint32S().Uint32S, uint32(nValue)) - writeItem.GetWriteUint32S().Index_1 |= 1 << (index - 1) case "flag": index, err := strconv.ParseUint(parts[1], 10, 8) if err != nil { @@ -348,7 +345,11 @@ func (d *Daemon) parseQuery(q url.Values, lineNum int) (writeItem *saasapi.Write return } - flag := saasapi.FlagWithExpire{} + if _, exists := flagMap[index]; exists { + continue + } + + flag := &saasapi.FlagWithExpire{} switch strings.ToLower(value[0]) { case "true": flag.Flag = true @@ -378,20 +379,43 @@ func (d *Daemon) parseQuery(q url.Values, lineNum int) (writeItem *saasapi.Write } } - if writeItem.GetWriteFlagsWithExpire() == nil { - writeItem.WriteFlagsWithExpire = &saasapi.FlagsWithExpire{} - } - - if writeItem.GetWriteFlagsWithExpire().GetIndex_1()&(1<<(index-1)) > 0 { - // 已经被写入过数据,跳过 - continue - } - - writeItem.GetWriteFlagsWithExpire().FlagsWithExpire = append(writeItem.GetWriteFlagsWithExpire().FlagsWithExpire, &flag) - writeItem.GetWriteFlagsWithExpire().Index_1 |= 1 << (index - 1) + flagMap[index] = flag } } - } + + // 按index顺序写入u8 + if len(u8Map) > 0 { + writeItem.WriteBytes = &saasapi.Bytes{} + for i := uint64(1); i <= uint64(saasapi.MAX_U8); i++ { + if v, exists := u8Map[i]; exists { + writeItem.WriteBytes.Bytes = append(writeItem.WriteBytes.Bytes, v) + writeItem.WriteBytes.Index_1 |= 1 << (i - 1) + } + } + } + + // 按index顺序写入u32 + if len(u32Map) > 0 { + writeItem.WriteUint32S = &saasapi.Uint32S{} + for i := uint64(1); i <= uint64(saasapi.MAX_U32); i++ { + if v, exists := u32Map[i]; exists { + writeItem.WriteUint32S.Uint32S = append(writeItem.WriteUint32S.Uint32S, v) + writeItem.WriteUint32S.Index_1 |= 1 << (i - 1) + } + } + } + + // 按index顺序写入flag + if len(flagMap) > 0 { + writeItem.WriteFlagsWithExpire = &saasapi.FlagsWithExpire{} + for i := uint64(1); i <= uint64(saasapi.MAX_FLAG); i++ { + if v, exists := flagMap[i]; exists { + writeItem.WriteFlagsWithExpire.FlagsWithExpire = append(writeItem.WriteFlagsWithExpire.FlagsWithExpire, v) + writeItem.WriteFlagsWithExpire.Index_1 |= 1 << (i - 1) + } + } + } + return } diff --git a/datasample/.gitignore b/datasample/.gitignore new file mode 100644 index 0000000..c434074 --- /dev/null +++ b/datasample/.gitignore @@ -0,0 +1 @@ +_* \ No newline at end of file