From d4bf3297d41a63fe21796cea0556f2723575d763 Mon Sep 17 00:00:00 2001 From: algotao Date: Tue, 16 Dec 2025 17:19:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=89=AF=E5=86=99=E5=85=A5=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E5=87=8F=E5=B0=91=E4=BD=BF=E7=94=A8=E8=80=85?= =?UTF-8?q?=E5=A4=B1=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- cmd.pb.go | 373 +++++++++++++++++++++++++-------------- cmd.proto | 28 +-- cmd/saastool/daemon.go | 57 +----- datasample/test.txt | 1 + datasample/testv2.txt | 1 + docker/build_saastool.sh | 2 +- 7 files changed, 265 insertions(+), 199 deletions(-) create mode 100644 datasample/test.txt create mode 100644 datasample/testv2.txt diff --git a/.gitignore b/.gitignore index 47ea7a0..a46bb1e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ vendor/ *.out build/ *.lua -*.bak +*.bak \ No newline at end of file diff --git a/cmd.pb.go b/cmd.pb.go index b57867a..9083aee 100644 --- a/cmd.pb.go +++ b/cmd.pb.go @@ -1172,11 +1172,17 @@ func (x *Write) GetWriteItems() []*WriteItem { // WriteItem 写入命令 type WriteItem struct { - state protoimpl.MessageState `protogen:"open.v1"` - Userid string `protobuf:"bytes,1,opt,name=userid,proto3" json:"userid,omitempty"` // 用户ID - WriteBytes *Bytes `protobuf:"bytes,2,opt,name=write_bytes,json=writeBytes,proto3" json:"write_bytes,omitempty"` // byte区域 - WriteUint32S *Uint32S `protobuf:"bytes,3,opt,name=write_uint32s,json=writeUint32s,proto3" json:"write_uint32s,omitempty"` // uint32区域 - WriteFlagsWithExpire *FlagsWithExpire `protobuf:"bytes,4,opt,name=write_flags_with_expire,json=writeFlagsWithExpire,proto3" json:"write_flags_with_expire,omitempty"` // 标志位区域 + state protoimpl.MessageState `protogen:"open.v1"` + Userid string `protobuf:"bytes,1,opt,name=userid,proto3" json:"userid,omitempty"` // 用户ID + // Deprecated: Marked as deprecated in cmd.proto. + WriteBytes *Bytes `protobuf:"bytes,2,opt,name=write_bytes,json=writeBytes,proto3" json:"write_bytes,omitempty"` // byte区域。!!!弃用,请使用bytes_kv + // Deprecated: Marked as deprecated in cmd.proto. + WriteUint32S *Uint32S `protobuf:"bytes,3,opt,name=write_uint32s,json=writeUint32s,proto3" json:"write_uint32s,omitempty"` // uint32区域。!!!弃用,请使用uint32s_kv + // Deprecated: Marked as deprecated in cmd.proto. + WriteFlagsWithExpire *FlagsWithExpire `protobuf:"bytes,4,opt,name=write_flags_with_expire,json=writeFlagsWithExpire,proto3" json:"write_flags_with_expire,omitempty"` // 标志位区域。!!!弃用,请使用flags_with_expire_kv + BytesKv map[uint32]uint32 `protobuf:"bytes,5,rep,name=bytes_kv,json=bytesKv,proto3" json:"bytes_kv,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 写入byte,key为1-64索引值,value为0-255数值。index/value超限会丢弃 + Uint32SKv map[uint32]uint32 `protobuf:"bytes,6,rep,name=uint32s_kv,json=uint32sKv,proto3" json:"uint32s_kv,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 写入uint32,key为1-64索引值,value为uint32数值。index超限会丢弃 + FlagsWithExpireKv map[uint32]*FlagWithExpire `protobuf:"bytes,7,rep,name=flags_with_expire_kv,json=flagsWithExpireKv,proto3" json:"flags_with_expire_kv,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 写入标志位,key为1-64索引值,index超限会丢弃 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1218,6 +1224,7 @@ func (x *WriteItem) GetUserid() string { return "" } +// Deprecated: Marked as deprecated in cmd.proto. func (x *WriteItem) GetWriteBytes() *Bytes { if x != nil { return x.WriteBytes @@ -1225,6 +1232,7 @@ func (x *WriteItem) GetWriteBytes() *Bytes { return nil } +// Deprecated: Marked as deprecated in cmd.proto. func (x *WriteItem) GetWriteUint32S() *Uint32S { if x != nil { return x.WriteUint32S @@ -1232,6 +1240,7 @@ func (x *WriteItem) GetWriteUint32S() *Uint32S { return nil } +// Deprecated: Marked as deprecated in cmd.proto. func (x *WriteItem) GetWriteFlagsWithExpire() *FlagsWithExpire { if x != nil { return x.WriteFlagsWithExpire @@ -1239,6 +1248,27 @@ func (x *WriteItem) GetWriteFlagsWithExpire() *FlagsWithExpire { return nil } +func (x *WriteItem) GetBytesKv() map[uint32]uint32 { + if x != nil { + return x.BytesKv + } + return nil +} + +func (x *WriteItem) GetUint32SKv() map[uint32]uint32 { + if x != nil { + return x.Uint32SKv + } + return nil +} + +func (x *WriteItem) GetFlagsWithExpireKv() map[uint32]*FlagWithExpire { + if x != nil { + return x.FlagsWithExpireKv + } + return nil +} + // Bytes 写入byte区域 type Bytes struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -3471,7 +3501,7 @@ type ReadRes struct { state protoimpl.MessageState `protogen:"open.v1"` SuccCmdCount uint32 `protobuf:"varint,1,opt,name=succ_cmd_count,json=succCmdCount,proto3" json:"succ_cmd_count,omitempty"` // 成功的命令数量 FailCmdCount uint32 `protobuf:"varint,2,opt,name=fail_cmd_count,json=failCmdCount,proto3" json:"fail_cmd_count,omitempty"` // 失败的命令数量 - CmdRes []*ValueItem `protobuf:"bytes,3,rep,name=cmd_res,json=cmdRes,proto3" json:"cmd_res,omitempty"` // 返回的命令 + CmdRes []*ValueItem `protobuf:"bytes,3,rep,name=cmd_res,json=cmdRes,proto3" json:"cmd_res,omitempty"` // 返回的命令。 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3576,16 +3606,22 @@ func (x *WriteRes) GetFailedUserid() []string { // ValueItem 读取命令返回内容 type ValueItem struct { - state protoimpl.MessageState `protogen:"open.v1"` - CmdIndex uint32 `protobuf:"varint,1,opt,name=cmd_index,json=cmdIndex,proto3" json:"cmd_index,omitempty"` // 命令索引 - CmdCode CmdErrorCode `protobuf:"varint,2,opt,name=cmd_code,json=cmdCode,proto3,enum=saasapi.CmdErrorCode" json:"cmd_code,omitempty"` // 状态 - Bytes []byte `protobuf:"bytes,3,opt,name=bytes,proto3" json:"bytes,omitempty"` // byte区域 - Uint32S []uint32 `protobuf:"varint,4,rep,packed,name=uint32s,proto3" json:"uint32s,omitempty"` // uint32区域 - FlagsWithExpire []*FlagWithExpire `protobuf:"bytes,5,rep,name=flags_with_expire,json=flagsWithExpire,proto3" json:"flags_with_expire,omitempty"` // 标志位区域 - LastModifyTime uint32 `protobuf:"varint,6,opt,name=last_modify_time,json=lastModifyTime,proto3" json:"last_modify_time,omitempty"` // 最后修改时间 - Version uint32 `protobuf:"varint,7,opt,name=version,proto3" json:"version,omitempty"` // 存储版本 - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CmdIndex uint32 `protobuf:"varint,1,opt,name=cmd_index,json=cmdIndex,proto3" json:"cmd_index,omitempty"` // 命令索引 + CmdCode CmdErrorCode `protobuf:"varint,2,opt,name=cmd_code,json=cmdCode,proto3,enum=saasapi.CmdErrorCode" json:"cmd_code,omitempty"` // 状态 + // Deprecated: Marked as deprecated in cmd.proto. + Bytes []byte `protobuf:"bytes,3,opt,name=bytes,proto3" json:"bytes,omitempty"` // byte区域。!!!弃用 + // Deprecated: Marked as deprecated in cmd.proto. + Uint32S []uint32 `protobuf:"varint,4,rep,packed,name=uint32s,proto3" json:"uint32s,omitempty"` // uint32区域。!!!弃用 + // Deprecated: Marked as deprecated in cmd.proto. + FlagsWithExpire []*FlagWithExpire `protobuf:"bytes,5,rep,name=flags_with_expire,json=flagsWithExpire,proto3" json:"flags_with_expire,omitempty"` // 标志位区域。!!!弃用 + LastModifyTime uint32 `protobuf:"varint,6,opt,name=last_modify_time,json=lastModifyTime,proto3" json:"last_modify_time,omitempty"` // 最后修改时间 + Version uint32 `protobuf:"varint,7,opt,name=version,proto3" json:"version,omitempty"` // 存储版本 + BytesKv map[uint32]uint32 `protobuf:"bytes,8,rep,name=bytes_kv,json=bytesKv,proto3" json:"bytes_kv,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // byte区域 + Uint32SKv map[uint32]uint32 `protobuf:"bytes,9,rep,name=uint32s_kv,json=uint32sKv,proto3" json:"uint32s_kv,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // uint32区域 + FlagsWithExpireKv map[uint32]*FlagWithExpire `protobuf:"bytes,10,rep,name=flags_with_expire_kv,json=flagsWithExpireKv,proto3" json:"flags_with_expire_kv,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 标志位区域 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ValueItem) Reset() { @@ -3632,6 +3668,7 @@ func (x *ValueItem) GetCmdCode() CmdErrorCode { return CmdErrorCode_OK } +// Deprecated: Marked as deprecated in cmd.proto. func (x *ValueItem) GetBytes() []byte { if x != nil { return x.Bytes @@ -3639,6 +3676,7 @@ func (x *ValueItem) GetBytes() []byte { return nil } +// Deprecated: Marked as deprecated in cmd.proto. func (x *ValueItem) GetUint32S() []uint32 { if x != nil { return x.Uint32S @@ -3646,6 +3684,7 @@ func (x *ValueItem) GetUint32S() []uint32 { return nil } +// Deprecated: Marked as deprecated in cmd.proto. func (x *ValueItem) GetFlagsWithExpire() []*FlagWithExpire { if x != nil { return x.FlagsWithExpire @@ -3667,6 +3706,27 @@ func (x *ValueItem) GetVersion() uint32 { return 0 } +func (x *ValueItem) GetBytesKv() map[uint32]uint32 { + if x != nil { + return x.BytesKv + } + return nil +} + +func (x *ValueItem) GetUint32SKv() map[uint32]uint32 { + if x != nil { + return x.Uint32SKv + } + return nil +} + +func (x *ValueItem) GetFlagsWithExpireKv() map[uint32]*FlagWithExpire { + if x != nil { + return x.FlagsWithExpireKv + } + return nil +} + // TaskListRes 任务列表返回 type TaskListRes struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -5045,13 +5105,26 @@ const file_cmd_proto_rawDesc = "" + "\x05appid\x18\x02 \x01(\tR\x05appid\x12+\n" + "\x12is_clear_all_first\x18\x03 \x01(\bR\x0fisClearAllFirst\x123\n" + "\vwrite_items\x18\x04 \x03(\v2\x12.saasapi.WriteItemR\n" + - "writeItems\"\xdc\x01\n" + + "writeItems\"\x9b\x05\n" + "\tWriteItem\x12\x16\n" + - "\x06userid\x18\x01 \x01(\tR\x06userid\x12/\n" + - "\vwrite_bytes\x18\x02 \x01(\v2\x0e.saasapi.BytesR\n" + - "writeBytes\x125\n" + - "\rwrite_uint32s\x18\x03 \x01(\v2\x10.saasapi.Uint32sR\fwriteUint32s\x12O\n" + - "\x17write_flags_with_expire\x18\x04 \x01(\v2\x18.saasapi.FlagsWithExpireR\x14writeFlagsWithExpire\"6\n" + + "\x06userid\x18\x01 \x01(\tR\x06userid\x123\n" + + "\vwrite_bytes\x18\x02 \x01(\v2\x0e.saasapi.BytesB\x02\x18\x01R\n" + + "writeBytes\x129\n" + + "\rwrite_uint32s\x18\x03 \x01(\v2\x10.saasapi.Uint32sB\x02\x18\x01R\fwriteUint32s\x12S\n" + + "\x17write_flags_with_expire\x18\x04 \x01(\v2\x18.saasapi.FlagsWithExpireB\x02\x18\x01R\x14writeFlagsWithExpire\x12:\n" + + "\bbytes_kv\x18\x05 \x03(\v2\x1f.saasapi.WriteItem.BytesKvEntryR\abytesKv\x12@\n" + + "\n" + + "uint32s_kv\x18\x06 \x03(\v2!.saasapi.WriteItem.Uint32sKvEntryR\tuint32sKv\x12Z\n" + + "\x14flags_with_expire_kv\x18\a \x03(\v2).saasapi.WriteItem.FlagsWithExpireKvEntryR\x11flagsWithExpireKv\x1a:\n" + + "\fBytesKvEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\rR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\rR\x05value:\x028\x01\x1a<\n" + + "\x0eUint32sKvEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\rR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\rR\x05value:\x028\x01\x1a]\n" + + "\x16FlagsWithExpireKvEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\rR\x03key\x12-\n" + + "\x05value\x18\x02 \x01(\v2\x17.saasapi.FlagWithExpireR\x05value:\x028\x01\"6\n" + "\x05Bytes\x12\x14\n" + "\x05bytes\x18\x01 \x01(\fR\x05bytes\x12\x17\n" + "\aindex_1\x18\x02 \x01(\x04R\x06index1\"<\n" + @@ -5217,15 +5290,29 @@ const file_cmd_proto_rawDesc = "" + "\x0efail_cmd_count\x18\x02 \x01(\rR\ffailCmdCount\x12+\n" + "\acmd_res\x18\x03 \x03(\v2\x12.saasapi.ValueItemR\x06cmdRes\"/\n" + "\bWriteRes\x12#\n" + - "\rfailed_userid\x18\x03 \x03(\tR\ffailedUserid\"\x93\x02\n" + + "\rfailed_userid\x18\x03 \x03(\tR\ffailedUserid\"\xd2\x05\n" + "\tValueItem\x12\x1b\n" + "\tcmd_index\x18\x01 \x01(\rR\bcmdIndex\x120\n" + - "\bcmd_code\x18\x02 \x01(\x0e2\x15.saasapi.CmdErrorCodeR\acmdCode\x12\x14\n" + - "\x05bytes\x18\x03 \x01(\fR\x05bytes\x12\x18\n" + - "\auint32s\x18\x04 \x03(\rR\auint32s\x12C\n" + - "\x11flags_with_expire\x18\x05 \x03(\v2\x17.saasapi.FlagWithExpireR\x0fflagsWithExpire\x12(\n" + + "\bcmd_code\x18\x02 \x01(\x0e2\x15.saasapi.CmdErrorCodeR\acmdCode\x12\x18\n" + + "\x05bytes\x18\x03 \x01(\fB\x02\x18\x01R\x05bytes\x12\x1c\n" + + "\auint32s\x18\x04 \x03(\rB\x02\x18\x01R\auint32s\x12G\n" + + "\x11flags_with_expire\x18\x05 \x03(\v2\x17.saasapi.FlagWithExpireB\x02\x18\x01R\x0fflagsWithExpire\x12(\n" + "\x10last_modify_time\x18\x06 \x01(\rR\x0elastModifyTime\x12\x18\n" + - "\aversion\x18\a \x01(\rR\aversion\"2\n" + + "\aversion\x18\a \x01(\rR\aversion\x12:\n" + + "\bbytes_kv\x18\b \x03(\v2\x1f.saasapi.ValueItem.BytesKvEntryR\abytesKv\x12@\n" + + "\n" + + "uint32s_kv\x18\t \x03(\v2!.saasapi.ValueItem.Uint32sKvEntryR\tuint32sKv\x12Z\n" + + "\x14flags_with_expire_kv\x18\n" + + " \x03(\v2).saasapi.ValueItem.FlagsWithExpireKvEntryR\x11flagsWithExpireKv\x1a:\n" + + "\fBytesKvEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\rR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\rR\x05value:\x028\x01\x1a<\n" + + "\x0eUint32sKvEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\rR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\rR\x05value:\x028\x01\x1a]\n" + + "\x16FlagsWithExpireKvEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\rR\x03key\x12-\n" + + "\x05value\x18\x02 \x01(\v2\x17.saasapi.FlagWithExpireR\x05value:\x028\x01\"2\n" + "\vTaskListRes\x12#\n" + "\x05tasks\x18\x01 \x03(\v2\r.saasapi.TaskR\x05tasks\"\xa7\x01\n" + "\rTargetListRes\x12G\n" + @@ -5417,7 +5504,7 @@ func file_cmd_proto_rawDescGZIP() []byte { } var file_cmd_proto_enumTypes = make([]protoimpl.EnumInfo, 7) -var file_cmd_proto_msgTypes = make([]protoimpl.MessageInfo, 67) +var file_cmd_proto_msgTypes = make([]protoimpl.MessageInfo, 73) var file_cmd_proto_goTypes = []any{ (BindType)(0), // 0: saasapi.BindType (BindSourceType)(0), // 1: saasapi.BindSourceType @@ -5490,114 +5577,128 @@ var file_cmd_proto_goTypes = []any{ (*ExpData)(nil), // 68: saasapi.ExpData (*ExpBaseFields)(nil), // 69: saasapi.ExpBaseFields (*ExpGrantListRes)(nil), // 70: saasapi.ExpGrantListRes - nil, // 71: saasapi.TargetListRes.TargetListEntry - nil, // 72: saasapi.ExpData.ExtFieldsEntry - nil, // 73: saasapi.ExpData.GroupEntry + nil, // 71: saasapi.WriteItem.BytesKvEntry + nil, // 72: saasapi.WriteItem.Uint32sKvEntry + nil, // 73: saasapi.WriteItem.FlagsWithExpireKvEntry + nil, // 74: saasapi.ValueItem.BytesKvEntry + nil, // 75: saasapi.ValueItem.Uint32sKvEntry + nil, // 76: saasapi.ValueItem.FlagsWithExpireKvEntry + nil, // 77: saasapi.TargetListRes.TargetListEntry + nil, // 78: saasapi.ExpData.ExtFieldsEntry + nil, // 79: saasapi.ExpData.GroupEntry } var file_cmd_proto_depIdxs = []int32{ - 8, // 0: saasapi.SaasReq.info:type_name -> saasapi.Info - 9, // 1: saasapi.SaasReq.read:type_name -> saasapi.Read - 11, // 2: saasapi.SaasReq.write:type_name -> saasapi.Write - 17, // 3: saasapi.SaasReq.column_write:type_name -> saasapi.ColumnWrite - 18, // 4: saasapi.SaasReq.task_create:type_name -> saasapi.Task - 19, // 5: saasapi.SaasReq.task_list:type_name -> saasapi.TaskList - 20, // 6: saasapi.SaasReq.task_run:type_name -> saasapi.TaskRun - 21, // 7: saasapi.SaasReq.task_delete:type_name -> saasapi.TaskDelete - 22, // 8: saasapi.SaasReq.task_info:type_name -> saasapi.TaskInfo - 25, // 9: saasapi.SaasReq.target_list:type_name -> saasapi.TargetList - 26, // 10: saasapi.SaasReq.target_create:type_name -> saasapi.TargetCreate - 27, // 11: saasapi.SaasReq.target_delete:type_name -> saasapi.TargetDelete - 28, // 12: saasapi.SaasReq.bind_set:type_name -> saasapi.BindSet - 29, // 13: saasapi.SaasReq.bind_delete:type_name -> saasapi.BindDelete - 30, // 14: saasapi.SaasReq.grant_list:type_name -> saasapi.GrantList - 31, // 15: saasapi.SaasReq.grant_add:type_name -> saasapi.Grant - 31, // 16: saasapi.SaasReq.grant_delete:type_name -> saasapi.Grant - 32, // 17: saasapi.SaasReq.script_run:type_name -> saasapi.ScriptRun - 33, // 18: saasapi.SaasReq.script_create:type_name -> saasapi.ScriptCreate - 34, // 19: saasapi.SaasReq.script_list:type_name -> saasapi.ScriptList - 35, // 20: saasapi.SaasReq.script_delete:type_name -> saasapi.ScriptDelete - 36, // 21: saasapi.SaasReq.script_get:type_name -> saasapi.ScriptGet - 37, // 22: saasapi.SaasReq.script_use:type_name -> saasapi.ScriptUse - 38, // 23: saasapi.SaasReq.exp_list:type_name -> saasapi.ExpList - 39, // 24: saasapi.SaasReq.exp_get:type_name -> saasapi.ExpGet - 40, // 25: saasapi.SaasReq.exp_grant_list:type_name -> saasapi.ExpGrantList - 41, // 26: saasapi.SaasReq.exp_grant_add:type_name -> saasapi.ExpGrant - 41, // 27: saasapi.SaasReq.exp_grant_delete:type_name -> saasapi.ExpGrant - 10, // 28: saasapi.Read.read_items:type_name -> saasapi.ReadItem - 12, // 29: saasapi.Write.write_items:type_name -> saasapi.WriteItem - 13, // 30: saasapi.WriteItem.write_bytes:type_name -> saasapi.Bytes - 14, // 31: saasapi.WriteItem.write_uint32s:type_name -> saasapi.Uint32s - 15, // 32: saasapi.WriteItem.write_flags_with_expire:type_name -> saasapi.FlagsWithExpire - 16, // 33: saasapi.FlagsWithExpire.flags_with_expire:type_name -> saasapi.FlagWithExpire - 13, // 34: saasapi.ColumnWrite.write_bytes:type_name -> saasapi.Bytes - 14, // 35: saasapi.ColumnWrite.write_uint32s:type_name -> saasapi.Uint32s - 15, // 36: saasapi.ColumnWrite.write_flags_with_expire:type_name -> saasapi.FlagsWithExpire - 23, // 37: saasapi.Task.task_file_infos:type_name -> saasapi.FileInfo - 4, // 38: saasapi.Task.status:type_name -> saasapi.TaskStatus - 4, // 39: saasapi.TaskList.status_filter:type_name -> saasapi.TaskStatus - 24, // 40: saasapi.FileInfo.file_blocks:type_name -> saasapi.FileBlock - 53, // 41: saasapi.BindSet.binds:type_name -> saasapi.Bind - 53, // 42: saasapi.BindDelete.binds:type_name -> saasapi.Bind - 5, // 43: saasapi.ScriptRun.os:type_name -> saasapi.OS - 2, // 44: saasapi.SaasRes.code:type_name -> saasapi.ErrorCode - 44, // 45: saasapi.SaasRes.info_res:type_name -> saasapi.InfoRes - 45, // 46: saasapi.SaasRes.read_res:type_name -> saasapi.ReadRes - 46, // 47: saasapi.SaasRes.write_res:type_name -> saasapi.WriteRes - 18, // 48: saasapi.SaasRes.task_create_res:type_name -> saasapi.Task - 48, // 49: saasapi.SaasRes.task_list_res:type_name -> saasapi.TaskListRes - 18, // 50: saasapi.SaasRes.task_run_res:type_name -> saasapi.Task - 18, // 51: saasapi.SaasRes.task_delete_res:type_name -> saasapi.Task - 18, // 52: saasapi.SaasRes.task_info_res:type_name -> saasapi.Task - 49, // 53: saasapi.SaasRes.target_list_res:type_name -> saasapi.TargetListRes - 50, // 54: saasapi.SaasRes.target_create_res:type_name -> saasapi.TargetCreateRes - 51, // 55: saasapi.SaasRes.target_delete_res:type_name -> saasapi.TargetDeleteRes - 54, // 56: saasapi.SaasRes.bind_set_res:type_name -> saasapi.BindSetRes - 55, // 57: saasapi.SaasRes.bind_delete_res:type_name -> saasapi.BindDeleteRes - 57, // 58: saasapi.SaasRes.grant_list_res:type_name -> saasapi.GrantListRes - 31, // 59: saasapi.SaasRes.grant_add_res:type_name -> saasapi.Grant - 31, // 60: saasapi.SaasRes.grant_delete_res:type_name -> saasapi.Grant - 58, // 61: saasapi.SaasRes.script_run_res:type_name -> saasapi.ScriptRunRes - 60, // 62: saasapi.SaasRes.script_create_res:type_name -> saasapi.ScriptCreateRes - 61, // 63: saasapi.SaasRes.script_list_res:type_name -> saasapi.ScriptListRes - 63, // 64: saasapi.SaasRes.script_delete_res:type_name -> saasapi.ScriptDeleteRes - 62, // 65: saasapi.SaasRes.script_get_res:type_name -> saasapi.ScriptGetRes - 64, // 66: saasapi.SaasRes.script_use_res:type_name -> saasapi.ScriptUseRes - 65, // 67: saasapi.SaasRes.exp_list_res:type_name -> saasapi.ExpListRes - 67, // 68: saasapi.SaasRes.exp_get_res:type_name -> saasapi.ExpGetRes - 70, // 69: saasapi.SaasRes.exp_grant_list_res:type_name -> saasapi.ExpGrantListRes - 41, // 70: saasapi.SaasRes.exp_grant_add_res:type_name -> saasapi.ExpGrant - 41, // 71: saasapi.SaasRes.exp_grant_delete_res:type_name -> saasapi.ExpGrant - 43, // 72: saasapi.InfoRes.dataspace:type_name -> saasapi.DataSpace - 47, // 73: saasapi.ReadRes.cmd_res:type_name -> saasapi.ValueItem - 3, // 74: saasapi.ValueItem.cmd_code:type_name -> saasapi.CmdErrorCode - 16, // 75: saasapi.ValueItem.flags_with_expire:type_name -> saasapi.FlagWithExpire - 18, // 76: saasapi.TaskListRes.tasks:type_name -> saasapi.Task - 71, // 77: saasapi.TargetListRes.target_list:type_name -> saasapi.TargetListRes.TargetListEntry - 53, // 78: saasapi.Binds.binds:type_name -> saasapi.Bind - 0, // 79: saasapi.Bind.bind_type:type_name -> saasapi.BindType - 1, // 80: saasapi.Bind.bind_source:type_name -> saasapi.BindSourceType - 56, // 81: saasapi.BindSetRes.errors:type_name -> saasapi.BindError - 56, // 82: saasapi.BindDeleteRes.errors:type_name -> saasapi.BindError - 31, // 83: saasapi.GrantListRes.from:type_name -> saasapi.Grant - 31, // 84: saasapi.GrantListRes.to:type_name -> saasapi.Grant - 59, // 85: saasapi.ScriptCreateRes.script_info:type_name -> saasapi.ScriptInfo - 59, // 86: saasapi.ScriptListRes.script_info:type_name -> saasapi.ScriptInfo - 59, // 87: saasapi.ScriptGetRes.script_info:type_name -> saasapi.ScriptInfo - 59, // 88: saasapi.ScriptDeleteRes.script_info:type_name -> saasapi.ScriptInfo - 59, // 89: saasapi.ScriptUseRes.script_info:type_name -> saasapi.ScriptInfo - 66, // 90: saasapi.ExpListRes.buckets:type_name -> saasapi.ExpBucket - 68, // 91: saasapi.ExpGetRes.exp_data:type_name -> saasapi.ExpData - 69, // 92: saasapi.ExpData.base_fields:type_name -> saasapi.ExpBaseFields - 72, // 93: saasapi.ExpData.ext_fields:type_name -> saasapi.ExpData.ExtFieldsEntry - 73, // 94: saasapi.ExpData.group:type_name -> saasapi.ExpData.GroupEntry - 41, // 95: saasapi.ExpGrantListRes.from:type_name -> saasapi.ExpGrant - 41, // 96: saasapi.ExpGrantListRes.to:type_name -> saasapi.ExpGrant - 52, // 97: saasapi.TargetListRes.TargetListEntry.value:type_name -> saasapi.Binds - 98, // [98:98] is the sub-list for method output_type - 98, // [98:98] is the sub-list for method input_type - 98, // [98:98] is the sub-list for extension type_name - 98, // [98:98] is the sub-list for extension extendee - 0, // [0:98] is the sub-list for field type_name + 8, // 0: saasapi.SaasReq.info:type_name -> saasapi.Info + 9, // 1: saasapi.SaasReq.read:type_name -> saasapi.Read + 11, // 2: saasapi.SaasReq.write:type_name -> saasapi.Write + 17, // 3: saasapi.SaasReq.column_write:type_name -> saasapi.ColumnWrite + 18, // 4: saasapi.SaasReq.task_create:type_name -> saasapi.Task + 19, // 5: saasapi.SaasReq.task_list:type_name -> saasapi.TaskList + 20, // 6: saasapi.SaasReq.task_run:type_name -> saasapi.TaskRun + 21, // 7: saasapi.SaasReq.task_delete:type_name -> saasapi.TaskDelete + 22, // 8: saasapi.SaasReq.task_info:type_name -> saasapi.TaskInfo + 25, // 9: saasapi.SaasReq.target_list:type_name -> saasapi.TargetList + 26, // 10: saasapi.SaasReq.target_create:type_name -> saasapi.TargetCreate + 27, // 11: saasapi.SaasReq.target_delete:type_name -> saasapi.TargetDelete + 28, // 12: saasapi.SaasReq.bind_set:type_name -> saasapi.BindSet + 29, // 13: saasapi.SaasReq.bind_delete:type_name -> saasapi.BindDelete + 30, // 14: saasapi.SaasReq.grant_list:type_name -> saasapi.GrantList + 31, // 15: saasapi.SaasReq.grant_add:type_name -> saasapi.Grant + 31, // 16: saasapi.SaasReq.grant_delete:type_name -> saasapi.Grant + 32, // 17: saasapi.SaasReq.script_run:type_name -> saasapi.ScriptRun + 33, // 18: saasapi.SaasReq.script_create:type_name -> saasapi.ScriptCreate + 34, // 19: saasapi.SaasReq.script_list:type_name -> saasapi.ScriptList + 35, // 20: saasapi.SaasReq.script_delete:type_name -> saasapi.ScriptDelete + 36, // 21: saasapi.SaasReq.script_get:type_name -> saasapi.ScriptGet + 37, // 22: saasapi.SaasReq.script_use:type_name -> saasapi.ScriptUse + 38, // 23: saasapi.SaasReq.exp_list:type_name -> saasapi.ExpList + 39, // 24: saasapi.SaasReq.exp_get:type_name -> saasapi.ExpGet + 40, // 25: saasapi.SaasReq.exp_grant_list:type_name -> saasapi.ExpGrantList + 41, // 26: saasapi.SaasReq.exp_grant_add:type_name -> saasapi.ExpGrant + 41, // 27: saasapi.SaasReq.exp_grant_delete:type_name -> saasapi.ExpGrant + 10, // 28: saasapi.Read.read_items:type_name -> saasapi.ReadItem + 12, // 29: saasapi.Write.write_items:type_name -> saasapi.WriteItem + 13, // 30: saasapi.WriteItem.write_bytes:type_name -> saasapi.Bytes + 14, // 31: saasapi.WriteItem.write_uint32s:type_name -> saasapi.Uint32s + 15, // 32: saasapi.WriteItem.write_flags_with_expire:type_name -> saasapi.FlagsWithExpire + 71, // 33: saasapi.WriteItem.bytes_kv:type_name -> saasapi.WriteItem.BytesKvEntry + 72, // 34: saasapi.WriteItem.uint32s_kv:type_name -> saasapi.WriteItem.Uint32sKvEntry + 73, // 35: saasapi.WriteItem.flags_with_expire_kv:type_name -> saasapi.WriteItem.FlagsWithExpireKvEntry + 16, // 36: saasapi.FlagsWithExpire.flags_with_expire:type_name -> saasapi.FlagWithExpire + 13, // 37: saasapi.ColumnWrite.write_bytes:type_name -> saasapi.Bytes + 14, // 38: saasapi.ColumnWrite.write_uint32s:type_name -> saasapi.Uint32s + 15, // 39: saasapi.ColumnWrite.write_flags_with_expire:type_name -> saasapi.FlagsWithExpire + 23, // 40: saasapi.Task.task_file_infos:type_name -> saasapi.FileInfo + 4, // 41: saasapi.Task.status:type_name -> saasapi.TaskStatus + 4, // 42: saasapi.TaskList.status_filter:type_name -> saasapi.TaskStatus + 24, // 43: saasapi.FileInfo.file_blocks:type_name -> saasapi.FileBlock + 53, // 44: saasapi.BindSet.binds:type_name -> saasapi.Bind + 53, // 45: saasapi.BindDelete.binds:type_name -> saasapi.Bind + 5, // 46: saasapi.ScriptRun.os:type_name -> saasapi.OS + 2, // 47: saasapi.SaasRes.code:type_name -> saasapi.ErrorCode + 44, // 48: saasapi.SaasRes.info_res:type_name -> saasapi.InfoRes + 45, // 49: saasapi.SaasRes.read_res:type_name -> saasapi.ReadRes + 46, // 50: saasapi.SaasRes.write_res:type_name -> saasapi.WriteRes + 18, // 51: saasapi.SaasRes.task_create_res:type_name -> saasapi.Task + 48, // 52: saasapi.SaasRes.task_list_res:type_name -> saasapi.TaskListRes + 18, // 53: saasapi.SaasRes.task_run_res:type_name -> saasapi.Task + 18, // 54: saasapi.SaasRes.task_delete_res:type_name -> saasapi.Task + 18, // 55: saasapi.SaasRes.task_info_res:type_name -> saasapi.Task + 49, // 56: saasapi.SaasRes.target_list_res:type_name -> saasapi.TargetListRes + 50, // 57: saasapi.SaasRes.target_create_res:type_name -> saasapi.TargetCreateRes + 51, // 58: saasapi.SaasRes.target_delete_res:type_name -> saasapi.TargetDeleteRes + 54, // 59: saasapi.SaasRes.bind_set_res:type_name -> saasapi.BindSetRes + 55, // 60: saasapi.SaasRes.bind_delete_res:type_name -> saasapi.BindDeleteRes + 57, // 61: saasapi.SaasRes.grant_list_res:type_name -> saasapi.GrantListRes + 31, // 62: saasapi.SaasRes.grant_add_res:type_name -> saasapi.Grant + 31, // 63: saasapi.SaasRes.grant_delete_res:type_name -> saasapi.Grant + 58, // 64: saasapi.SaasRes.script_run_res:type_name -> saasapi.ScriptRunRes + 60, // 65: saasapi.SaasRes.script_create_res:type_name -> saasapi.ScriptCreateRes + 61, // 66: saasapi.SaasRes.script_list_res:type_name -> saasapi.ScriptListRes + 63, // 67: saasapi.SaasRes.script_delete_res:type_name -> saasapi.ScriptDeleteRes + 62, // 68: saasapi.SaasRes.script_get_res:type_name -> saasapi.ScriptGetRes + 64, // 69: saasapi.SaasRes.script_use_res:type_name -> saasapi.ScriptUseRes + 65, // 70: saasapi.SaasRes.exp_list_res:type_name -> saasapi.ExpListRes + 67, // 71: saasapi.SaasRes.exp_get_res:type_name -> saasapi.ExpGetRes + 70, // 72: saasapi.SaasRes.exp_grant_list_res:type_name -> saasapi.ExpGrantListRes + 41, // 73: saasapi.SaasRes.exp_grant_add_res:type_name -> saasapi.ExpGrant + 41, // 74: saasapi.SaasRes.exp_grant_delete_res:type_name -> saasapi.ExpGrant + 43, // 75: saasapi.InfoRes.dataspace:type_name -> saasapi.DataSpace + 47, // 76: saasapi.ReadRes.cmd_res:type_name -> saasapi.ValueItem + 3, // 77: saasapi.ValueItem.cmd_code:type_name -> saasapi.CmdErrorCode + 16, // 78: saasapi.ValueItem.flags_with_expire:type_name -> saasapi.FlagWithExpire + 74, // 79: saasapi.ValueItem.bytes_kv:type_name -> saasapi.ValueItem.BytesKvEntry + 75, // 80: saasapi.ValueItem.uint32s_kv:type_name -> saasapi.ValueItem.Uint32sKvEntry + 76, // 81: saasapi.ValueItem.flags_with_expire_kv:type_name -> saasapi.ValueItem.FlagsWithExpireKvEntry + 18, // 82: saasapi.TaskListRes.tasks:type_name -> saasapi.Task + 77, // 83: saasapi.TargetListRes.target_list:type_name -> saasapi.TargetListRes.TargetListEntry + 53, // 84: saasapi.Binds.binds:type_name -> saasapi.Bind + 0, // 85: saasapi.Bind.bind_type:type_name -> saasapi.BindType + 1, // 86: saasapi.Bind.bind_source:type_name -> saasapi.BindSourceType + 56, // 87: saasapi.BindSetRes.errors:type_name -> saasapi.BindError + 56, // 88: saasapi.BindDeleteRes.errors:type_name -> saasapi.BindError + 31, // 89: saasapi.GrantListRes.from:type_name -> saasapi.Grant + 31, // 90: saasapi.GrantListRes.to:type_name -> saasapi.Grant + 59, // 91: saasapi.ScriptCreateRes.script_info:type_name -> saasapi.ScriptInfo + 59, // 92: saasapi.ScriptListRes.script_info:type_name -> saasapi.ScriptInfo + 59, // 93: saasapi.ScriptGetRes.script_info:type_name -> saasapi.ScriptInfo + 59, // 94: saasapi.ScriptDeleteRes.script_info:type_name -> saasapi.ScriptInfo + 59, // 95: saasapi.ScriptUseRes.script_info:type_name -> saasapi.ScriptInfo + 66, // 96: saasapi.ExpListRes.buckets:type_name -> saasapi.ExpBucket + 68, // 97: saasapi.ExpGetRes.exp_data:type_name -> saasapi.ExpData + 69, // 98: saasapi.ExpData.base_fields:type_name -> saasapi.ExpBaseFields + 78, // 99: saasapi.ExpData.ext_fields:type_name -> saasapi.ExpData.ExtFieldsEntry + 79, // 100: saasapi.ExpData.group:type_name -> saasapi.ExpData.GroupEntry + 41, // 101: saasapi.ExpGrantListRes.from:type_name -> saasapi.ExpGrant + 41, // 102: saasapi.ExpGrantListRes.to:type_name -> saasapi.ExpGrant + 16, // 103: saasapi.WriteItem.FlagsWithExpireKvEntry.value:type_name -> saasapi.FlagWithExpire + 16, // 104: saasapi.ValueItem.FlagsWithExpireKvEntry.value:type_name -> saasapi.FlagWithExpire + 52, // 105: saasapi.TargetListRes.TargetListEntry.value:type_name -> saasapi.Binds + 106, // [106:106] is the sub-list for method output_type + 106, // [106:106] is the sub-list for method input_type + 106, // [106:106] is the sub-list for extension type_name + 106, // [106:106] is the sub-list for extension extendee + 0, // [0:106] is the sub-list for field type_name } func init() { file_cmd_proto_init() } @@ -5670,7 +5771,7 @@ func file_cmd_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_cmd_proto_rawDesc), len(file_cmd_proto_rawDesc)), NumEnums: 7, - NumMessages: 67, + NumMessages: 73, NumExtensions: 0, NumServices: 0, }, diff --git a/cmd.proto b/cmd.proto index 3f988c8..03ea432 100644 --- a/cmd.proto +++ b/cmd.proto @@ -73,21 +73,24 @@ message Write { // WriteItem 写入命令 message WriteItem { string userid = 1; // 用户ID - Bytes write_bytes = 2; // byte区域 - Uint32s write_uint32s = 3; // uint32区域 - FlagsWithExpire write_flags_with_expire = 4; // 标志位区域 + Bytes write_bytes = 2 [deprecated = true]; // byte区域。!!!弃用,请使用bytes_kv + Uint32s write_uint32s = 3 [deprecated = true]; // uint32区域。!!!弃用,请使用uint32s_kv + FlagsWithExpire write_flags_with_expire = 4 [deprecated = true]; // 标志位区域。!!!弃用,请使用flags_with_expire_kv + map bytes_kv = 5; // 写入byte,key为1-64索引值,value为0-255数值。index/value超限会丢弃 + map uint32s_kv = 6; // 写入uint32,key为1-64索引值,value为uint32数值。index超限会丢弃 + map flags_with_expire_kv = 7; // 写入标志位,key为1-64索引值,index超限会丢弃 } // Bytes 写入byte区域 message Bytes { - bytes bytes = 1; // 写入的byte - uint64 index_1 = 2; // 写入byte的索引值(0..63) + bytes bytes = 1 ; // 写入的byte + uint64 index_1 = 2 ; // 写入byte的索引值(0..63) } // Uint32s 写入uint32区域 message Uint32s { - repeated uint32 uint32s = 1; // 写入的uint32 - uint64 index_1 = 2; // 写入uint32的索引值(0..7) 最多 8 个 + repeated uint32 uint32s = 1; // 写入的uint32 + uint64 index_1 = 2; // 写入uint32的索引值(0..7) 最多 8 个 } // FlagsWithExpire 写入标志位区域 @@ -330,7 +333,7 @@ message InfoRes { message ReadRes { uint32 succ_cmd_count = 1; // 成功的命令数量 uint32 fail_cmd_count = 2; // 失败的命令数量 - repeated ValueItem cmd_res = 3; // 返回的命令 + repeated ValueItem cmd_res = 3 ; // 返回的命令。 } // WriteRes 写记录返回 @@ -344,11 +347,14 @@ message WriteRes { message ValueItem { uint32 cmd_index = 1; // 命令索引 CmdErrorCode cmd_code = 2; // 状态 - bytes bytes = 3; // byte区域 - repeated uint32 uint32s = 4; // uint32区域 - repeated FlagWithExpire flags_with_expire = 5; // 标志位区域 + bytes bytes = 3 [deprecated = true]; // byte区域。!!!弃用 + repeated uint32 uint32s = 4 [deprecated = true]; // uint32区域。!!!弃用 + repeated FlagWithExpire flags_with_expire = 5 [deprecated = true]; // 标志位区域。!!!弃用 uint32 last_modify_time = 6; // 最后修改时间 uint32 version = 7; // 存储版本 + map bytes_kv = 8; // byte区域 + map uint32s_kv = 9; // uint32区域 + map flags_with_expire_kv = 10; // 标志位区域 } // TaskListRes 任务列表返回 diff --git a/cmd/saastool/daemon.go b/cmd/saastool/daemon.go index 3335483..50cb894 100644 --- a/cmd/saastool/daemon.go +++ b/cmd/saastool/daemon.go @@ -279,14 +279,12 @@ func (d *Daemon) parseQuery(q url.Values, lineNum int) (writeItem *saasapi.Write } writeItem = &saasapi.WriteItem{ - Userid: userid, + Userid: userid, + BytesKv: map[uint32]uint32{}, + Uint32SKv: map[uint32]uint32{}, + FlagsWithExpireKv: map[uint32]*saasapi.FlagWithExpire{}, } - // 临时存储,按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 { @@ -309,9 +307,7 @@ func (d *Daemon) parseQuery(q url.Values, lineNum int) (writeItem *saasapi.Write return } - if _, exists := u8Map[index]; !exists { - u8Map[index] = uint8(nValue) - } + writeItem.BytesKv[uint32(index)] = uint32(nValue) case "u32": index, err := strconv.ParseUint(parts[1], 10, 8) @@ -330,9 +326,7 @@ func (d *Daemon) parseQuery(q url.Values, lineNum int) (writeItem *saasapi.Write return } - if _, exists := u32Map[index]; !exists { - u32Map[index] = uint32(nValue) - } + writeItem.Uint32SKv[uint32(index)] = uint32(nValue) case "flag": index, err := strconv.ParseUint(parts[1], 10, 8) @@ -345,10 +339,6 @@ func (d *Daemon) parseQuery(q url.Values, lineNum int) (writeItem *saasapi.Write return } - if _, exists := flagMap[index]; exists { - continue - } - flag := &saasapi.FlagWithExpire{} switch strings.ToLower(value[0]) { case "true": @@ -379,40 +369,7 @@ func (d *Daemon) parseQuery(q url.Values, lineNum int) (writeItem *saasapi.Write } } - 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) + writeItem.FlagsWithExpireKv[uint32(index)] = flag } } } diff --git a/datasample/test.txt b/datasample/test.txt new file mode 100644 index 0000000..1aaf1ee --- /dev/null +++ b/datasample/test.txt @@ -0,0 +1 @@ +{"userid":"test_user", "writeBytes": {"bytes": "AQ==", "index1": "1"}, "writeUint32s": {"uint32s": [112547657,28270208],"index1": "3"}} \ No newline at end of file diff --git a/datasample/testv2.txt b/datasample/testv2.txt new file mode 100644 index 0000000..0e339ae --- /dev/null +++ b/datasample/testv2.txt @@ -0,0 +1 @@ +{"userid":"test_user", "bytesKv": {"1": 1,"2": 2,"3": 3,"4": 4,"5": 50,"6": 6,"40": 40,"55": 55,"100": 100}, "uint32sKv": {"1": 100000,"2": 200000,"3": 300000,"4": 400000,"5": 500000,"6": 600000,"55": 5500000,"100": 10000000},"flagsWithExpireKv": {"1": {"flag": true,"expire": 1865854386},"2": {"flag": false,"expire": 1865854386}, "64": {"expire": 1765854386}}} \ No newline at end of file diff --git a/docker/build_saastool.sh b/docker/build_saastool.sh index e647364..f6ab72c 100755 --- a/docker/build_saastool.sh +++ b/docker/build_saastool.sh @@ -4,7 +4,7 @@ set -e docker buildx build --platform linux/amd64 \ -t rta-docker.pkg.coding.net/public/docker/saastool:latest \ - -t rta-docker.pkg.coding.net/public/docker/saastool:2025121210 \ + -t rta-docker.pkg.coding.net/public/docker/saastool:2025121617 \ -o type=registry \ -f saastool.Dockerfile \ ../ ;