diff --git a/build/rpc.json b/build/rpc.json index ab3c719..f7214ea 100644 --- a/build/rpc.json +++ b/build/rpc.json @@ -1103,6 +1103,28 @@ "admin" ], "isDeprecated": false + }, + { + "name": "uploadDeployFileToAPINode", + "requestMessageName": "UploadDeployFileToAPINodeRequest", + "responseMessageName": "RPCSuccess", + "code": "rpc uploadDeployFileToAPINode(UploadDeployFileToAPINodeRequest) returns (RPCSuccess);", + "doc": "上传节点安装文件", + "roles": [ + "admin" + ], + "isDeprecated": false + }, + { + "name": "findLatestDeployFiles", + "requestMessageName": "FindLatestDeployFilesRequest", + "responseMessageName": "FindLatestDeployFilesResponse", + "code": "rpc findLatestDeployFiles(FindLatestDeployFilesRequest) returns (FindLatestDeployFilesResponse);", + "doc": "查找已有节点安装文件信息", + "roles": [ + "admin" + ], + "isDeprecated": false } ], "filename": "service_api_node.proto", @@ -18171,6 +18193,16 @@ "code": "message FindIPLibraryFileResponse {\n\tIPLibraryFile ipLibraryFile = 1;\n}", "doc": "" }, + { + "name": "FindLatestDeployFilesRequest", + "code": "message FindLatestDeployFilesRequest {\n\n}", + "doc": "查找已有节点安装文件信息" + }, + { + "name": "FindLatestDeployFilesResponse", + "code": "message FindLatestDeployFilesResponse {\n\trepeated DeployFile nodeDeployFiles = 1; // 边缘节点\n\trepeated DeployFile nsNodeDeployFiles = 2; // NS节点\n\n\n\tmessage DeployFile {\n\t\tstring os = 1; // 操作系统代号\n\t\tstring arch = 2; // 架构\n\t\tstring version = 3; // 版本号\n\t}\n}", + "doc": "" + }, { "name": "FindLatestIPLibraryWithTypeRequest", "code": "message FindLatestIPLibraryWithTypeRequest {\n\tstring type = 1;\n}", @@ -22031,6 +22063,11 @@ "code": "message UploadAPINodeFileResponse {\n\n}", "doc": "" }, + { + "name": "UploadDeployFileToAPINodeRequest", + "code": "message UploadDeployFileToAPINodeRequest {\n\tstring filename = 1; // 文件名\n\tstring sum = 2; // 整个文件的SUM值\n\tbytes chunkData = 3; // 片段数据\n\tbool isFirstChunk = 4; // 是否为第一个片段\n\tbool isLastChunk = 5; // 是否为最后一个片段\n}", + "doc": "上传节点安装文件" + }, { "name": "UploadMetricStatsRequest", "code": "message UploadMetricStatsRequest {\n\tint64 serverId = 1;\n\tstring time = 2;\n\tint64 count = 3;\n\tfloat total = 4;\n\tint32 version = 5;\n\tint64 itemId = 6;\n\trepeated UploadingMetricStat metricStats = 7;\n}", diff --git a/pkg/rpc/pb/service_api_node.pb.go b/pkg/rpc/pb/service_api_node.pb.go index 41f7ae0..17f46cd 100644 --- a/pkg/rpc/pb/service_api_node.pb.go +++ b/pkg/rpc/pb/service_api_node.pb.go @@ -1128,6 +1128,243 @@ func (*UploadAPINodeFileResponse) Descriptor() ([]byte, []int) { return file_service_api_node_proto_rawDescGZIP(), []int{19} } +// 上传节点安装文件 +type UploadDeployFileToAPINodeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Filename string `protobuf:"bytes,1,opt,name=filename,proto3" json:"filename,omitempty"` // 文件名 + Sum string `protobuf:"bytes,2,opt,name=sum,proto3" json:"sum,omitempty"` // 整个文件的SUM值 + ChunkData []byte `protobuf:"bytes,3,opt,name=chunkData,proto3" json:"chunkData,omitempty"` // 片段数据 + IsFirstChunk bool `protobuf:"varint,4,opt,name=isFirstChunk,proto3" json:"isFirstChunk,omitempty"` // 是否为第一个片段 + IsLastChunk bool `protobuf:"varint,5,opt,name=isLastChunk,proto3" json:"isLastChunk,omitempty"` // 是否为最后一个片段 +} + +func (x *UploadDeployFileToAPINodeRequest) Reset() { + *x = UploadDeployFileToAPINodeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_api_node_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UploadDeployFileToAPINodeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UploadDeployFileToAPINodeRequest) ProtoMessage() {} + +func (x *UploadDeployFileToAPINodeRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_api_node_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UploadDeployFileToAPINodeRequest.ProtoReflect.Descriptor instead. +func (*UploadDeployFileToAPINodeRequest) Descriptor() ([]byte, []int) { + return file_service_api_node_proto_rawDescGZIP(), []int{20} +} + +func (x *UploadDeployFileToAPINodeRequest) GetFilename() string { + if x != nil { + return x.Filename + } + return "" +} + +func (x *UploadDeployFileToAPINodeRequest) GetSum() string { + if x != nil { + return x.Sum + } + return "" +} + +func (x *UploadDeployFileToAPINodeRequest) GetChunkData() []byte { + if x != nil { + return x.ChunkData + } + return nil +} + +func (x *UploadDeployFileToAPINodeRequest) GetIsFirstChunk() bool { + if x != nil { + return x.IsFirstChunk + } + return false +} + +func (x *UploadDeployFileToAPINodeRequest) GetIsLastChunk() bool { + if x != nil { + return x.IsLastChunk + } + return false +} + +// 查找已有节点安装文件信息 +type FindLatestDeployFilesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *FindLatestDeployFilesRequest) Reset() { + *x = FindLatestDeployFilesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_api_node_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindLatestDeployFilesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindLatestDeployFilesRequest) ProtoMessage() {} + +func (x *FindLatestDeployFilesRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_api_node_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FindLatestDeployFilesRequest.ProtoReflect.Descriptor instead. +func (*FindLatestDeployFilesRequest) Descriptor() ([]byte, []int) { + return file_service_api_node_proto_rawDescGZIP(), []int{21} +} + +type FindLatestDeployFilesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NodeDeployFiles []*FindLatestDeployFilesResponse_DeployFile `protobuf:"bytes,1,rep,name=nodeDeployFiles,proto3" json:"nodeDeployFiles,omitempty"` // 边缘节点 + NsNodeDeployFiles []*FindLatestDeployFilesResponse_DeployFile `protobuf:"bytes,2,rep,name=nsNodeDeployFiles,proto3" json:"nsNodeDeployFiles,omitempty"` // NS节点 +} + +func (x *FindLatestDeployFilesResponse) Reset() { + *x = FindLatestDeployFilesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_api_node_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindLatestDeployFilesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindLatestDeployFilesResponse) ProtoMessage() {} + +func (x *FindLatestDeployFilesResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_api_node_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FindLatestDeployFilesResponse.ProtoReflect.Descriptor instead. +func (*FindLatestDeployFilesResponse) Descriptor() ([]byte, []int) { + return file_service_api_node_proto_rawDescGZIP(), []int{22} +} + +func (x *FindLatestDeployFilesResponse) GetNodeDeployFiles() []*FindLatestDeployFilesResponse_DeployFile { + if x != nil { + return x.NodeDeployFiles + } + return nil +} + +func (x *FindLatestDeployFilesResponse) GetNsNodeDeployFiles() []*FindLatestDeployFilesResponse_DeployFile { + if x != nil { + return x.NsNodeDeployFiles + } + return nil +} + +type FindLatestDeployFilesResponse_DeployFile struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Os string `protobuf:"bytes,1,opt,name=os,proto3" json:"os,omitempty"` // 操作系统代号 + Arch string `protobuf:"bytes,2,opt,name=arch,proto3" json:"arch,omitempty"` // 架构 + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` // 版本号 +} + +func (x *FindLatestDeployFilesResponse_DeployFile) Reset() { + *x = FindLatestDeployFilesResponse_DeployFile{} + if protoimpl.UnsafeEnabled { + mi := &file_service_api_node_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindLatestDeployFilesResponse_DeployFile) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindLatestDeployFilesResponse_DeployFile) ProtoMessage() {} + +func (x *FindLatestDeployFilesResponse_DeployFile) ProtoReflect() protoreflect.Message { + mi := &file_service_api_node_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FindLatestDeployFilesResponse_DeployFile.ProtoReflect.Descriptor instead. +func (*FindLatestDeployFilesResponse_DeployFile) Descriptor() ([]byte, []int) { + return file_service_api_node_proto_rawDescGZIP(), []int{22, 0} +} + +func (x *FindLatestDeployFilesResponse_DeployFile) GetOs() string { + if x != nil { + return x.Os + } + return "" +} + +func (x *FindLatestDeployFilesResponse_DeployFile) GetArch() string { + if x != nil { + return x.Arch + } + return "" +} + +func (x *FindLatestDeployFilesResponse_DeployFile) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + var File_service_api_node_proto protoreflect.FileDescriptor var file_service_api_node_proto_rawDesc = []byte{ @@ -1247,77 +1484,120 @@ var file_service_api_node_proto_rawDesc = []byte{ 0x0a, 0x0b, 0x69, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x1b, 0x0a, 0x19, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, - 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xc7, 0x08, - 0x0a, 0x0e, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x44, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, - 0x65, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x12, 0x39, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4e, 0x6f, - 0x64, 0x65, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x50, - 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, - 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x5f, 0x0a, 0x16, - 0x66, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, - 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, - 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x70, 0x62, 0x2e, 0x46, - 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, - 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, - 0x17, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, - 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, - 0x62, 0x2e, 0x52, 0x50, 0x43, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x1c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x6e, 0x64, 0x4f, 0x6e, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, - 0x65, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x6e, 0x64, 0x4f, 0x6e, 0x41, 0x50, 0x49, 0x4e, - 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x62, - 0x2e, 0x52, 0x50, 0x43, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x56, 0x0a, 0x13, 0x6c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x12, 0x66, 0x69, 0x6e, - 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x12, - 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, - 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, - 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, - 0x0a, 0x19, 0x66, 0x69, 0x6e, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x50, 0x49, - 0x4e, 0x6f, 0x64, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x70, 0x62, - 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x50, 0x49, 0x4e, - 0x6f, 0x64, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x12, 0x66, 0x69, 0x6e, 0x64, - 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1d, - 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, - 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, - 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x50, - 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, - 0x24, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x53, 0x4c, 0x43, - 0x65, 0x72, 0x74, 0x49, 0x64, 0x12, 0x2f, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, - 0x65, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x53, 0x4c, 0x43, 0x65, 0x72, 0x74, 0x49, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0c, - 0x64, 0x65, 0x62, 0x75, 0x67, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x2e, 0x70, - 0x62, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, + 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb4, 0x01, + 0x0a, 0x20, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x46, 0x69, + 0x6c, 0x65, 0x54, 0x6f, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x75, 0x6d, + 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x22, + 0x0a, 0x0c, 0x69, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x43, 0x68, 0x75, + 0x6e, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x75, 0x6e, + 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x43, + 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x1e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x9f, 0x02, 0x0a, 0x1d, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0f, 0x6e, + 0x6f, 0x64, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x5a, + 0x0a, 0x11, 0x6e, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x62, 0x2e, 0x46, + 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x11, 0x6e, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x1a, 0x4a, 0x0a, 0x0a, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0xf8, 0x09, 0x0a, 0x0e, 0x41, 0x50, 0x49, 0x4e, 0x6f, + 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x39, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, + 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4e, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, + 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x39, 0x0a, 0x0d, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x2e, 0x70, 0x62, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x50, 0x0a, 0x11, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, - 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x2e, - 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, - 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x5f, 0x0a, 0x16, 0x66, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, + 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x17, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, + 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, + 0x73, 0x12, 0x22, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x1c, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x6e, + 0x64, 0x4f, 0x6e, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, + 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x41, 0x6e, 0x64, 0x4f, 0x6e, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x13, 0x6c, 0x69, + 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, + 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x53, 0x0a, 0x12, 0x66, 0x69, 0x6e, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, + 0x6e, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, + 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x66, 0x69, 0x6e, 0x64, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x62, 0x2e, + 0x46, 0x69, 0x6e, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x50, 0x49, 0x4e, 0x6f, + 0x64, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x53, 0x0a, 0x12, 0x66, 0x69, 0x6e, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, + 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x24, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, + 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, + 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x53, 0x4c, 0x43, 0x65, 0x72, 0x74, 0x49, 0x64, 0x12, 0x2f, + 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, + 0x53, 0x4c, 0x43, 0x65, 0x72, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x64, 0x65, 0x62, 0x75, 0x67, 0x41, 0x50, + 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, + 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, + 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x50, + 0x0a, 0x11, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x46, + 0x69, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, + 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x50, 0x49, + 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x51, 0x0a, 0x19, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x46, 0x69, 0x6c, 0x65, 0x54, 0x6f, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x2e, + 0x70, 0x62, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x46, + 0x69, 0x6c, 0x65, 0x54, 0x6f, 0x41, 0x50, 0x49, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x12, 0x5c, 0x0a, 0x15, 0x66, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x70, + 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, + 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -1332,7 +1612,7 @@ func file_service_api_node_proto_rawDescGZIP() []byte { return file_service_api_node_proto_rawDescData } -var file_service_api_node_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_service_api_node_proto_msgTypes = make([]protoimpl.MessageInfo, 24) var file_service_api_node_proto_goTypes = []interface{}{ (*CreateAPINodeRequest)(nil), // 0: pb.CreateAPINodeRequest (*CreateAPINodeResponse)(nil), // 1: pb.CreateAPINodeResponse @@ -1354,46 +1634,56 @@ var file_service_api_node_proto_goTypes = []interface{}{ (*DebugAPINodeRequest)(nil), // 17: pb.DebugAPINodeRequest (*UploadAPINodeFileRequest)(nil), // 18: pb.UploadAPINodeFileRequest (*UploadAPINodeFileResponse)(nil), // 19: pb.UploadAPINodeFileResponse - (*APINode)(nil), // 20: pb.APINode - (*RPCSuccess)(nil), // 21: pb.RPCSuccess - (*RPCCountResponse)(nil), // 22: pb.RPCCountResponse + (*UploadDeployFileToAPINodeRequest)(nil), // 20: pb.UploadDeployFileToAPINodeRequest + (*FindLatestDeployFilesRequest)(nil), // 21: pb.FindLatestDeployFilesRequest + (*FindLatestDeployFilesResponse)(nil), // 22: pb.FindLatestDeployFilesResponse + (*FindLatestDeployFilesResponse_DeployFile)(nil), // 23: pb.FindLatestDeployFilesResponse.DeployFile + (*APINode)(nil), // 24: pb.APINode + (*RPCSuccess)(nil), // 25: pb.RPCSuccess + (*RPCCountResponse)(nil), // 26: pb.RPCCountResponse } var file_service_api_node_proto_depIdxs = []int32{ - 20, // 0: pb.FindAllEnabledAPINodesResponse.apiNodes:type_name -> pb.APINode - 20, // 1: pb.ListEnabledAPINodesResponse.apiNodes:type_name -> pb.APINode - 20, // 2: pb.FindEnabledAPINodeResponse.apiNode:type_name -> pb.APINode - 20, // 3: pb.FindCurrentAPINodeResponse.apiNode:type_name -> pb.APINode - 0, // 4: pb.APINodeService.createAPINode:input_type -> pb.CreateAPINodeRequest - 2, // 5: pb.APINodeService.updateAPINode:input_type -> pb.UpdateAPINodeRequest - 3, // 6: pb.APINodeService.deleteAPINode:input_type -> pb.DeleteAPINodeRequest - 4, // 7: pb.APINodeService.findAllEnabledAPINodes:input_type -> pb.FindAllEnabledAPINodesRequest - 6, // 8: pb.APINodeService.countAllEnabledAPINodes:input_type -> pb.CountAllEnabledAPINodesRequest - 7, // 9: pb.APINodeService.countAllEnabledAndOnAPINodes:input_type -> pb.CountAllEnabledAndOnAPINodesRequest - 8, // 10: pb.APINodeService.listEnabledAPINodes:input_type -> pb.ListEnabledAPINodesRequest - 10, // 11: pb.APINodeService.findEnabledAPINode:input_type -> pb.FindEnabledAPINodeRequest - 12, // 12: pb.APINodeService.findCurrentAPINodeVersion:input_type -> pb.FindCurrentAPINodeVersionRequest - 14, // 13: pb.APINodeService.findCurrentAPINode:input_type -> pb.FindCurrentAPINodeRequest - 16, // 14: pb.APINodeService.countAllEnabledAPINodesWithSSLCertId:input_type -> pb.CountAllEnabledAPINodesWithSSLCertIdRequest - 17, // 15: pb.APINodeService.debugAPINode:input_type -> pb.DebugAPINodeRequest - 18, // 16: pb.APINodeService.uploadAPINodeFile:input_type -> pb.UploadAPINodeFileRequest - 1, // 17: pb.APINodeService.createAPINode:output_type -> pb.CreateAPINodeResponse - 21, // 18: pb.APINodeService.updateAPINode:output_type -> pb.RPCSuccess - 21, // 19: pb.APINodeService.deleteAPINode:output_type -> pb.RPCSuccess - 5, // 20: pb.APINodeService.findAllEnabledAPINodes:output_type -> pb.FindAllEnabledAPINodesResponse - 22, // 21: pb.APINodeService.countAllEnabledAPINodes:output_type -> pb.RPCCountResponse - 22, // 22: pb.APINodeService.countAllEnabledAndOnAPINodes:output_type -> pb.RPCCountResponse - 9, // 23: pb.APINodeService.listEnabledAPINodes:output_type -> pb.ListEnabledAPINodesResponse - 11, // 24: pb.APINodeService.findEnabledAPINode:output_type -> pb.FindEnabledAPINodeResponse - 13, // 25: pb.APINodeService.findCurrentAPINodeVersion:output_type -> pb.FindCurrentAPINodeVersionResponse - 15, // 26: pb.APINodeService.findCurrentAPINode:output_type -> pb.FindCurrentAPINodeResponse - 22, // 27: pb.APINodeService.countAllEnabledAPINodesWithSSLCertId:output_type -> pb.RPCCountResponse - 21, // 28: pb.APINodeService.debugAPINode:output_type -> pb.RPCSuccess - 19, // 29: pb.APINodeService.uploadAPINodeFile:output_type -> pb.UploadAPINodeFileResponse - 17, // [17:30] is the sub-list for method output_type - 4, // [4:17] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name + 24, // 0: pb.FindAllEnabledAPINodesResponse.apiNodes:type_name -> pb.APINode + 24, // 1: pb.ListEnabledAPINodesResponse.apiNodes:type_name -> pb.APINode + 24, // 2: pb.FindEnabledAPINodeResponse.apiNode:type_name -> pb.APINode + 24, // 3: pb.FindCurrentAPINodeResponse.apiNode:type_name -> pb.APINode + 23, // 4: pb.FindLatestDeployFilesResponse.nodeDeployFiles:type_name -> pb.FindLatestDeployFilesResponse.DeployFile + 23, // 5: pb.FindLatestDeployFilesResponse.nsNodeDeployFiles:type_name -> pb.FindLatestDeployFilesResponse.DeployFile + 0, // 6: pb.APINodeService.createAPINode:input_type -> pb.CreateAPINodeRequest + 2, // 7: pb.APINodeService.updateAPINode:input_type -> pb.UpdateAPINodeRequest + 3, // 8: pb.APINodeService.deleteAPINode:input_type -> pb.DeleteAPINodeRequest + 4, // 9: pb.APINodeService.findAllEnabledAPINodes:input_type -> pb.FindAllEnabledAPINodesRequest + 6, // 10: pb.APINodeService.countAllEnabledAPINodes:input_type -> pb.CountAllEnabledAPINodesRequest + 7, // 11: pb.APINodeService.countAllEnabledAndOnAPINodes:input_type -> pb.CountAllEnabledAndOnAPINodesRequest + 8, // 12: pb.APINodeService.listEnabledAPINodes:input_type -> pb.ListEnabledAPINodesRequest + 10, // 13: pb.APINodeService.findEnabledAPINode:input_type -> pb.FindEnabledAPINodeRequest + 12, // 14: pb.APINodeService.findCurrentAPINodeVersion:input_type -> pb.FindCurrentAPINodeVersionRequest + 14, // 15: pb.APINodeService.findCurrentAPINode:input_type -> pb.FindCurrentAPINodeRequest + 16, // 16: pb.APINodeService.countAllEnabledAPINodesWithSSLCertId:input_type -> pb.CountAllEnabledAPINodesWithSSLCertIdRequest + 17, // 17: pb.APINodeService.debugAPINode:input_type -> pb.DebugAPINodeRequest + 18, // 18: pb.APINodeService.uploadAPINodeFile:input_type -> pb.UploadAPINodeFileRequest + 20, // 19: pb.APINodeService.uploadDeployFileToAPINode:input_type -> pb.UploadDeployFileToAPINodeRequest + 21, // 20: pb.APINodeService.findLatestDeployFiles:input_type -> pb.FindLatestDeployFilesRequest + 1, // 21: pb.APINodeService.createAPINode:output_type -> pb.CreateAPINodeResponse + 25, // 22: pb.APINodeService.updateAPINode:output_type -> pb.RPCSuccess + 25, // 23: pb.APINodeService.deleteAPINode:output_type -> pb.RPCSuccess + 5, // 24: pb.APINodeService.findAllEnabledAPINodes:output_type -> pb.FindAllEnabledAPINodesResponse + 26, // 25: pb.APINodeService.countAllEnabledAPINodes:output_type -> pb.RPCCountResponse + 26, // 26: pb.APINodeService.countAllEnabledAndOnAPINodes:output_type -> pb.RPCCountResponse + 9, // 27: pb.APINodeService.listEnabledAPINodes:output_type -> pb.ListEnabledAPINodesResponse + 11, // 28: pb.APINodeService.findEnabledAPINode:output_type -> pb.FindEnabledAPINodeResponse + 13, // 29: pb.APINodeService.findCurrentAPINodeVersion:output_type -> pb.FindCurrentAPINodeVersionResponse + 15, // 30: pb.APINodeService.findCurrentAPINode:output_type -> pb.FindCurrentAPINodeResponse + 26, // 31: pb.APINodeService.countAllEnabledAPINodesWithSSLCertId:output_type -> pb.RPCCountResponse + 25, // 32: pb.APINodeService.debugAPINode:output_type -> pb.RPCSuccess + 19, // 33: pb.APINodeService.uploadAPINodeFile:output_type -> pb.UploadAPINodeFileResponse + 25, // 34: pb.APINodeService.uploadDeployFileToAPINode:output_type -> pb.RPCSuccess + 22, // 35: pb.APINodeService.findLatestDeployFiles:output_type -> pb.FindLatestDeployFilesResponse + 21, // [21:36] is the sub-list for method output_type + 6, // [6:21] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_service_api_node_proto_init() } @@ -1644,6 +1934,54 @@ func file_service_api_node_proto_init() { return nil } } + file_service_api_node_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UploadDeployFileToAPINodeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_api_node_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FindLatestDeployFilesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_api_node_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FindLatestDeployFilesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_api_node_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FindLatestDeployFilesResponse_DeployFile); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -1651,7 +1989,7 @@ func file_service_api_node_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_service_api_node_proto_rawDesc, NumEnums: 0, - NumMessages: 20, + NumMessages: 24, NumExtensions: 0, NumServices: 1, }, @@ -1703,6 +2041,10 @@ type APINodeServiceClient interface { DebugAPINode(ctx context.Context, in *DebugAPINodeRequest, opts ...grpc.CallOption) (*RPCSuccess, error) // 上传新版API节点文件 UploadAPINodeFile(ctx context.Context, in *UploadAPINodeFileRequest, opts ...grpc.CallOption) (*UploadAPINodeFileResponse, error) + // 上传节点安装文件 + UploadDeployFileToAPINode(ctx context.Context, in *UploadDeployFileToAPINodeRequest, opts ...grpc.CallOption) (*RPCSuccess, error) + // 查找已有节点安装文件信息 + FindLatestDeployFiles(ctx context.Context, in *FindLatestDeployFilesRequest, opts ...grpc.CallOption) (*FindLatestDeployFilesResponse, error) } type aPINodeServiceClient struct { @@ -1830,6 +2172,24 @@ func (c *aPINodeServiceClient) UploadAPINodeFile(ctx context.Context, in *Upload return out, nil } +func (c *aPINodeServiceClient) UploadDeployFileToAPINode(ctx context.Context, in *UploadDeployFileToAPINodeRequest, opts ...grpc.CallOption) (*RPCSuccess, error) { + out := new(RPCSuccess) + err := c.cc.Invoke(ctx, "/pb.APINodeService/uploadDeployFileToAPINode", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *aPINodeServiceClient) FindLatestDeployFiles(ctx context.Context, in *FindLatestDeployFilesRequest, opts ...grpc.CallOption) (*FindLatestDeployFilesResponse, error) { + out := new(FindLatestDeployFilesResponse) + err := c.cc.Invoke(ctx, "/pb.APINodeService/findLatestDeployFiles", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // APINodeServiceServer is the server API for APINodeService service. type APINodeServiceServer interface { // 创建API节点 @@ -1858,6 +2218,10 @@ type APINodeServiceServer interface { DebugAPINode(context.Context, *DebugAPINodeRequest) (*RPCSuccess, error) // 上传新版API节点文件 UploadAPINodeFile(context.Context, *UploadAPINodeFileRequest) (*UploadAPINodeFileResponse, error) + // 上传节点安装文件 + UploadDeployFileToAPINode(context.Context, *UploadDeployFileToAPINodeRequest) (*RPCSuccess, error) + // 查找已有节点安装文件信息 + FindLatestDeployFiles(context.Context, *FindLatestDeployFilesRequest) (*FindLatestDeployFilesResponse, error) } // UnimplementedAPINodeServiceServer can be embedded to have forward compatible implementations. @@ -1903,6 +2267,12 @@ func (*UnimplementedAPINodeServiceServer) DebugAPINode(context.Context, *DebugAP func (*UnimplementedAPINodeServiceServer) UploadAPINodeFile(context.Context, *UploadAPINodeFileRequest) (*UploadAPINodeFileResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UploadAPINodeFile not implemented") } +func (*UnimplementedAPINodeServiceServer) UploadDeployFileToAPINode(context.Context, *UploadDeployFileToAPINodeRequest) (*RPCSuccess, error) { + return nil, status.Errorf(codes.Unimplemented, "method UploadDeployFileToAPINode not implemented") +} +func (*UnimplementedAPINodeServiceServer) FindLatestDeployFiles(context.Context, *FindLatestDeployFilesRequest) (*FindLatestDeployFilesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FindLatestDeployFiles not implemented") +} func RegisterAPINodeServiceServer(s *grpc.Server, srv APINodeServiceServer) { s.RegisterService(&_APINodeService_serviceDesc, srv) @@ -2142,6 +2512,42 @@ func _APINodeService_UploadAPINodeFile_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } +func _APINodeService_UploadDeployFileToAPINode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UploadDeployFileToAPINodeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(APINodeServiceServer).UploadDeployFileToAPINode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.APINodeService/UploadDeployFileToAPINode", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(APINodeServiceServer).UploadDeployFileToAPINode(ctx, req.(*UploadDeployFileToAPINodeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _APINodeService_FindLatestDeployFiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FindLatestDeployFilesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(APINodeServiceServer).FindLatestDeployFiles(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.APINodeService/FindLatestDeployFiles", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(APINodeServiceServer).FindLatestDeployFiles(ctx, req.(*FindLatestDeployFilesRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _APINodeService_serviceDesc = grpc.ServiceDesc{ ServiceName: "pb.APINodeService", HandlerType: (*APINodeServiceServer)(nil), @@ -2198,6 +2604,14 @@ var _APINodeService_serviceDesc = grpc.ServiceDesc{ MethodName: "uploadAPINodeFile", Handler: _APINodeService_UploadAPINodeFile_Handler, }, + { + MethodName: "uploadDeployFileToAPINode", + Handler: _APINodeService_UploadDeployFileToAPINode_Handler, + }, + { + MethodName: "findLatestDeployFiles", + Handler: _APINodeService_FindLatestDeployFiles_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "service_api_node.proto", diff --git a/pkg/rpc/protos/service_api_node.proto b/pkg/rpc/protos/service_api_node.proto index 3d46a4c..c507375 100644 --- a/pkg/rpc/protos/service_api_node.proto +++ b/pkg/rpc/protos/service_api_node.proto @@ -45,6 +45,12 @@ service APINodeService { // 上传新版API节点文件 rpc uploadAPINodeFile(UploadAPINodeFileRequest) returns (UploadAPINodeFileResponse); + + // 上传节点安装文件 + rpc uploadDeployFileToAPINode(UploadDeployFileToAPINodeRequest) returns (RPCSuccess); + + // 查找已有节点安装文件信息 + rpc findLatestDeployFiles(FindLatestDeployFilesRequest) returns (FindLatestDeployFilesResponse); } // 创建API节点 @@ -162,4 +168,29 @@ message UploadAPINodeFileRequest { message UploadAPINodeFileResponse { +} + +// 上传节点安装文件 +message UploadDeployFileToAPINodeRequest { + string filename = 1; // 文件名 + string sum = 2; // 整个文件的SUM值 + bytes chunkData = 3; // 片段数据 + bool isFirstChunk = 4; // 是否为第一个片段 + bool isLastChunk = 5; // 是否为最后一个片段 +} + +// 查找已有节点安装文件信息 +message FindLatestDeployFilesRequest { + +} + +message FindLatestDeployFilesResponse { + repeated DeployFile nodeDeployFiles = 1; // 边缘节点 + repeated DeployFile nsNodeDeployFiles = 2; // NS节点 + + message DeployFile { + string os = 1; // 操作系统代号 + string arch = 2; // 架构 + string version = 3; // 版本号 + } } \ No newline at end of file