diff --git a/api/grpc/instances/configurations.pb.go b/api/grpc/instances/configurations.pb.go index 14b07b97f..377233bcb 100644 --- a/api/grpc/instances/configurations.pb.go +++ b/api/grpc/instances/configurations.pb.go @@ -13,11 +13,12 @@ package instances import ( + reflect "reflect" + sync "sync" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" ) const ( diff --git a/api/grpc/mpi/v1/command.pb.go b/api/grpc/mpi/v1/command.pb.go index 2cbc30479..bbc3ca8aa 100644 --- a/api/grpc/mpi/v1/command.pb.go +++ b/api/grpc/mpi/v1/command.pb.go @@ -84,7 +84,7 @@ func (x InstanceHealth_InstanceHealthStatus) Number() protoreflect.EnumNumber { // Deprecated: Use InstanceHealth_InstanceHealthStatus.Descriptor instead. func (InstanceHealth_InstanceHealthStatus) EnumDescriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{8, 0} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{15, 0} } // the types of instances possible @@ -145,7 +145,481 @@ func (x InstanceMeta_InstanceType) Number() protoreflect.EnumNumber { // Deprecated: Use InstanceMeta_InstanceType.Descriptor instead. func (InstanceMeta_InstanceType) EnumDescriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{20, 0} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{27, 0} +} + +type SubscribeExchangeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Meta-information associated with a message + Meta *MessageMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Message *SubscribeExchangeMessage `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *SubscribeExchangeRequest) Reset() { + *x = SubscribeExchangeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_mpi_v1_command_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeExchangeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeExchangeRequest) ProtoMessage() {} + +func (x *SubscribeExchangeRequest) ProtoReflect() protoreflect.Message { + mi := &file_mpi_v1_command_proto_msgTypes[0] + 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 SubscribeExchangeRequest.ProtoReflect.Descriptor instead. +func (*SubscribeExchangeRequest) Descriptor() ([]byte, []int) { + return file_mpi_v1_command_proto_rawDescGZIP(), []int{0} +} + +func (x *SubscribeExchangeRequest) GetMeta() *MessageMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *SubscribeExchangeRequest) GetMessage() *SubscribeExchangeMessage { + if x != nil { + return x.Message + } + return nil +} + +type SubscribeExchangeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Meta-information associated with a message + Meta *MessageMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + Message *SubscribeExchangeMessage `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *SubscribeExchangeResponse) Reset() { + *x = SubscribeExchangeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_mpi_v1_command_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeExchangeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeExchangeResponse) ProtoMessage() {} + +func (x *SubscribeExchangeResponse) ProtoReflect() protoreflect.Message { + mi := &file_mpi_v1_command_proto_msgTypes[1] + 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 SubscribeExchangeResponse.ProtoReflect.Descriptor instead. +func (*SubscribeExchangeResponse) Descriptor() ([]byte, []int) { + return file_mpi_v1_command_proto_rawDescGZIP(), []int{1} +} + +func (x *SubscribeExchangeResponse) GetMeta() *MessageMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *SubscribeExchangeResponse) GetMessage() *SubscribeExchangeMessage { + if x != nil { + return x.Message + } + return nil +} + +type SubscribeExchangeMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Message: + // + // *SubscribeExchangeMessage_Request + // *SubscribeExchangeMessage_Response + // *SubscribeExchangeMessage_ConfigApplyRequest + // *SubscribeExchangeMessage_ConfigUploadRequest + Message isSubscribeExchangeMessage_Message `protobuf_oneof:"message"` +} + +func (x *SubscribeExchangeMessage) Reset() { + *x = SubscribeExchangeMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_mpi_v1_command_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeExchangeMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeExchangeMessage) ProtoMessage() {} + +func (x *SubscribeExchangeMessage) ProtoReflect() protoreflect.Message { + mi := &file_mpi_v1_command_proto_msgTypes[2] + 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 SubscribeExchangeMessage.ProtoReflect.Descriptor instead. +func (*SubscribeExchangeMessage) Descriptor() ([]byte, []int) { + return file_mpi_v1_command_proto_rawDescGZIP(), []int{2} +} + +func (m *SubscribeExchangeMessage) GetMessage() isSubscribeExchangeMessage_Message { + if m != nil { + return m.Message + } + return nil +} + +func (x *SubscribeExchangeMessage) GetRequest() *FilesRequest { + if x, ok := x.GetMessage().(*SubscribeExchangeMessage_Request); ok { + return x.Request + } + return nil +} + +func (x *SubscribeExchangeMessage) GetResponse() *FileResponse { + if x, ok := x.GetMessage().(*SubscribeExchangeMessage_Response); ok { + return x.Response + } + return nil +} + +func (x *SubscribeExchangeMessage) GetConfigApplyRequest() *ConfigApplyRequest { + if x, ok := x.GetMessage().(*SubscribeExchangeMessage_ConfigApplyRequest); ok { + return x.ConfigApplyRequest + } + return nil +} + +func (x *SubscribeExchangeMessage) GetConfigUploadRequest() *ConfigUploadRequest { + if x, ok := x.GetMessage().(*SubscribeExchangeMessage_ConfigUploadRequest); ok { + return x.ConfigUploadRequest + } + return nil +} + +type isSubscribeExchangeMessage_Message interface { + isSubscribeExchangeMessage_Message() +} + +type SubscribeExchangeMessage_Request struct { + Request *FilesRequest `protobuf:"bytes,2,opt,name=request,proto3,oneof"` +} + +type SubscribeExchangeMessage_Response struct { + Response *FileResponse `protobuf:"bytes,3,opt,name=response,proto3,oneof"` +} + +type SubscribeExchangeMessage_ConfigApplyRequest struct { + // if overview is missing, triggers a rpc GetOverview(ConfigVersion) first + ConfigApplyRequest *ConfigApplyRequest `protobuf:"bytes,4,opt,name=config_apply_request,json=configApplyRequest,proto3,oneof"` +} + +type SubscribeExchangeMessage_ConfigUploadRequest struct { + // triggers a series of rpc UpdateFile(File) for that instances + ConfigUploadRequest *ConfigUploadRequest `protobuf:"bytes,5,opt,name=config_upload_request,json=configUploadRequest,proto3,oneof"` +} + +func (*SubscribeExchangeMessage_Request) isSubscribeExchangeMessage_Message() {} + +func (*SubscribeExchangeMessage_Response) isSubscribeExchangeMessage_Message() {} + +func (*SubscribeExchangeMessage_ConfigApplyRequest) isSubscribeExchangeMessage_Message() {} + +func (*SubscribeExchangeMessage_ConfigUploadRequest) isSubscribeExchangeMessage_Message() {} + +type OverviewRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *OverviewRequest) Reset() { + *x = OverviewRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_mpi_v1_command_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OverviewRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OverviewRequest) ProtoMessage() {} + +func (x *OverviewRequest) ProtoReflect() protoreflect.Message { + mi := &file_mpi_v1_command_proto_msgTypes[3] + 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 OverviewRequest.ProtoReflect.Descriptor instead. +func (*OverviewRequest) Descriptor() ([]byte, []int) { + return file_mpi_v1_command_proto_rawDescGZIP(), []int{3} +} + +type Exchange struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Meta-information associated with a message + Meta *MessageMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + // Types that are assignable to Message: + // + // *Exchange_Request + // *Exchange_Response + // *Exchange_OverviewReq + // *Exchange_Overview + Message isExchange_Message `protobuf_oneof:"message"` +} + +func (x *Exchange) Reset() { + *x = Exchange{} + if protoimpl.UnsafeEnabled { + mi := &file_mpi_v1_command_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Exchange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Exchange) ProtoMessage() {} + +func (x *Exchange) ProtoReflect() protoreflect.Message { + mi := &file_mpi_v1_command_proto_msgTypes[4] + 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 Exchange.ProtoReflect.Descriptor instead. +func (*Exchange) Descriptor() ([]byte, []int) { + return file_mpi_v1_command_proto_rawDescGZIP(), []int{4} +} + +func (x *Exchange) GetMeta() *MessageMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (m *Exchange) GetMessage() isExchange_Message { + if m != nil { + return m.Message + } + return nil +} + +func (x *Exchange) GetRequest() *FilesRequest { + if x, ok := x.GetMessage().(*Exchange_Request); ok { + return x.Request + } + return nil +} + +func (x *Exchange) GetResponse() *FileResponse { + if x, ok := x.GetMessage().(*Exchange_Response); ok { + return x.Response + } + return nil +} + +func (x *Exchange) GetOverviewReq() *OverviewRequest { + if x, ok := x.GetMessage().(*Exchange_OverviewReq); ok { + return x.OverviewReq + } + return nil +} + +func (x *Exchange) GetOverview() *FileOverview { + if x, ok := x.GetMessage().(*Exchange_Overview); ok { + return x.Overview + } + return nil +} + +type isExchange_Message interface { + isExchange_Message() +} + +type Exchange_Request struct { + Request *FilesRequest `protobuf:"bytes,2,opt,name=request,proto3,oneof"` +} + +type Exchange_Response struct { + Response *FileResponse `protobuf:"bytes,3,opt,name=response,proto3,oneof"` +} + +type Exchange_OverviewReq struct { + OverviewReq *OverviewRequest `protobuf:"bytes,4,opt,name=overview_req,json=overviewReq,proto3,oneof"` +} + +type Exchange_Overview struct { + Overview *FileOverview `protobuf:"bytes,5,opt,name=overview,proto3,oneof"` +} + +func (*Exchange_Request) isExchange_Message() {} + +func (*Exchange_Response) isExchange_Message() {} + +func (*Exchange_OverviewReq) isExchange_Message() {} + +func (*Exchange_Overview) isExchange_Message() {} + +type FilesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Files []*FileMeta `protobuf:"bytes,2,rep,name=files,proto3" json:"files,omitempty"` +} + +func (x *FilesRequest) Reset() { + *x = FilesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_mpi_v1_command_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FilesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FilesRequest) ProtoMessage() {} + +func (x *FilesRequest) ProtoReflect() protoreflect.Message { + mi := &file_mpi_v1_command_proto_msgTypes[5] + 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 FilesRequest.ProtoReflect.Descriptor instead. +func (*FilesRequest) Descriptor() ([]byte, []int) { + return file_mpi_v1_command_proto_rawDescGZIP(), []int{5} +} + +func (x *FilesRequest) GetFiles() []*FileMeta { + if x != nil { + return x.Files + } + return nil +} + +// Represents the response to a get file request +type FileResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + File *FileResponse_File `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"` +} + +func (x *FileResponse) Reset() { + *x = FileResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_mpi_v1_command_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileResponse) ProtoMessage() {} + +func (x *FileResponse) ProtoReflect() protoreflect.Message { + mi := &file_mpi_v1_command_proto_msgTypes[6] + 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 FileResponse.ProtoReflect.Descriptor instead. +func (*FileResponse) Descriptor() ([]byte, []int) { + return file_mpi_v1_command_proto_rawDescGZIP(), []int{6} +} + +func (x *FileResponse) GetFile() *FileResponse_File { + if x != nil { + return x.File + } + return nil } // The connection request is an initial handshake to establish a connection, sending NGINX Agent instance information @@ -163,7 +637,7 @@ type CreateConnectionRequest struct { func (x *CreateConnectionRequest) Reset() { *x = CreateConnectionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[0] + mi := &file_mpi_v1_command_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -176,7 +650,7 @@ func (x *CreateConnectionRequest) String() string { func (*CreateConnectionRequest) ProtoMessage() {} func (x *CreateConnectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[0] + mi := &file_mpi_v1_command_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -189,7 +663,7 @@ func (x *CreateConnectionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateConnectionRequest.ProtoReflect.Descriptor instead. func (*CreateConnectionRequest) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{0} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{7} } func (x *CreateConnectionRequest) GetMessageMeta() *MessageMeta { @@ -228,7 +702,7 @@ type Resource struct { func (x *Resource) Reset() { *x = Resource{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[1] + mi := &file_mpi_v1_command_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -241,7 +715,7 @@ func (x *Resource) String() string { func (*Resource) ProtoMessage() {} func (x *Resource) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[1] + mi := &file_mpi_v1_command_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -254,7 +728,7 @@ func (x *Resource) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource.ProtoReflect.Descriptor instead. func (*Resource) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{1} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{8} } func (x *Resource) GetResourceId() string { @@ -327,7 +801,7 @@ type HostInfo struct { func (x *HostInfo) Reset() { *x = HostInfo{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[2] + mi := &file_mpi_v1_command_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -340,7 +814,7 @@ func (x *HostInfo) String() string { func (*HostInfo) ProtoMessage() {} func (x *HostInfo) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[2] + mi := &file_mpi_v1_command_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -353,7 +827,7 @@ func (x *HostInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use HostInfo.ProtoReflect.Descriptor instead. func (*HostInfo) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{2} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{9} } func (x *HostInfo) GetHostId() string { @@ -398,7 +872,7 @@ type ReleaseInfo struct { func (x *ReleaseInfo) Reset() { *x = ReleaseInfo{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[3] + mi := &file_mpi_v1_command_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -411,7 +885,7 @@ func (x *ReleaseInfo) String() string { func (*ReleaseInfo) ProtoMessage() {} func (x *ReleaseInfo) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[3] + mi := &file_mpi_v1_command_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -424,7 +898,7 @@ func (x *ReleaseInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ReleaseInfo.ProtoReflect.Descriptor instead. func (*ReleaseInfo) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{3} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{10} } func (x *ReleaseInfo) GetCodename() string { @@ -475,7 +949,7 @@ type ContainerInfo struct { func (x *ContainerInfo) Reset() { *x = ContainerInfo{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[4] + mi := &file_mpi_v1_command_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -488,7 +962,7 @@ func (x *ContainerInfo) String() string { func (*ContainerInfo) ProtoMessage() {} func (x *ContainerInfo) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[4] + mi := &file_mpi_v1_command_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -501,7 +975,7 @@ func (x *ContainerInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ContainerInfo.ProtoReflect.Descriptor instead. func (*ContainerInfo) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{4} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{11} } func (x *ContainerInfo) GetContainerId() string { @@ -526,7 +1000,7 @@ type CreateConnectionResponse struct { func (x *CreateConnectionResponse) Reset() { *x = CreateConnectionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[5] + mi := &file_mpi_v1_command_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -539,7 +1013,7 @@ func (x *CreateConnectionResponse) String() string { func (*CreateConnectionResponse) ProtoMessage() {} func (x *CreateConnectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[5] + mi := &file_mpi_v1_command_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -552,7 +1026,7 @@ func (x *CreateConnectionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateConnectionResponse.ProtoReflect.Descriptor instead. func (*CreateConnectionResponse) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{5} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{12} } func (x *CreateConnectionResponse) GetResponse() *CommandResponse { @@ -584,7 +1058,7 @@ type UpdateDataPlaneStatusRequest struct { func (x *UpdateDataPlaneStatusRequest) Reset() { *x = UpdateDataPlaneStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[6] + mi := &file_mpi_v1_command_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -597,7 +1071,7 @@ func (x *UpdateDataPlaneStatusRequest) String() string { func (*UpdateDataPlaneStatusRequest) ProtoMessage() {} func (x *UpdateDataPlaneStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[6] + mi := &file_mpi_v1_command_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -610,7 +1084,7 @@ func (x *UpdateDataPlaneStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateDataPlaneStatusRequest.ProtoReflect.Descriptor instead. func (*UpdateDataPlaneStatusRequest) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{6} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{13} } func (x *UpdateDataPlaneStatusRequest) GetMessageMeta() *MessageMeta { @@ -637,7 +1111,7 @@ type UpdateDataPlaneStatusResponse struct { func (x *UpdateDataPlaneStatusResponse) Reset() { *x = UpdateDataPlaneStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[7] + mi := &file_mpi_v1_command_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -650,7 +1124,7 @@ func (x *UpdateDataPlaneStatusResponse) String() string { func (*UpdateDataPlaneStatusResponse) ProtoMessage() {} func (x *UpdateDataPlaneStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[7] + mi := &file_mpi_v1_command_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -663,7 +1137,7 @@ func (x *UpdateDataPlaneStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateDataPlaneStatusResponse.ProtoReflect.Descriptor instead. func (*UpdateDataPlaneStatusResponse) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{7} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{14} } type InstanceHealth struct { @@ -681,7 +1155,7 @@ type InstanceHealth struct { func (x *InstanceHealth) Reset() { *x = InstanceHealth{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[8] + mi := &file_mpi_v1_command_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -694,7 +1168,7 @@ func (x *InstanceHealth) String() string { func (*InstanceHealth) ProtoMessage() {} func (x *InstanceHealth) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[8] + mi := &file_mpi_v1_command_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -707,7 +1181,7 @@ func (x *InstanceHealth) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceHealth.ProtoReflect.Descriptor instead. func (*InstanceHealth) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{8} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{15} } func (x *InstanceHealth) GetInstanceId() string { @@ -746,7 +1220,7 @@ type UpdateDataPlaneHealthRequest struct { func (x *UpdateDataPlaneHealthRequest) Reset() { *x = UpdateDataPlaneHealthRequest{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[9] + mi := &file_mpi_v1_command_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -759,7 +1233,7 @@ func (x *UpdateDataPlaneHealthRequest) String() string { func (*UpdateDataPlaneHealthRequest) ProtoMessage() {} func (x *UpdateDataPlaneHealthRequest) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[9] + mi := &file_mpi_v1_command_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -772,7 +1246,7 @@ func (x *UpdateDataPlaneHealthRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateDataPlaneHealthRequest.ProtoReflect.Descriptor instead. func (*UpdateDataPlaneHealthRequest) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{9} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{16} } func (x *UpdateDataPlaneHealthRequest) GetMessageMeta() *MessageMeta { @@ -799,7 +1273,7 @@ type UpdateDataPlaneHealthResponse struct { func (x *UpdateDataPlaneHealthResponse) Reset() { *x = UpdateDataPlaneHealthResponse{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[10] + mi := &file_mpi_v1_command_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -812,7 +1286,7 @@ func (x *UpdateDataPlaneHealthResponse) String() string { func (*UpdateDataPlaneHealthResponse) ProtoMessage() {} func (x *UpdateDataPlaneHealthResponse) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[10] + mi := &file_mpi_v1_command_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -825,7 +1299,7 @@ func (x *UpdateDataPlaneHealthResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateDataPlaneHealthResponse.ProtoReflect.Descriptor instead. func (*UpdateDataPlaneHealthResponse) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{10} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{17} } // Reports the status of an associated command. This may be in response to a ManagementPlaneRequest @@ -838,12 +1312,17 @@ type DataPlaneResponse struct { MessageMeta *MessageMeta `protobuf:"bytes,1,opt,name=message_meta,json=messageMeta,proto3" json:"message_meta,omitempty"` // The command response with the associated request CommandResponse *CommandResponse `protobuf:"bytes,2,opt,name=command_response,json=commandResponse,proto3" json:"command_response,omitempty"` + // Types that are assignable to Message: + // + // *DataPlaneResponse_Request + // *DataPlaneResponse_Response + Message isDataPlaneResponse_Message `protobuf_oneof:"message"` } func (x *DataPlaneResponse) Reset() { *x = DataPlaneResponse{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[11] + mi := &file_mpi_v1_command_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -856,7 +1335,7 @@ func (x *DataPlaneResponse) String() string { func (*DataPlaneResponse) ProtoMessage() {} func (x *DataPlaneResponse) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[11] + mi := &file_mpi_v1_command_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -869,7 +1348,7 @@ func (x *DataPlaneResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DataPlaneResponse.ProtoReflect.Descriptor instead. func (*DataPlaneResponse) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{11} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{18} } func (x *DataPlaneResponse) GetMessageMeta() *MessageMeta { @@ -886,6 +1365,43 @@ func (x *DataPlaneResponse) GetCommandResponse() *CommandResponse { return nil } +func (m *DataPlaneResponse) GetMessage() isDataPlaneResponse_Message { + if m != nil { + return m.Message + } + return nil +} + +func (x *DataPlaneResponse) GetRequest() *FilesRequest { + if x, ok := x.GetMessage().(*DataPlaneResponse_Request); ok { + return x.Request + } + return nil +} + +func (x *DataPlaneResponse) GetResponse() *FileResponse { + if x, ok := x.GetMessage().(*DataPlaneResponse_Response); ok { + return x.Response + } + return nil +} + +type isDataPlaneResponse_Message interface { + isDataPlaneResponse_Message() +} + +type DataPlaneResponse_Request struct { + Request *FilesRequest `protobuf:"bytes,3,opt,name=request,proto3,oneof"` +} + +type DataPlaneResponse_Response struct { + Response *FileResponse `protobuf:"bytes,4,opt,name=response,proto3,oneof"` +} + +func (*DataPlaneResponse_Request) isDataPlaneResponse_Message() {} + +func (*DataPlaneResponse_Response) isDataPlaneResponse_Message() {} + // A Management Plane request for information, triggers an associated rpc on the Data Plane type ManagementPlaneRequest struct { state protoimpl.MessageState @@ -908,7 +1424,7 @@ type ManagementPlaneRequest struct { func (x *ManagementPlaneRequest) Reset() { *x = ManagementPlaneRequest{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[12] + mi := &file_mpi_v1_command_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -921,7 +1437,7 @@ func (x *ManagementPlaneRequest) String() string { func (*ManagementPlaneRequest) ProtoMessage() {} func (x *ManagementPlaneRequest) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[12] + mi := &file_mpi_v1_command_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -934,7 +1450,7 @@ func (x *ManagementPlaneRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ManagementPlaneRequest.ProtoReflect.Descriptor instead. func (*ManagementPlaneRequest) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{12} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{19} } func (x *ManagementPlaneRequest) GetMessageMeta() *MessageMeta { @@ -1050,7 +1566,7 @@ type StatusRequest struct { func (x *StatusRequest) Reset() { *x = StatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[13] + mi := &file_mpi_v1_command_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1063,7 +1579,7 @@ func (x *StatusRequest) String() string { func (*StatusRequest) ProtoMessage() {} func (x *StatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[13] + mi := &file_mpi_v1_command_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1076,7 +1592,7 @@ func (x *StatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusRequest.ProtoReflect.Descriptor instead. func (*StatusRequest) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{13} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{20} } // Additional information associated with a HealthRequest @@ -1089,7 +1605,7 @@ type HealthRequest struct { func (x *HealthRequest) Reset() { *x = HealthRequest{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[14] + mi := &file_mpi_v1_command_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1102,7 +1618,7 @@ func (x *HealthRequest) String() string { func (*HealthRequest) ProtoMessage() {} func (x *HealthRequest) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[14] + mi := &file_mpi_v1_command_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1115,7 +1631,7 @@ func (x *HealthRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthRequest.ProtoReflect.Descriptor instead. func (*HealthRequest) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{14} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{21} } // Additional information associated with a ConfigApplyRequest @@ -1133,7 +1649,7 @@ type ConfigApplyRequest struct { func (x *ConfigApplyRequest) Reset() { *x = ConfigApplyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[15] + mi := &file_mpi_v1_command_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1146,7 +1662,7 @@ func (x *ConfigApplyRequest) String() string { func (*ConfigApplyRequest) ProtoMessage() {} func (x *ConfigApplyRequest) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[15] + mi := &file_mpi_v1_command_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1159,7 +1675,7 @@ func (x *ConfigApplyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigApplyRequest.ProtoReflect.Descriptor instead. func (*ConfigApplyRequest) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{15} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{22} } func (x *ConfigApplyRequest) GetConfigVersion() *ConfigVersion { @@ -1191,7 +1707,7 @@ type ConfigUploadRequest struct { func (x *ConfigUploadRequest) Reset() { *x = ConfigUploadRequest{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[16] + mi := &file_mpi_v1_command_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1204,7 +1720,7 @@ func (x *ConfigUploadRequest) String() string { func (*ConfigUploadRequest) ProtoMessage() {} func (x *ConfigUploadRequest) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[16] + mi := &file_mpi_v1_command_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1217,7 +1733,7 @@ func (x *ConfigUploadRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigUploadRequest.ProtoReflect.Descriptor instead. func (*ConfigUploadRequest) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{16} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{23} } func (x *ConfigUploadRequest) GetInstanceId() string { @@ -1244,7 +1760,7 @@ type APIActionRequest struct { func (x *APIActionRequest) Reset() { *x = APIActionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[17] + mi := &file_mpi_v1_command_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1257,7 +1773,7 @@ func (x *APIActionRequest) String() string { func (*APIActionRequest) ProtoMessage() {} func (x *APIActionRequest) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[17] + mi := &file_mpi_v1_command_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1270,7 +1786,7 @@ func (x *APIActionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use APIActionRequest.ProtoReflect.Descriptor instead. func (*APIActionRequest) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{17} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{24} } // Request an update on a particular command @@ -1283,7 +1799,7 @@ type CommandStatusRequest struct { func (x *CommandStatusRequest) Reset() { *x = CommandStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[18] + mi := &file_mpi_v1_command_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1296,7 +1812,7 @@ func (x *CommandStatusRequest) String() string { func (*CommandStatusRequest) ProtoMessage() {} func (x *CommandStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[18] + mi := &file_mpi_v1_command_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1309,7 +1825,7 @@ func (x *CommandStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CommandStatusRequest.ProtoReflect.Descriptor instead. func (*CommandStatusRequest) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{18} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{25} } // This represents an instance being reported on @@ -1329,7 +1845,7 @@ type Instance struct { func (x *Instance) Reset() { *x = Instance{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[19] + mi := &file_mpi_v1_command_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1342,7 +1858,7 @@ func (x *Instance) String() string { func (*Instance) ProtoMessage() {} func (x *Instance) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[19] + mi := &file_mpi_v1_command_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1355,7 +1871,7 @@ func (x *Instance) ProtoReflect() protoreflect.Message { // Deprecated: Use Instance.ProtoReflect.Descriptor instead. func (*Instance) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{19} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{26} } func (x *Instance) GetInstanceMeta() *InstanceMeta { @@ -1396,7 +1912,7 @@ type InstanceMeta struct { func (x *InstanceMeta) Reset() { *x = InstanceMeta{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[20] + mi := &file_mpi_v1_command_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1409,7 +1925,7 @@ func (x *InstanceMeta) String() string { func (*InstanceMeta) ProtoMessage() {} func (x *InstanceMeta) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[20] + mi := &file_mpi_v1_command_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1422,7 +1938,7 @@ func (x *InstanceMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceMeta.ProtoReflect.Descriptor instead. func (*InstanceMeta) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{20} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{27} } func (x *InstanceMeta) GetInstanceId() string { @@ -1463,7 +1979,7 @@ type InstanceConfig struct { func (x *InstanceConfig) Reset() { *x = InstanceConfig{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[21] + mi := &file_mpi_v1_command_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1476,7 +1992,7 @@ func (x *InstanceConfig) String() string { func (*InstanceConfig) ProtoMessage() {} func (x *InstanceConfig) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[21] + mi := &file_mpi_v1_command_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1489,7 +2005,7 @@ func (x *InstanceConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceConfig.ProtoReflect.Descriptor instead. func (*InstanceConfig) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{21} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{28} } func (x *InstanceConfig) GetActions() []*InstanceAction { @@ -1549,7 +2065,7 @@ type InstanceRuntime struct { func (x *InstanceRuntime) Reset() { *x = InstanceRuntime{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[22] + mi := &file_mpi_v1_command_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1562,7 +2078,7 @@ func (x *InstanceRuntime) String() string { func (*InstanceRuntime) ProtoMessage() {} func (x *InstanceRuntime) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[22] + mi := &file_mpi_v1_command_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1575,7 +2091,7 @@ func (x *InstanceRuntime) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceRuntime.ProtoReflect.Descriptor instead. func (*InstanceRuntime) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{22} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{29} } func (x *InstanceRuntime) GetProcessId() int32 { @@ -1657,7 +2173,7 @@ type InstanceChild struct { func (x *InstanceChild) Reset() { *x = InstanceChild{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[23] + mi := &file_mpi_v1_command_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1670,7 +2186,7 @@ func (x *InstanceChild) String() string { func (*InstanceChild) ProtoMessage() {} func (x *InstanceChild) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[23] + mi := &file_mpi_v1_command_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1683,7 +2199,7 @@ func (x *InstanceChild) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceChild.ProtoReflect.Descriptor instead. func (*InstanceChild) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{23} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{30} } func (x *InstanceChild) GetProcessId() int32 { @@ -1714,7 +2230,7 @@ type NGINXRuntimeInfo struct { func (x *NGINXRuntimeInfo) Reset() { *x = NGINXRuntimeInfo{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[24] + mi := &file_mpi_v1_command_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1727,7 +2243,7 @@ func (x *NGINXRuntimeInfo) String() string { func (*NGINXRuntimeInfo) ProtoMessage() {} func (x *NGINXRuntimeInfo) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[24] + mi := &file_mpi_v1_command_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1740,7 +2256,7 @@ func (x *NGINXRuntimeInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use NGINXRuntimeInfo.ProtoReflect.Descriptor instead. func (*NGINXRuntimeInfo) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{24} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{31} } func (x *NGINXRuntimeInfo) GetStubStatus() string { @@ -1801,7 +2317,7 @@ type NGINXPlusRuntimeInfo struct { func (x *NGINXPlusRuntimeInfo) Reset() { *x = NGINXPlusRuntimeInfo{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[25] + mi := &file_mpi_v1_command_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1814,7 +2330,7 @@ func (x *NGINXPlusRuntimeInfo) String() string { func (*NGINXPlusRuntimeInfo) ProtoMessage() {} func (x *NGINXPlusRuntimeInfo) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[25] + mi := &file_mpi_v1_command_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1827,7 +2343,7 @@ func (x *NGINXPlusRuntimeInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use NGINXPlusRuntimeInfo.ProtoReflect.Descriptor instead. func (*NGINXPlusRuntimeInfo) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{25} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{32} } func (x *NGINXPlusRuntimeInfo) GetStubStatus() string { @@ -1882,7 +2398,7 @@ type InstanceAction struct { func (x *InstanceAction) Reset() { *x = InstanceAction{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[26] + mi := &file_mpi_v1_command_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1895,7 +2411,7 @@ func (x *InstanceAction) String() string { func (*InstanceAction) ProtoMessage() {} func (x *InstanceAction) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[26] + mi := &file_mpi_v1_command_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1908,7 +2424,7 @@ func (x *InstanceAction) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceAction.ProtoReflect.Descriptor instead. func (*InstanceAction) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{26} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{33} } // This contains a series of NGINX Agent configurations @@ -1934,7 +2450,7 @@ type AgentConfig struct { func (x *AgentConfig) Reset() { *x = AgentConfig{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[27] + mi := &file_mpi_v1_command_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1947,7 +2463,7 @@ func (x *AgentConfig) String() string { func (*AgentConfig) ProtoMessage() {} func (x *AgentConfig) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[27] + mi := &file_mpi_v1_command_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1960,7 +2476,7 @@ func (x *AgentConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AgentConfig.ProtoReflect.Descriptor instead. func (*AgentConfig) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{27} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{34} } func (x *AgentConfig) GetCommand() *CommandServer { @@ -2015,7 +2531,7 @@ type CommandServer struct { func (x *CommandServer) Reset() { *x = CommandServer{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[28] + mi := &file_mpi_v1_command_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2028,7 +2544,7 @@ func (x *CommandServer) String() string { func (*CommandServer) ProtoMessage() {} func (x *CommandServer) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[28] + mi := &file_mpi_v1_command_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2041,7 +2557,7 @@ func (x *CommandServer) ProtoReflect() protoreflect.Message { // Deprecated: Use CommandServer.ProtoReflect.Descriptor instead. func (*CommandServer) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{28} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{35} } // The metrics settings associated with origins (sources) of the metrics and destinations (exporter) @@ -2054,7 +2570,7 @@ type MetricsServer struct { func (x *MetricsServer) Reset() { *x = MetricsServer{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[29] + mi := &file_mpi_v1_command_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2067,7 +2583,7 @@ func (x *MetricsServer) String() string { func (*MetricsServer) ProtoMessage() {} func (x *MetricsServer) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[29] + mi := &file_mpi_v1_command_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2080,7 +2596,7 @@ func (x *MetricsServer) ProtoReflect() protoreflect.Message { // Deprecated: Use MetricsServer.ProtoReflect.Descriptor instead. func (*MetricsServer) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{29} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{36} } // The file settings associated with file server for configurations @@ -2093,7 +2609,7 @@ type FileServer struct { func (x *FileServer) Reset() { *x = FileServer{} if protoimpl.UnsafeEnabled { - mi := &file_mpi_v1_command_proto_msgTypes[30] + mi := &file_mpi_v1_command_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2106,7 +2622,7 @@ func (x *FileServer) String() string { func (*FileServer) ProtoMessage() {} func (x *FileServer) ProtoReflect() protoreflect.Message { - mi := &file_mpi_v1_command_proto_msgTypes[30] + mi := &file_mpi_v1_command_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2119,7 +2635,62 @@ func (x *FileServer) ProtoReflect() protoreflect.Message { // Deprecated: Use FileServer.ProtoReflect.Descriptor instead. func (*FileServer) Descriptor() ([]byte, []int) { - return file_mpi_v1_command_proto_rawDescGZIP(), []int{30} + return file_mpi_v1_command_proto_rawDescGZIP(), []int{37} +} + +type FileResponse_File struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Meta *FileMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"` + File *FileContents `protobuf:"bytes,2,opt,name=file,proto3" json:"file,omitempty"` +} + +func (x *FileResponse_File) Reset() { + *x = FileResponse_File{} + if protoimpl.UnsafeEnabled { + mi := &file_mpi_v1_command_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileResponse_File) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileResponse_File) ProtoMessage() {} + +func (x *FileResponse_File) ProtoReflect() protoreflect.Message { + mi := &file_mpi_v1_command_proto_msgTypes[38] + 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 FileResponse_File.ProtoReflect.Descriptor instead. +func (*FileResponse_File) Descriptor() ([]byte, []int) { + return file_mpi_v1_command_proto_rawDescGZIP(), []int{6, 0} +} + +func (x *FileResponse_File) GetMeta() *FileMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *FileResponse_File) GetFile() *FileContents { + if x != nil { + return x.File + } + return nil } var File_mpi_v1_command_proto protoreflect.FileDescriptor @@ -2133,328 +2704,406 @@ var file_mpi_v1_command_proto_rawDesc = []byte{ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0x7f, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, - 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x22, 0xde, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x29, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, - 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x09, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x09, 0x68, - 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, - 0x48, 0x00, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3e, 0x0a, 0x0e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0d, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x06, 0x0a, 0x04, - 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x8b, 0x01, 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x21, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x06, 0x68, 0x6f, - 0x73, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xa8, 0x01, 0x01, - 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x0c, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x22, 0x86, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3c, 0x0a, 0x0d, 0x43, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x0c, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0b, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, 0x87, 0x01, 0x0a, 0x18, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x0c, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x22, 0x84, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x1f, 0x0a, 0x1d, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf0, 0x02, 0x0a, 0x0e, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x29, - 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0a, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x61, 0x0a, 0x16, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x6d, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x14, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xad, - 0x01, 0x0a, 0x14, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x53, 0x54, 0x41, - 0x4e, 0x43, 0x45, 0x5f, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x22, 0x0a, 0x1e, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x48, 0x45, 0x41, 0x4c, - 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, - 0x59, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, - 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, - 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, 0x12, 0x23, 0x0a, 0x1f, 0x49, 0x4e, 0x53, - 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x03, 0x22, 0x99, - 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, - 0x6e, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x36, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, + 0x74, 0x6f, 0x22, 0x7f, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, + 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x45, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x80, 0x01, 0x0a, 0x19, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xae, 0x02, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x70, 0x70, + 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x15, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x09, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x11, 0x0a, 0x0f, 0x4f, 0x76, 0x65, 0x72, 0x76, + 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x96, 0x02, 0x0a, 0x08, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x11, - 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x36, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0b, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x10, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0f, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x97, 0x04, - 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x6e, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x12, 0x3e, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3e, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x0d, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x4e, 0x0a, 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x79, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x70, - 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x51, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x13, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x0e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x50, 0x49, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x09, 0x0a, 0x07, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x48, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x96, 0x01, 0x0a, 0x12, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3c, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x35, - 0x0a, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x76, - 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, - 0x65, 0x77, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, - 0x65, 0x77, 0x22, 0x7a, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x6c, 0x6f, - 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x6f, 0x76, - 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, - 0x65, 0x77, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x88, 0x01, - 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x22, 0x12, - 0x0a, 0x10, 0x41, 0x50, 0x49, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xca, 0x01, 0x0a, 0x08, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, - 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x29, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, - 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x46, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 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, 0x22, 0x95, 0x01, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, - 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, - 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x17, - 0x0a, 0x13, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x4e, 0x47, 0x49, 0x4e, 0x58, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x53, 0x54, 0x41, - 0x4e, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x47, 0x49, 0x4e, 0x58, 0x5f, 0x50, - 0x4c, 0x55, 0x53, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, - 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x10, 0x04, 0x22, 0x86, 0x01, - 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x30, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x0c, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, - 0x0b, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x08, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xf6, 0x02, 0x0a, 0x0f, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x0b, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, - 0xba, 0x48, 0x05, 0x72, 0x03, 0x3a, 0x01, 0x2f, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, - 0x50, 0x61, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, - 0x3a, 0x01, 0x2f, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x61, 0x74, 0x68, 0x12, - 0x48, 0x0a, 0x12, 0x6e, 0x67, 0x69, 0x6e, 0x78, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x47, 0x49, 0x4e, 0x58, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x10, 0x6e, 0x67, 0x69, 0x6e, 0x78, 0x52, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x55, 0x0a, 0x17, 0x6e, 0x67, 0x69, - 0x6e, 0x78, 0x5f, 0x70, 0x6c, 0x75, 0x73, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x47, 0x49, 0x4e, 0x58, 0x50, 0x6c, 0x75, 0x73, 0x52, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x14, 0x6e, 0x67, 0x69, 0x6e, - 0x78, 0x50, 0x6c, 0x75, 0x73, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x42, 0x0a, 0x11, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x68, 0x69, - 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x69, - 0x6c, 0x64, 0x52, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x69, 0x6c, - 0x64, 0x72, 0x65, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, - 0x2e, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x64, 0x22, - 0xa2, 0x02, 0x0a, 0x10, 0x4e, 0x47, 0x49, 0x4e, 0x58, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x7a, 0x0a, 0x0b, 0x73, 0x74, 0x75, 0x62, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x59, 0xba, 0x48, 0x56, 0xba, 0x01, - 0x53, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x75, 0x72, 0x69, 0x12, 0x29, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, 0x49, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, - 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, - 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x55, - 0x72, 0x69, 0x28, 0x29, 0x52, 0x0a, 0x73, 0x74, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x6f, 0x67, - 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x73, - 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x6f, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x61, 0x64, - 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, - 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x73, 0x22, 0x9c, 0x03, 0x0a, 0x14, 0x4e, 0x47, 0x49, 0x4e, 0x58, 0x50, 0x6c, - 0x75, 0x73, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x7a, 0x0a, - 0x0b, 0x73, 0x74, 0x75, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x59, 0xba, 0x48, 0x56, 0xba, 0x01, 0x53, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x2e, 0x75, 0x72, 0x69, 0x12, 0x29, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, - 0x49, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x1a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x55, 0x72, 0x69, 0x28, 0x29, 0x52, 0x0a, 0x73, - 0x74, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x6f, 0x61, - 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, - 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x64, - 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x74, 0x0a, - 0x08, 0x70, 0x6c, 0x75, 0x73, 0x5f, 0x61, 0x70, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x59, 0xba, 0x48, 0x56, 0xba, 0x01, 0x53, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, - 0x75, 0x72, 0x69, 0x12, 0x29, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, 0x49, 0x20, 0x6f, - 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x69, 0x73, 0x55, 0x72, 0x69, 0x28, 0x29, 0x52, 0x07, 0x70, 0x6c, 0x75, 0x73, - 0x41, 0x70, 0x69, 0x22, 0x10, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x94, 0x02, 0x0a, 0x0b, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2f, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x07, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x07, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, - 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, - 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x0f, 0x0a, 0x0d, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x0f, 0x0a, - 0x0d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x0c, - 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x32, 0x87, 0x03, 0x0a, - 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x57, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x24, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x66, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, - 0x61, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x24, 0x2e, 0x6d, 0x70, 0x69, 0x2e, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, + 0x12, 0x30, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, + 0x65, 0x77, 0x5f, 0x72, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, + 0x77, 0x52, 0x65, 0x71, 0x12, 0x32, 0x0a, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x08, + 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x36, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, + 0x4d, 0x65, 0x74, 0x61, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x0c, + 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x04, + 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0x56, 0x0a, 0x04, 0x46, + 0x69, 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, + 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x04, 0x66, 0x69, 0x6c, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x04, 0x66, + 0x69, 0x6c, 0x65, 0x22, 0x7f, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, + 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x22, 0xde, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x29, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, + 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x09, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x09, + 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, + 0x6f, 0x48, 0x00, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3e, 0x0a, + 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0d, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x06, 0x0a, + 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x8b, 0x01, 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x06, 0x68, + 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xa8, 0x01, + 0x01, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x0c, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x22, 0x86, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3c, 0x0a, 0x0d, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, + 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0b, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, 0x87, 0x01, 0x0a, 0x18, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x0c, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x22, 0x84, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, + 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2c, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x1f, 0x0a, 0x1d, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf0, 0x02, 0x0a, + 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, + 0x29, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0a, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x61, 0x0a, 0x16, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x6d, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x14, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0xad, 0x01, 0x0a, 0x14, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x53, 0x54, + 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x22, 0x0a, 0x1e, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x48, 0x45, 0x41, + 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x4c, 0x54, + 0x48, 0x59, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, + 0x5f, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, + 0x4e, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, 0x12, 0x23, 0x0a, 0x1f, 0x49, 0x4e, + 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x03, 0x22, + 0x99, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, + 0x61, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x36, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0b, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x0f, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x02, 0x0a, + 0x11, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x36, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0b, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x10, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0f, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, + 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x97, 0x04, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, + 0x61, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0c, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, + 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x0d, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x61, 0x70, 0x70, + 0x6c, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x51, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x75, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x0e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x50, 0x49, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x09, + 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x96, 0x01, 0x0a, 0x12, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x35, 0x0a, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, + 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x76, 0x65, 0x72, + 0x76, 0x69, 0x65, 0x77, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6f, 0x76, 0x65, 0x72, + 0x76, 0x69, 0x65, 0x77, 0x22, 0x7a, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x08, + 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72, + 0x76, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, + 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, + 0x22, 0x12, 0x0a, 0x10, 0x41, 0x50, 0x49, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xca, 0x01, 0x0a, + 0x08, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x4d, 0x65, 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x0c, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x29, 0x0a, 0x0b, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x46, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, + 0x74, 0x61, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 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, 0x22, 0x95, 0x01, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x49, 0x4e, 0x53, 0x54, + 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x4e, 0x53, 0x54, 0x41, + 0x4e, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x10, 0x01, + 0x12, 0x17, 0x0a, 0x13, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x4e, 0x47, 0x49, 0x4e, 0x58, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x53, + 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x47, 0x49, 0x4e, 0x58, + 0x5f, 0x50, 0x4c, 0x55, 0x53, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x53, 0x54, 0x41, + 0x4e, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x10, 0x04, 0x22, + 0x86, 0x01, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x30, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x0c, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, + 0x00, 0x52, 0x0b, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x08, + 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xf6, 0x02, 0x0a, 0x0f, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x0b, 0x62, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x3a, 0x01, 0x2f, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, + 0x72, 0x03, 0x3a, 0x01, 0x2f, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x48, 0x0a, 0x12, 0x6e, 0x67, 0x69, 0x6e, 0x78, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x47, 0x49, 0x4e, 0x58, 0x52, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x10, 0x6e, 0x67, 0x69, 0x6e, 0x78, + 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x55, 0x0a, 0x17, 0x6e, + 0x67, 0x69, 0x6e, 0x78, 0x5f, 0x70, 0x6c, 0x75, 0x73, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x47, 0x49, 0x4e, 0x58, 0x50, 0x6c, 0x75, 0x73, 0x52, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x14, 0x6e, 0x67, + 0x69, 0x6e, 0x78, 0x50, 0x6c, 0x75, 0x73, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x42, 0x0a, 0x11, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, + 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, + 0x68, 0x69, 0x6c, 0x64, 0x52, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, + 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x22, 0x2e, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x69, + 0x6c, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, + 0x64, 0x22, 0xa2, 0x02, 0x0a, 0x10, 0x4e, 0x47, 0x49, 0x4e, 0x58, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x7a, 0x0a, 0x0b, 0x73, 0x74, 0x75, 0x62, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x59, 0xba, 0x48, 0x56, + 0xba, 0x01, 0x53, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x75, 0x72, 0x69, 0x12, + 0x29, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, + 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, 0x49, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x61, + 0x6e, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x74, 0x68, 0x69, 0x73, + 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, + 0x73, 0x55, 0x72, 0x69, 0x28, 0x29, 0x52, 0x0a, 0x73, 0x74, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x6f, 0x67, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x6f, 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6c, 0x6f, 0x67, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4c, 0x6f, + 0x67, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x6f, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, + 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, + 0x0f, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x9c, 0x03, 0x0a, 0x14, 0x4e, 0x47, 0x49, 0x4e, 0x58, + 0x50, 0x6c, 0x75, 0x73, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x7a, 0x0a, 0x0b, 0x73, 0x74, 0x75, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x59, 0xba, 0x48, 0x56, 0xba, 0x01, 0x53, 0x0a, 0x0a, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x75, 0x72, 0x69, 0x12, 0x29, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, + 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, + 0x55, 0x52, 0x49, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, + 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x55, 0x72, 0x69, 0x28, 0x29, 0x52, + 0x0a, 0x73, 0x74, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x6c, + 0x6f, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, + 0x63, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, + 0x74, 0x0a, 0x08, 0x70, 0x6c, 0x75, 0x73, 0x5f, 0x61, 0x70, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x59, 0xba, 0x48, 0x56, 0xba, 0x01, 0x53, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x2e, 0x75, 0x72, 0x69, 0x12, 0x29, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, + 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, 0x49, + 0x20, 0x6f, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x1a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x55, 0x72, 0x69, 0x28, 0x29, 0x52, 0x07, 0x70, 0x6c, + 0x75, 0x73, 0x41, 0x70, 0x69, 0x22, 0x10, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x94, 0x02, 0x0a, 0x0b, 0x41, 0x67, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2f, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, + 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x0a, 0x04, 0x66, 0x69, 0x6c, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x04, 0x66, 0x69, 0x6c, + 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x2e, + 0x0a, 0x13, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x0f, + 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, + 0x0f, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x22, 0x0c, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x32, 0xc1, + 0x03, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x57, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x15, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x24, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, - 0x6e, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x25, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x19, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x1a, 0x1e, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x08, 0x5a, 0x06, 0x6d, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x66, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x24, 0x2e, 0x6d, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, + 0x6c, 0x61, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x19, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x1a, 0x1e, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x38, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0x10, 0x2e, 0x6d, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, + 0x30, 0x01, 0x42, 0x08, 0x5a, 0x06, 0x6d, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2470,99 +3119,130 @@ func file_mpi_v1_command_proto_rawDescGZIP() []byte { } var file_mpi_v1_command_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_mpi_v1_command_proto_msgTypes = make([]protoimpl.MessageInfo, 31) +var file_mpi_v1_command_proto_msgTypes = make([]protoimpl.MessageInfo, 39) var file_mpi_v1_command_proto_goTypes = []interface{}{ (InstanceHealth_InstanceHealthStatus)(0), // 0: mpi.v1.InstanceHealth.InstanceHealthStatus (InstanceMeta_InstanceType)(0), // 1: mpi.v1.InstanceMeta.InstanceType - (*CreateConnectionRequest)(nil), // 2: mpi.v1.CreateConnectionRequest - (*Resource)(nil), // 3: mpi.v1.Resource - (*HostInfo)(nil), // 4: mpi.v1.HostInfo - (*ReleaseInfo)(nil), // 5: mpi.v1.ReleaseInfo - (*ContainerInfo)(nil), // 6: mpi.v1.ContainerInfo - (*CreateConnectionResponse)(nil), // 7: mpi.v1.CreateConnectionResponse - (*UpdateDataPlaneStatusRequest)(nil), // 8: mpi.v1.UpdateDataPlaneStatusRequest - (*UpdateDataPlaneStatusResponse)(nil), // 9: mpi.v1.UpdateDataPlaneStatusResponse - (*InstanceHealth)(nil), // 10: mpi.v1.InstanceHealth - (*UpdateDataPlaneHealthRequest)(nil), // 11: mpi.v1.UpdateDataPlaneHealthRequest - (*UpdateDataPlaneHealthResponse)(nil), // 12: mpi.v1.UpdateDataPlaneHealthResponse - (*DataPlaneResponse)(nil), // 13: mpi.v1.DataPlaneResponse - (*ManagementPlaneRequest)(nil), // 14: mpi.v1.ManagementPlaneRequest - (*StatusRequest)(nil), // 15: mpi.v1.StatusRequest - (*HealthRequest)(nil), // 16: mpi.v1.HealthRequest - (*ConfigApplyRequest)(nil), // 17: mpi.v1.ConfigApplyRequest - (*ConfigUploadRequest)(nil), // 18: mpi.v1.ConfigUploadRequest - (*APIActionRequest)(nil), // 19: mpi.v1.APIActionRequest - (*CommandStatusRequest)(nil), // 20: mpi.v1.CommandStatusRequest - (*Instance)(nil), // 21: mpi.v1.Instance - (*InstanceMeta)(nil), // 22: mpi.v1.InstanceMeta - (*InstanceConfig)(nil), // 23: mpi.v1.InstanceConfig - (*InstanceRuntime)(nil), // 24: mpi.v1.InstanceRuntime - (*InstanceChild)(nil), // 25: mpi.v1.InstanceChild - (*NGINXRuntimeInfo)(nil), // 26: mpi.v1.NGINXRuntimeInfo - (*NGINXPlusRuntimeInfo)(nil), // 27: mpi.v1.NGINXPlusRuntimeInfo - (*InstanceAction)(nil), // 28: mpi.v1.InstanceAction - (*AgentConfig)(nil), // 29: mpi.v1.AgentConfig - (*CommandServer)(nil), // 30: mpi.v1.CommandServer - (*MetricsServer)(nil), // 31: mpi.v1.MetricsServer - (*FileServer)(nil), // 32: mpi.v1.FileServer - (*MessageMeta)(nil), // 33: mpi.v1.MessageMeta - (*CommandResponse)(nil), // 34: mpi.v1.CommandResponse - (*ConfigVersion)(nil), // 35: mpi.v1.ConfigVersion - (*FileOverview)(nil), // 36: mpi.v1.FileOverview - (*structpb.Struct)(nil), // 37: google.protobuf.Struct + (*SubscribeExchangeRequest)(nil), // 2: mpi.v1.SubscribeExchangeRequest + (*SubscribeExchangeResponse)(nil), // 3: mpi.v1.SubscribeExchangeResponse + (*SubscribeExchangeMessage)(nil), // 4: mpi.v1.SubscribeExchangeMessage + (*OverviewRequest)(nil), // 5: mpi.v1.OverviewRequest + (*Exchange)(nil), // 6: mpi.v1.Exchange + (*FilesRequest)(nil), // 7: mpi.v1.FilesRequest + (*FileResponse)(nil), // 8: mpi.v1.FileResponse + (*CreateConnectionRequest)(nil), // 9: mpi.v1.CreateConnectionRequest + (*Resource)(nil), // 10: mpi.v1.Resource + (*HostInfo)(nil), // 11: mpi.v1.HostInfo + (*ReleaseInfo)(nil), // 12: mpi.v1.ReleaseInfo + (*ContainerInfo)(nil), // 13: mpi.v1.ContainerInfo + (*CreateConnectionResponse)(nil), // 14: mpi.v1.CreateConnectionResponse + (*UpdateDataPlaneStatusRequest)(nil), // 15: mpi.v1.UpdateDataPlaneStatusRequest + (*UpdateDataPlaneStatusResponse)(nil), // 16: mpi.v1.UpdateDataPlaneStatusResponse + (*InstanceHealth)(nil), // 17: mpi.v1.InstanceHealth + (*UpdateDataPlaneHealthRequest)(nil), // 18: mpi.v1.UpdateDataPlaneHealthRequest + (*UpdateDataPlaneHealthResponse)(nil), // 19: mpi.v1.UpdateDataPlaneHealthResponse + (*DataPlaneResponse)(nil), // 20: mpi.v1.DataPlaneResponse + (*ManagementPlaneRequest)(nil), // 21: mpi.v1.ManagementPlaneRequest + (*StatusRequest)(nil), // 22: mpi.v1.StatusRequest + (*HealthRequest)(nil), // 23: mpi.v1.HealthRequest + (*ConfigApplyRequest)(nil), // 24: mpi.v1.ConfigApplyRequest + (*ConfigUploadRequest)(nil), // 25: mpi.v1.ConfigUploadRequest + (*APIActionRequest)(nil), // 26: mpi.v1.APIActionRequest + (*CommandStatusRequest)(nil), // 27: mpi.v1.CommandStatusRequest + (*Instance)(nil), // 28: mpi.v1.Instance + (*InstanceMeta)(nil), // 29: mpi.v1.InstanceMeta + (*InstanceConfig)(nil), // 30: mpi.v1.InstanceConfig + (*InstanceRuntime)(nil), // 31: mpi.v1.InstanceRuntime + (*InstanceChild)(nil), // 32: mpi.v1.InstanceChild + (*NGINXRuntimeInfo)(nil), // 33: mpi.v1.NGINXRuntimeInfo + (*NGINXPlusRuntimeInfo)(nil), // 34: mpi.v1.NGINXPlusRuntimeInfo + (*InstanceAction)(nil), // 35: mpi.v1.InstanceAction + (*AgentConfig)(nil), // 36: mpi.v1.AgentConfig + (*CommandServer)(nil), // 37: mpi.v1.CommandServer + (*MetricsServer)(nil), // 38: mpi.v1.MetricsServer + (*FileServer)(nil), // 39: mpi.v1.FileServer + (*FileResponse_File)(nil), // 40: mpi.v1.FileResponse.File + (*MessageMeta)(nil), // 41: mpi.v1.MessageMeta + (*FileOverview)(nil), // 42: mpi.v1.FileOverview + (*FileMeta)(nil), // 43: mpi.v1.FileMeta + (*CommandResponse)(nil), // 44: mpi.v1.CommandResponse + (*ConfigVersion)(nil), // 45: mpi.v1.ConfigVersion + (*structpb.Struct)(nil), // 46: google.protobuf.Struct + (*FileContents)(nil), // 47: mpi.v1.FileContents } var file_mpi_v1_command_proto_depIdxs = []int32{ - 33, // 0: mpi.v1.CreateConnectionRequest.message_meta:type_name -> mpi.v1.MessageMeta - 3, // 1: mpi.v1.CreateConnectionRequest.resource:type_name -> mpi.v1.Resource - 21, // 2: mpi.v1.Resource.instances:type_name -> mpi.v1.Instance - 4, // 3: mpi.v1.Resource.host_info:type_name -> mpi.v1.HostInfo - 6, // 4: mpi.v1.Resource.container_info:type_name -> mpi.v1.ContainerInfo - 5, // 5: mpi.v1.HostInfo.release_info:type_name -> mpi.v1.ReleaseInfo - 34, // 6: mpi.v1.CreateConnectionResponse.response:type_name -> mpi.v1.CommandResponse - 29, // 7: mpi.v1.CreateConnectionResponse.agent_config:type_name -> mpi.v1.AgentConfig - 33, // 8: mpi.v1.UpdateDataPlaneStatusRequest.message_meta:type_name -> mpi.v1.MessageMeta - 3, // 9: mpi.v1.UpdateDataPlaneStatusRequest.resource:type_name -> mpi.v1.Resource - 0, // 10: mpi.v1.InstanceHealth.instance_health_status:type_name -> mpi.v1.InstanceHealth.InstanceHealthStatus - 33, // 11: mpi.v1.UpdateDataPlaneHealthRequest.message_meta:type_name -> mpi.v1.MessageMeta - 10, // 12: mpi.v1.UpdateDataPlaneHealthRequest.instance_healths:type_name -> mpi.v1.InstanceHealth - 33, // 13: mpi.v1.DataPlaneResponse.message_meta:type_name -> mpi.v1.MessageMeta - 34, // 14: mpi.v1.DataPlaneResponse.command_response:type_name -> mpi.v1.CommandResponse - 33, // 15: mpi.v1.ManagementPlaneRequest.message_meta:type_name -> mpi.v1.MessageMeta - 15, // 16: mpi.v1.ManagementPlaneRequest.status_request:type_name -> mpi.v1.StatusRequest - 16, // 17: mpi.v1.ManagementPlaneRequest.health_request:type_name -> mpi.v1.HealthRequest - 17, // 18: mpi.v1.ManagementPlaneRequest.config_apply_request:type_name -> mpi.v1.ConfigApplyRequest - 18, // 19: mpi.v1.ManagementPlaneRequest.config_upload_request:type_name -> mpi.v1.ConfigUploadRequest - 19, // 20: mpi.v1.ManagementPlaneRequest.action_request:type_name -> mpi.v1.APIActionRequest - 20, // 21: mpi.v1.ManagementPlaneRequest.command_status_request:type_name -> mpi.v1.CommandStatusRequest - 35, // 22: mpi.v1.ConfigApplyRequest.config_version:type_name -> mpi.v1.ConfigVersion - 36, // 23: mpi.v1.ConfigApplyRequest.overview:type_name -> mpi.v1.FileOverview - 36, // 24: mpi.v1.ConfigUploadRequest.overview:type_name -> mpi.v1.FileOverview - 22, // 25: mpi.v1.Instance.instance_meta:type_name -> mpi.v1.InstanceMeta - 23, // 26: mpi.v1.Instance.instance_config:type_name -> mpi.v1.InstanceConfig - 24, // 27: mpi.v1.Instance.instance_runtime:type_name -> mpi.v1.InstanceRuntime - 1, // 28: mpi.v1.InstanceMeta.instance_type:type_name -> mpi.v1.InstanceMeta.InstanceType - 28, // 29: mpi.v1.InstanceConfig.actions:type_name -> mpi.v1.InstanceAction - 29, // 30: mpi.v1.InstanceConfig.agent_config:type_name -> mpi.v1.AgentConfig - 26, // 31: mpi.v1.InstanceRuntime.nginx_runtime_info:type_name -> mpi.v1.NGINXRuntimeInfo - 27, // 32: mpi.v1.InstanceRuntime.nginx_plus_runtime_info:type_name -> mpi.v1.NGINXPlusRuntimeInfo - 25, // 33: mpi.v1.InstanceRuntime.instance_children:type_name -> mpi.v1.InstanceChild - 30, // 34: mpi.v1.AgentConfig.command:type_name -> mpi.v1.CommandServer - 31, // 35: mpi.v1.AgentConfig.metrics:type_name -> mpi.v1.MetricsServer - 32, // 36: mpi.v1.AgentConfig.file:type_name -> mpi.v1.FileServer - 37, // 37: mpi.v1.AgentConfig.labels:type_name -> google.protobuf.Struct - 2, // 38: mpi.v1.CommandService.CreateConnection:input_type -> mpi.v1.CreateConnectionRequest - 8, // 39: mpi.v1.CommandService.UpdateDataPlaneStatus:input_type -> mpi.v1.UpdateDataPlaneStatusRequest - 11, // 40: mpi.v1.CommandService.UpdateDataPlaneHealth:input_type -> mpi.v1.UpdateDataPlaneHealthRequest - 13, // 41: mpi.v1.CommandService.Subscribe:input_type -> mpi.v1.DataPlaneResponse - 7, // 42: mpi.v1.CommandService.CreateConnection:output_type -> mpi.v1.CreateConnectionResponse - 9, // 43: mpi.v1.CommandService.UpdateDataPlaneStatus:output_type -> mpi.v1.UpdateDataPlaneStatusResponse - 12, // 44: mpi.v1.CommandService.UpdateDataPlaneHealth:output_type -> mpi.v1.UpdateDataPlaneHealthResponse - 14, // 45: mpi.v1.CommandService.Subscribe:output_type -> mpi.v1.ManagementPlaneRequest - 42, // [42:46] is the sub-list for method output_type - 38, // [38:42] is the sub-list for method input_type - 38, // [38:38] is the sub-list for extension type_name - 38, // [38:38] is the sub-list for extension extendee - 0, // [0:38] is the sub-list for field type_name + 41, // 0: mpi.v1.SubscribeExchangeRequest.meta:type_name -> mpi.v1.MessageMeta + 4, // 1: mpi.v1.SubscribeExchangeRequest.message:type_name -> mpi.v1.SubscribeExchangeMessage + 41, // 2: mpi.v1.SubscribeExchangeResponse.meta:type_name -> mpi.v1.MessageMeta + 4, // 3: mpi.v1.SubscribeExchangeResponse.message:type_name -> mpi.v1.SubscribeExchangeMessage + 7, // 4: mpi.v1.SubscribeExchangeMessage.request:type_name -> mpi.v1.FilesRequest + 8, // 5: mpi.v1.SubscribeExchangeMessage.response:type_name -> mpi.v1.FileResponse + 24, // 6: mpi.v1.SubscribeExchangeMessage.config_apply_request:type_name -> mpi.v1.ConfigApplyRequest + 25, // 7: mpi.v1.SubscribeExchangeMessage.config_upload_request:type_name -> mpi.v1.ConfigUploadRequest + 41, // 8: mpi.v1.Exchange.meta:type_name -> mpi.v1.MessageMeta + 7, // 9: mpi.v1.Exchange.request:type_name -> mpi.v1.FilesRequest + 8, // 10: mpi.v1.Exchange.response:type_name -> mpi.v1.FileResponse + 5, // 11: mpi.v1.Exchange.overview_req:type_name -> mpi.v1.OverviewRequest + 42, // 12: mpi.v1.Exchange.overview:type_name -> mpi.v1.FileOverview + 43, // 13: mpi.v1.FilesRequest.files:type_name -> mpi.v1.FileMeta + 40, // 14: mpi.v1.FileResponse.file:type_name -> mpi.v1.FileResponse.File + 41, // 15: mpi.v1.CreateConnectionRequest.message_meta:type_name -> mpi.v1.MessageMeta + 10, // 16: mpi.v1.CreateConnectionRequest.resource:type_name -> mpi.v1.Resource + 28, // 17: mpi.v1.Resource.instances:type_name -> mpi.v1.Instance + 11, // 18: mpi.v1.Resource.host_info:type_name -> mpi.v1.HostInfo + 13, // 19: mpi.v1.Resource.container_info:type_name -> mpi.v1.ContainerInfo + 12, // 20: mpi.v1.HostInfo.release_info:type_name -> mpi.v1.ReleaseInfo + 44, // 21: mpi.v1.CreateConnectionResponse.response:type_name -> mpi.v1.CommandResponse + 36, // 22: mpi.v1.CreateConnectionResponse.agent_config:type_name -> mpi.v1.AgentConfig + 41, // 23: mpi.v1.UpdateDataPlaneStatusRequest.message_meta:type_name -> mpi.v1.MessageMeta + 10, // 24: mpi.v1.UpdateDataPlaneStatusRequest.resource:type_name -> mpi.v1.Resource + 0, // 25: mpi.v1.InstanceHealth.instance_health_status:type_name -> mpi.v1.InstanceHealth.InstanceHealthStatus + 41, // 26: mpi.v1.UpdateDataPlaneHealthRequest.message_meta:type_name -> mpi.v1.MessageMeta + 17, // 27: mpi.v1.UpdateDataPlaneHealthRequest.instance_healths:type_name -> mpi.v1.InstanceHealth + 41, // 28: mpi.v1.DataPlaneResponse.message_meta:type_name -> mpi.v1.MessageMeta + 44, // 29: mpi.v1.DataPlaneResponse.command_response:type_name -> mpi.v1.CommandResponse + 7, // 30: mpi.v1.DataPlaneResponse.request:type_name -> mpi.v1.FilesRequest + 8, // 31: mpi.v1.DataPlaneResponse.response:type_name -> mpi.v1.FileResponse + 41, // 32: mpi.v1.ManagementPlaneRequest.message_meta:type_name -> mpi.v1.MessageMeta + 22, // 33: mpi.v1.ManagementPlaneRequest.status_request:type_name -> mpi.v1.StatusRequest + 23, // 34: mpi.v1.ManagementPlaneRequest.health_request:type_name -> mpi.v1.HealthRequest + 24, // 35: mpi.v1.ManagementPlaneRequest.config_apply_request:type_name -> mpi.v1.ConfigApplyRequest + 25, // 36: mpi.v1.ManagementPlaneRequest.config_upload_request:type_name -> mpi.v1.ConfigUploadRequest + 26, // 37: mpi.v1.ManagementPlaneRequest.action_request:type_name -> mpi.v1.APIActionRequest + 27, // 38: mpi.v1.ManagementPlaneRequest.command_status_request:type_name -> mpi.v1.CommandStatusRequest + 45, // 39: mpi.v1.ConfigApplyRequest.config_version:type_name -> mpi.v1.ConfigVersion + 42, // 40: mpi.v1.ConfigApplyRequest.overview:type_name -> mpi.v1.FileOverview + 42, // 41: mpi.v1.ConfigUploadRequest.overview:type_name -> mpi.v1.FileOverview + 29, // 42: mpi.v1.Instance.instance_meta:type_name -> mpi.v1.InstanceMeta + 30, // 43: mpi.v1.Instance.instance_config:type_name -> mpi.v1.InstanceConfig + 31, // 44: mpi.v1.Instance.instance_runtime:type_name -> mpi.v1.InstanceRuntime + 1, // 45: mpi.v1.InstanceMeta.instance_type:type_name -> mpi.v1.InstanceMeta.InstanceType + 35, // 46: mpi.v1.InstanceConfig.actions:type_name -> mpi.v1.InstanceAction + 36, // 47: mpi.v1.InstanceConfig.agent_config:type_name -> mpi.v1.AgentConfig + 33, // 48: mpi.v1.InstanceRuntime.nginx_runtime_info:type_name -> mpi.v1.NGINXRuntimeInfo + 34, // 49: mpi.v1.InstanceRuntime.nginx_plus_runtime_info:type_name -> mpi.v1.NGINXPlusRuntimeInfo + 32, // 50: mpi.v1.InstanceRuntime.instance_children:type_name -> mpi.v1.InstanceChild + 37, // 51: mpi.v1.AgentConfig.command:type_name -> mpi.v1.CommandServer + 38, // 52: mpi.v1.AgentConfig.metrics:type_name -> mpi.v1.MetricsServer + 39, // 53: mpi.v1.AgentConfig.file:type_name -> mpi.v1.FileServer + 46, // 54: mpi.v1.AgentConfig.labels:type_name -> google.protobuf.Struct + 43, // 55: mpi.v1.FileResponse.File.meta:type_name -> mpi.v1.FileMeta + 47, // 56: mpi.v1.FileResponse.File.file:type_name -> mpi.v1.FileContents + 9, // 57: mpi.v1.CommandService.CreateConnection:input_type -> mpi.v1.CreateConnectionRequest + 15, // 58: mpi.v1.CommandService.UpdateDataPlaneStatus:input_type -> mpi.v1.UpdateDataPlaneStatusRequest + 18, // 59: mpi.v1.CommandService.UpdateDataPlaneHealth:input_type -> mpi.v1.UpdateDataPlaneHealthRequest + 20, // 60: mpi.v1.CommandService.Subscribe:input_type -> mpi.v1.DataPlaneResponse + 6, // 61: mpi.v1.CommandService.FileExchange:input_type -> mpi.v1.Exchange + 14, // 62: mpi.v1.CommandService.CreateConnection:output_type -> mpi.v1.CreateConnectionResponse + 16, // 63: mpi.v1.CommandService.UpdateDataPlaneStatus:output_type -> mpi.v1.UpdateDataPlaneStatusResponse + 19, // 64: mpi.v1.CommandService.UpdateDataPlaneHealth:output_type -> mpi.v1.UpdateDataPlaneHealthResponse + 21, // 65: mpi.v1.CommandService.Subscribe:output_type -> mpi.v1.ManagementPlaneRequest + 6, // 66: mpi.v1.CommandService.FileExchange:output_type -> mpi.v1.Exchange + 62, // [62:67] is the sub-list for method output_type + 57, // [57:62] is the sub-list for method input_type + 57, // [57:57] is the sub-list for extension type_name + 57, // [57:57] is the sub-list for extension extendee + 0, // [0:57] is the sub-list for field type_name } func init() { file_mpi_v1_command_proto_init() } @@ -2574,7 +3254,7 @@ func file_mpi_v1_command_proto_init() { file_mpi_v1_files_proto_init() if !protoimpl.UnsafeEnabled { file_mpi_v1_command_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateConnectionRequest); i { + switch v := v.(*SubscribeExchangeRequest); i { case 0: return &v.state case 1: @@ -2586,7 +3266,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Resource); i { + switch v := v.(*SubscribeExchangeResponse); i { case 0: return &v.state case 1: @@ -2598,7 +3278,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HostInfo); i { + switch v := v.(*SubscribeExchangeMessage); i { case 0: return &v.state case 1: @@ -2610,7 +3290,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReleaseInfo); i { + switch v := v.(*OverviewRequest); i { case 0: return &v.state case 1: @@ -2622,7 +3302,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContainerInfo); i { + switch v := v.(*Exchange); i { case 0: return &v.state case 1: @@ -2634,7 +3314,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateConnectionResponse); i { + switch v := v.(*FilesRequest); i { case 0: return &v.state case 1: @@ -2646,7 +3326,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateDataPlaneStatusRequest); i { + switch v := v.(*FileResponse); i { case 0: return &v.state case 1: @@ -2658,7 +3338,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateDataPlaneStatusResponse); i { + switch v := v.(*CreateConnectionRequest); i { case 0: return &v.state case 1: @@ -2670,7 +3350,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InstanceHealth); i { + switch v := v.(*Resource); i { case 0: return &v.state case 1: @@ -2682,7 +3362,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateDataPlaneHealthRequest); i { + switch v := v.(*HostInfo); i { case 0: return &v.state case 1: @@ -2694,7 +3374,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateDataPlaneHealthResponse); i { + switch v := v.(*ReleaseInfo); i { case 0: return &v.state case 1: @@ -2706,7 +3386,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataPlaneResponse); i { + switch v := v.(*ContainerInfo); i { case 0: return &v.state case 1: @@ -2718,7 +3398,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ManagementPlaneRequest); i { + switch v := v.(*CreateConnectionResponse); i { case 0: return &v.state case 1: @@ -2730,7 +3410,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusRequest); i { + switch v := v.(*UpdateDataPlaneStatusRequest); i { case 0: return &v.state case 1: @@ -2742,7 +3422,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HealthRequest); i { + switch v := v.(*UpdateDataPlaneStatusResponse); i { case 0: return &v.state case 1: @@ -2754,7 +3434,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConfigApplyRequest); i { + switch v := v.(*InstanceHealth); i { case 0: return &v.state case 1: @@ -2766,7 +3446,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConfigUploadRequest); i { + switch v := v.(*UpdateDataPlaneHealthRequest); i { case 0: return &v.state case 1: @@ -2778,7 +3458,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*APIActionRequest); i { + switch v := v.(*UpdateDataPlaneHealthResponse); i { case 0: return &v.state case 1: @@ -2790,7 +3470,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommandStatusRequest); i { + switch v := v.(*DataPlaneResponse); i { case 0: return &v.state case 1: @@ -2802,7 +3482,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Instance); i { + switch v := v.(*ManagementPlaneRequest); i { case 0: return &v.state case 1: @@ -2814,7 +3494,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InstanceMeta); i { + switch v := v.(*StatusRequest); i { case 0: return &v.state case 1: @@ -2826,7 +3506,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InstanceConfig); i { + switch v := v.(*HealthRequest); i { case 0: return &v.state case 1: @@ -2838,7 +3518,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InstanceRuntime); i { + switch v := v.(*ConfigApplyRequest); i { case 0: return &v.state case 1: @@ -2850,7 +3530,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InstanceChild); i { + switch v := v.(*ConfigUploadRequest); i { case 0: return &v.state case 1: @@ -2862,7 +3542,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NGINXRuntimeInfo); i { + switch v := v.(*APIActionRequest); i { case 0: return &v.state case 1: @@ -2874,7 +3554,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NGINXPlusRuntimeInfo); i { + switch v := v.(*CommandStatusRequest); i { case 0: return &v.state case 1: @@ -2886,7 +3566,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InstanceAction); i { + switch v := v.(*Instance); i { case 0: return &v.state case 1: @@ -2898,7 +3578,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AgentConfig); i { + switch v := v.(*InstanceMeta); i { case 0: return &v.state case 1: @@ -2910,7 +3590,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommandServer); i { + switch v := v.(*InstanceConfig); i { case 0: return &v.state case 1: @@ -2922,7 +3602,7 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MetricsServer); i { + switch v := v.(*InstanceRuntime); i { case 0: return &v.state case 1: @@ -2934,6 +3614,90 @@ func file_mpi_v1_command_proto_init() { } } file_mpi_v1_command_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InstanceChild); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mpi_v1_command_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NGINXRuntimeInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mpi_v1_command_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NGINXPlusRuntimeInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mpi_v1_command_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InstanceAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mpi_v1_command_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AgentConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mpi_v1_command_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommandServer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mpi_v1_command_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MetricsServer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mpi_v1_command_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FileServer); i { case 0: return &v.state @@ -2945,12 +3709,40 @@ func file_mpi_v1_command_proto_init() { return nil } } + file_mpi_v1_command_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileResponse_File); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_mpi_v1_command_proto_msgTypes[2].OneofWrappers = []interface{}{ + (*SubscribeExchangeMessage_Request)(nil), + (*SubscribeExchangeMessage_Response)(nil), + (*SubscribeExchangeMessage_ConfigApplyRequest)(nil), + (*SubscribeExchangeMessage_ConfigUploadRequest)(nil), } - file_mpi_v1_command_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_mpi_v1_command_proto_msgTypes[4].OneofWrappers = []interface{}{ + (*Exchange_Request)(nil), + (*Exchange_Response)(nil), + (*Exchange_OverviewReq)(nil), + (*Exchange_Overview)(nil), + } + file_mpi_v1_command_proto_msgTypes[8].OneofWrappers = []interface{}{ (*Resource_HostInfo)(nil), (*Resource_ContainerInfo)(nil), } - file_mpi_v1_command_proto_msgTypes[12].OneofWrappers = []interface{}{ + file_mpi_v1_command_proto_msgTypes[18].OneofWrappers = []interface{}{ + (*DataPlaneResponse_Request)(nil), + (*DataPlaneResponse_Response)(nil), + } + file_mpi_v1_command_proto_msgTypes[19].OneofWrappers = []interface{}{ (*ManagementPlaneRequest_StatusRequest)(nil), (*ManagementPlaneRequest_HealthRequest)(nil), (*ManagementPlaneRequest_ConfigApplyRequest)(nil), @@ -2958,12 +3750,12 @@ func file_mpi_v1_command_proto_init() { (*ManagementPlaneRequest_ActionRequest)(nil), (*ManagementPlaneRequest_CommandStatusRequest)(nil), } - file_mpi_v1_command_proto_msgTypes[15].OneofWrappers = []interface{}{} - file_mpi_v1_command_proto_msgTypes[16].OneofWrappers = []interface{}{} - file_mpi_v1_command_proto_msgTypes[21].OneofWrappers = []interface{}{ + file_mpi_v1_command_proto_msgTypes[22].OneofWrappers = []interface{}{} + file_mpi_v1_command_proto_msgTypes[23].OneofWrappers = []interface{}{} + file_mpi_v1_command_proto_msgTypes[28].OneofWrappers = []interface{}{ (*InstanceConfig_AgentConfig)(nil), } - file_mpi_v1_command_proto_msgTypes[22].OneofWrappers = []interface{}{ + file_mpi_v1_command_proto_msgTypes[29].OneofWrappers = []interface{}{ (*InstanceRuntime_NginxRuntimeInfo)(nil), (*InstanceRuntime_NginxPlusRuntimeInfo)(nil), } @@ -2973,7 +3765,7 @@ func file_mpi_v1_command_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_mpi_v1_command_proto_rawDesc, NumEnums: 2, - NumMessages: 31, + NumMessages: 39, NumExtensions: 0, NumServices: 1, }, diff --git a/api/grpc/mpi/v1/command.pb.validate.go b/api/grpc/mpi/v1/command.pb.validate.go index eca4032b8..f0d2cb0c3 100644 --- a/api/grpc/mpi/v1/command.pb.validate.go +++ b/api/grpc/mpi/v1/command.pb.validate.go @@ -35,6 +35,1255 @@ var ( _ = sort.Sort ) +// Validate checks the field values on SubscribeExchangeRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *SubscribeExchangeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SubscribeExchangeRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// SubscribeExchangeRequestMultiError, or nil if none found. +func (m *SubscribeExchangeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *SubscribeExchangeRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetMeta()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubscribeExchangeRequestValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubscribeExchangeRequestValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SubscribeExchangeRequestValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetMessage()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubscribeExchangeRequestValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubscribeExchangeRequestValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMessage()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SubscribeExchangeRequestValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return SubscribeExchangeRequestMultiError(errors) + } + + return nil +} + +// SubscribeExchangeRequestMultiError is an error wrapping multiple validation +// errors returned by SubscribeExchangeRequest.ValidateAll() if the designated +// constraints aren't met. +type SubscribeExchangeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SubscribeExchangeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SubscribeExchangeRequestMultiError) AllErrors() []error { return m } + +// SubscribeExchangeRequestValidationError is the validation error returned by +// SubscribeExchangeRequest.Validate if the designated constraints aren't met. +type SubscribeExchangeRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SubscribeExchangeRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SubscribeExchangeRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SubscribeExchangeRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SubscribeExchangeRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SubscribeExchangeRequestValidationError) ErrorName() string { + return "SubscribeExchangeRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e SubscribeExchangeRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSubscribeExchangeRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SubscribeExchangeRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SubscribeExchangeRequestValidationError{} + +// Validate checks the field values on SubscribeExchangeResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *SubscribeExchangeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SubscribeExchangeResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// SubscribeExchangeResponseMultiError, or nil if none found. +func (m *SubscribeExchangeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *SubscribeExchangeResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetMeta()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubscribeExchangeResponseValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubscribeExchangeResponseValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SubscribeExchangeResponseValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetMessage()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubscribeExchangeResponseValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubscribeExchangeResponseValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMessage()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SubscribeExchangeResponseValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return SubscribeExchangeResponseMultiError(errors) + } + + return nil +} + +// SubscribeExchangeResponseMultiError is an error wrapping multiple validation +// errors returned by SubscribeExchangeResponse.ValidateAll() if the +// designated constraints aren't met. +type SubscribeExchangeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SubscribeExchangeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SubscribeExchangeResponseMultiError) AllErrors() []error { return m } + +// SubscribeExchangeResponseValidationError is the validation error returned by +// SubscribeExchangeResponse.Validate if the designated constraints aren't met. +type SubscribeExchangeResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SubscribeExchangeResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SubscribeExchangeResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SubscribeExchangeResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SubscribeExchangeResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SubscribeExchangeResponseValidationError) ErrorName() string { + return "SubscribeExchangeResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e SubscribeExchangeResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSubscribeExchangeResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SubscribeExchangeResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SubscribeExchangeResponseValidationError{} + +// Validate checks the field values on SubscribeExchangeMessage with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *SubscribeExchangeMessage) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SubscribeExchangeMessage with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// SubscribeExchangeMessageMultiError, or nil if none found. +func (m *SubscribeExchangeMessage) ValidateAll() error { + return m.validate(true) +} + +func (m *SubscribeExchangeMessage) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + switch v := m.Message.(type) { + case *SubscribeExchangeMessage_Request: + if v == nil { + err := SubscribeExchangeMessageValidationError{ + field: "Message", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubscribeExchangeMessageValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubscribeExchangeMessageValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SubscribeExchangeMessageValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *SubscribeExchangeMessage_Response: + if v == nil { + err := SubscribeExchangeMessageValidationError{ + field: "Message", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetResponse()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubscribeExchangeMessageValidationError{ + field: "Response", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubscribeExchangeMessageValidationError{ + field: "Response", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SubscribeExchangeMessageValidationError{ + field: "Response", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *SubscribeExchangeMessage_ConfigApplyRequest: + if v == nil { + err := SubscribeExchangeMessageValidationError{ + field: "Message", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetConfigApplyRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubscribeExchangeMessageValidationError{ + field: "ConfigApplyRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubscribeExchangeMessageValidationError{ + field: "ConfigApplyRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConfigApplyRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SubscribeExchangeMessageValidationError{ + field: "ConfigApplyRequest", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *SubscribeExchangeMessage_ConfigUploadRequest: + if v == nil { + err := SubscribeExchangeMessageValidationError{ + field: "Message", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetConfigUploadRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubscribeExchangeMessageValidationError{ + field: "ConfigUploadRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubscribeExchangeMessageValidationError{ + field: "ConfigUploadRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConfigUploadRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SubscribeExchangeMessageValidationError{ + field: "ConfigUploadRequest", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + _ = v // ensures v is used + } + + if len(errors) > 0 { + return SubscribeExchangeMessageMultiError(errors) + } + + return nil +} + +// SubscribeExchangeMessageMultiError is an error wrapping multiple validation +// errors returned by SubscribeExchangeMessage.ValidateAll() if the designated +// constraints aren't met. +type SubscribeExchangeMessageMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SubscribeExchangeMessageMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SubscribeExchangeMessageMultiError) AllErrors() []error { return m } + +// SubscribeExchangeMessageValidationError is the validation error returned by +// SubscribeExchangeMessage.Validate if the designated constraints aren't met. +type SubscribeExchangeMessageValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SubscribeExchangeMessageValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SubscribeExchangeMessageValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SubscribeExchangeMessageValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SubscribeExchangeMessageValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SubscribeExchangeMessageValidationError) ErrorName() string { + return "SubscribeExchangeMessageValidationError" +} + +// Error satisfies the builtin error interface +func (e SubscribeExchangeMessageValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSubscribeExchangeMessage.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SubscribeExchangeMessageValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SubscribeExchangeMessageValidationError{} + +// Validate checks the field values on OverviewRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *OverviewRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OverviewRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// OverviewRequestMultiError, or nil if none found. +func (m *OverviewRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *OverviewRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return OverviewRequestMultiError(errors) + } + + return nil +} + +// OverviewRequestMultiError is an error wrapping multiple validation errors +// returned by OverviewRequest.ValidateAll() if the designated constraints +// aren't met. +type OverviewRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OverviewRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OverviewRequestMultiError) AllErrors() []error { return m } + +// OverviewRequestValidationError is the validation error returned by +// OverviewRequest.Validate if the designated constraints aren't met. +type OverviewRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e OverviewRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e OverviewRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e OverviewRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e OverviewRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e OverviewRequestValidationError) ErrorName() string { return "OverviewRequestValidationError" } + +// Error satisfies the builtin error interface +func (e OverviewRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOverviewRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = OverviewRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = OverviewRequestValidationError{} + +// Validate checks the field values on Exchange with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *Exchange) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Exchange with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ExchangeMultiError, or nil +// if none found. +func (m *Exchange) ValidateAll() error { + return m.validate(true) +} + +func (m *Exchange) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetMeta()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ExchangeValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ExchangeValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + } + } + } + + switch v := m.Message.(type) { + case *Exchange_Request: + if v == nil { + err := ExchangeValidationError{ + field: "Message", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ExchangeValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ExchangeValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Exchange_Response: + if v == nil { + err := ExchangeValidationError{ + field: "Message", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetResponse()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ExchangeValidationError{ + field: "Response", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ExchangeValidationError{ + field: "Response", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeValidationError{ + field: "Response", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Exchange_OverviewReq: + if v == nil { + err := ExchangeValidationError{ + field: "Message", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetOverviewReq()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ExchangeValidationError{ + field: "OverviewReq", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ExchangeValidationError{ + field: "OverviewReq", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOverviewReq()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeValidationError{ + field: "OverviewReq", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Exchange_Overview: + if v == nil { + err := ExchangeValidationError{ + field: "Message", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetOverview()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ExchangeValidationError{ + field: "Overview", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ExchangeValidationError{ + field: "Overview", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOverview()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeValidationError{ + field: "Overview", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + _ = v // ensures v is used + } + + if len(errors) > 0 { + return ExchangeMultiError(errors) + } + + return nil +} + +// ExchangeMultiError is an error wrapping multiple validation errors returned +// by Exchange.ValidateAll() if the designated constraints aren't met. +type ExchangeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ExchangeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ExchangeMultiError) AllErrors() []error { return m } + +// ExchangeValidationError is the validation error returned by +// Exchange.Validate if the designated constraints aren't met. +type ExchangeValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ExchangeValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ExchangeValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ExchangeValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ExchangeValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ExchangeValidationError) ErrorName() string { return "ExchangeValidationError" } + +// Error satisfies the builtin error interface +func (e ExchangeValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sExchange.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ExchangeValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ExchangeValidationError{} + +// Validate checks the field values on FilesRequest with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *FilesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on FilesRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in FilesRequestMultiError, or +// nil if none found. +func (m *FilesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *FilesRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetFiles() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, FilesRequestValidationError{ + field: fmt.Sprintf("Files[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, FilesRequestValidationError{ + field: fmt.Sprintf("Files[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilesRequestValidationError{ + field: fmt.Sprintf("Files[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return FilesRequestMultiError(errors) + } + + return nil +} + +// FilesRequestMultiError is an error wrapping multiple validation errors +// returned by FilesRequest.ValidateAll() if the designated constraints aren't met. +type FilesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m FilesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m FilesRequestMultiError) AllErrors() []error { return m } + +// FilesRequestValidationError is the validation error returned by +// FilesRequest.Validate if the designated constraints aren't met. +type FilesRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e FilesRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e FilesRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e FilesRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e FilesRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e FilesRequestValidationError) ErrorName() string { return "FilesRequestValidationError" } + +// Error satisfies the builtin error interface +func (e FilesRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sFilesRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = FilesRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = FilesRequestValidationError{} + +// Validate checks the field values on FileResponse with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *FileResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on FileResponse with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in FileResponseMultiError, or +// nil if none found. +func (m *FileResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *FileResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetFile()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, FileResponseValidationError{ + field: "File", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, FileResponseValidationError{ + field: "File", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetFile()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FileResponseValidationError{ + field: "File", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return FileResponseMultiError(errors) + } + + return nil +} + +// FileResponseMultiError is an error wrapping multiple validation errors +// returned by FileResponse.ValidateAll() if the designated constraints aren't met. +type FileResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m FileResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m FileResponseMultiError) AllErrors() []error { return m } + +// FileResponseValidationError is the validation error returned by +// FileResponse.Validate if the designated constraints aren't met. +type FileResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e FileResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e FileResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e FileResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e FileResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e FileResponseValidationError) ErrorName() string { return "FileResponseValidationError" } + +// Error satisfies the builtin error interface +func (e FileResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sFileResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = FileResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = FileResponseValidationError{} + // Validate checks the field values on CreateConnectionRequest with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. @@ -1639,6 +2888,93 @@ func (m *DataPlaneResponse) validate(all bool) error { } } + switch v := m.Message.(type) { + case *DataPlaneResponse_Request: + if v == nil { + err := DataPlaneResponseValidationError{ + field: "Message", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DataPlaneResponseValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DataPlaneResponseValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DataPlaneResponseValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *DataPlaneResponse_Response: + if v == nil { + err := DataPlaneResponseValidationError{ + field: "Message", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetResponse()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DataPlaneResponseValidationError{ + field: "Response", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DataPlaneResponseValidationError{ + field: "Response", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DataPlaneResponseValidationError{ + field: "Response", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + _ = v // ensures v is used + } + if len(errors) > 0 { return DataPlaneResponseMultiError(errors) } @@ -4432,3 +5768,163 @@ var _ interface { Cause() error ErrorName() string } = FileServerValidationError{} + +// Validate checks the field values on FileResponse_File with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *FileResponse_File) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on FileResponse_File with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// FileResponse_FileMultiError, or nil if none found. +func (m *FileResponse_File) ValidateAll() error { + return m.validate(true) +} + +func (m *FileResponse_File) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetMeta()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, FileResponse_FileValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, FileResponse_FileValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FileResponse_FileValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetFile()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, FileResponse_FileValidationError{ + field: "File", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, FileResponse_FileValidationError{ + field: "File", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetFile()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FileResponse_FileValidationError{ + field: "File", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return FileResponse_FileMultiError(errors) + } + + return nil +} + +// FileResponse_FileMultiError is an error wrapping multiple validation errors +// returned by FileResponse_File.ValidateAll() if the designated constraints +// aren't met. +type FileResponse_FileMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m FileResponse_FileMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m FileResponse_FileMultiError) AllErrors() []error { return m } + +// FileResponse_FileValidationError is the validation error returned by +// FileResponse_File.Validate if the designated constraints aren't met. +type FileResponse_FileValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e FileResponse_FileValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e FileResponse_FileValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e FileResponse_FileValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e FileResponse_FileValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e FileResponse_FileValidationError) ErrorName() string { + return "FileResponse_FileValidationError" +} + +// Error satisfies the builtin error interface +func (e FileResponse_FileValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sFileResponse_File.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = FileResponse_FileValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = FileResponse_FileValidationError{} diff --git a/api/grpc/mpi/v1/command.proto b/api/grpc/mpi/v1/command.proto index 8dd1c546f..20db380c6 100644 --- a/api/grpc/mpi/v1/command.proto +++ b/api/grpc/mpi/v1/command.proto @@ -35,8 +35,58 @@ service CommandService { // buf:lint:ignore RPC_RESPONSE_STANDARD_NAME // buf:lint:ignore RPC_REQUEST_STANDARD_NAME rpc Subscribe(stream DataPlaneResponse) returns (stream ManagementPlaneRequest) {} + + rpc FileExchange(stream Exchange) returns (stream Exchange) {} +} + +message SubscribeExchangeRequest { + // Meta-information associated with a message + mpi.v1.MessageMeta meta = 1; + SubscribeExchangeMessage message = 2; +} + +message SubscribeExchangeResponse { + // Meta-information associated with a message + mpi.v1.MessageMeta meta = 1; + SubscribeExchangeMessage message = 2; +} + +message SubscribeExchangeMessage { + oneof message { + FilesRequest request = 2; + FileResponse response = 3; + // if overview is missing, triggers a rpc GetOverview(ConfigVersion) first + ConfigApplyRequest config_apply_request = 4; + // triggers a series of rpc UpdateFile(File) for that instances + ConfigUploadRequest config_upload_request = 5; + } } +message OverviewRequest { + +} +message Exchange { + // Meta-information associated with a message + mpi.v1.MessageMeta meta = 1; + oneof message { + FilesRequest request = 2; + FileResponse response = 3; + OverviewRequest overview_req = 4; + FileOverview overview = 5; + } +} +message FilesRequest { + repeated FileMeta files = 2; +} + +// Represents the response to a get file request +message FileResponse { + message File { + FileMeta meta = 1; + FileContents file = 2; + } + File file = 1; +} // The connection request is an initial handshake to establish a connection, sending NGINX Agent instance information message CreateConnectionRequest { // Meta-information associated with a message @@ -145,6 +195,11 @@ message DataPlaneResponse { mpi.v1.MessageMeta message_meta = 1; // The command response with the associated request mpi.v1.CommandResponse command_response = 2; + + oneof message { + FilesRequest request = 3; + FileResponse response = 4; + } } // A Management Plane request for information, triggers an associated rpc on the Data Plane diff --git a/api/grpc/mpi/v1/command_grpc.pb.go b/api/grpc/mpi/v1/command_grpc.pb.go index 4ef33e036..8dc27d590 100644 --- a/api/grpc/mpi/v1/command_grpc.pb.go +++ b/api/grpc/mpi/v1/command_grpc.pb.go @@ -8,7 +8,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.3.0 +// - protoc-gen-go-grpc v1.4.0 // - protoc (unknown) // source: mpi/v1/command.proto @@ -23,19 +23,30 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 +// Requires gRPC-Go v1.62.0 or later. +const _ = grpc.SupportPackageIsVersion8 const ( CommandService_CreateConnection_FullMethodName = "/mpi.v1.CommandService/CreateConnection" CommandService_UpdateDataPlaneStatus_FullMethodName = "/mpi.v1.CommandService/UpdateDataPlaneStatus" CommandService_UpdateDataPlaneHealth_FullMethodName = "/mpi.v1.CommandService/UpdateDataPlaneHealth" CommandService_Subscribe_FullMethodName = "/mpi.v1.CommandService/Subscribe" + CommandService_FileExchange_FullMethodName = "/mpi.v1.CommandService/FileExchange" ) // CommandServiceClient is the client API for CommandService service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +// +// A service outlining the command and control options for a Data Plane Client +// All operations are written from a client perspective +// The RPC calls generally flow Client -> Server, except for Subscribe which contains a bidirectional stream +// The ManagementPlaneRequest sent in the Subscribe stream triggers one or more client actions. +// Messages provided by the Management Plane must be a FIFO ordered queue. Messages in the queue must have a monotonically-increasing integer index. +// The indexes do not need to be sequential. The index must be a 64-bit signed integer. +// The index must not reset for the entire lifetime of a unique Agent (i.e. the index does not reset to 0 only because of a temporary disconnection or new session). +// Messages must not be removed from the Management Plane queue until Ack’d by the Agent. +// Messages sent but not yet Ack’d must be kept in an “in-flight” buffer as they may need to be retried. type CommandServiceClient interface { // Connects NGINX Agent to the Management Plane agnostic of instance data CreateConnection(ctx context.Context, in *CreateConnectionRequest, opts ...grpc.CallOption) (*CreateConnectionResponse, error) @@ -47,6 +58,7 @@ type CommandServiceClient interface { // buf:lint:ignore RPC_RESPONSE_STANDARD_NAME // buf:lint:ignore RPC_REQUEST_STANDARD_NAME Subscribe(ctx context.Context, opts ...grpc.CallOption) (CommandService_SubscribeClient, error) + FileExchange(ctx context.Context, opts ...grpc.CallOption) (CommandService_FileExchangeClient, error) } type commandServiceClient struct { @@ -58,8 +70,9 @@ func NewCommandServiceClient(cc grpc.ClientConnInterface) CommandServiceClient { } func (c *commandServiceClient) CreateConnection(ctx context.Context, in *CreateConnectionRequest, opts ...grpc.CallOption) (*CreateConnectionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CreateConnectionResponse) - err := c.cc.Invoke(ctx, CommandService_CreateConnection_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, CommandService_CreateConnection_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -67,8 +80,9 @@ func (c *commandServiceClient) CreateConnection(ctx context.Context, in *CreateC } func (c *commandServiceClient) UpdateDataPlaneStatus(ctx context.Context, in *UpdateDataPlaneStatusRequest, opts ...grpc.CallOption) (*UpdateDataPlaneStatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(UpdateDataPlaneStatusResponse) - err := c.cc.Invoke(ctx, CommandService_UpdateDataPlaneStatus_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, CommandService_UpdateDataPlaneStatus_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -76,8 +90,9 @@ func (c *commandServiceClient) UpdateDataPlaneStatus(ctx context.Context, in *Up } func (c *commandServiceClient) UpdateDataPlaneHealth(ctx context.Context, in *UpdateDataPlaneHealthRequest, opts ...grpc.CallOption) (*UpdateDataPlaneHealthResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(UpdateDataPlaneHealthResponse) - err := c.cc.Invoke(ctx, CommandService_UpdateDataPlaneHealth_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, CommandService_UpdateDataPlaneHealth_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -85,11 +100,12 @@ func (c *commandServiceClient) UpdateDataPlaneHealth(ctx context.Context, in *Up } func (c *commandServiceClient) Subscribe(ctx context.Context, opts ...grpc.CallOption) (CommandService_SubscribeClient, error) { - stream, err := c.cc.NewStream(ctx, &CommandService_ServiceDesc.Streams[0], CommandService_Subscribe_FullMethodName, opts...) + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &CommandService_ServiceDesc.Streams[0], CommandService_Subscribe_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &commandServiceSubscribeClient{stream} + x := &commandServiceSubscribeClient{ClientStream: stream} return x, nil } @@ -115,9 +131,51 @@ func (x *commandServiceSubscribeClient) Recv() (*ManagementPlaneRequest, error) return m, nil } +func (c *commandServiceClient) FileExchange(ctx context.Context, opts ...grpc.CallOption) (CommandService_FileExchangeClient, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &CommandService_ServiceDesc.Streams[1], CommandService_FileExchange_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &commandServiceFileExchangeClient{ClientStream: stream} + return x, nil +} + +type CommandService_FileExchangeClient interface { + Send(*Exchange) error + Recv() (*Exchange, error) + grpc.ClientStream +} + +type commandServiceFileExchangeClient struct { + grpc.ClientStream +} + +func (x *commandServiceFileExchangeClient) Send(m *Exchange) error { + return x.ClientStream.SendMsg(m) +} + +func (x *commandServiceFileExchangeClient) Recv() (*Exchange, error) { + m := new(Exchange) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // CommandServiceServer is the server API for CommandService service. // All implementations should embed UnimplementedCommandServiceServer // for forward compatibility +// +// A service outlining the command and control options for a Data Plane Client +// All operations are written from a client perspective +// The RPC calls generally flow Client -> Server, except for Subscribe which contains a bidirectional stream +// The ManagementPlaneRequest sent in the Subscribe stream triggers one or more client actions. +// Messages provided by the Management Plane must be a FIFO ordered queue. Messages in the queue must have a monotonically-increasing integer index. +// The indexes do not need to be sequential. The index must be a 64-bit signed integer. +// The index must not reset for the entire lifetime of a unique Agent (i.e. the index does not reset to 0 only because of a temporary disconnection or new session). +// Messages must not be removed from the Management Plane queue until Ack’d by the Agent. +// Messages sent but not yet Ack’d must be kept in an “in-flight” buffer as they may need to be retried. type CommandServiceServer interface { // Connects NGINX Agent to the Management Plane agnostic of instance data CreateConnection(context.Context, *CreateConnectionRequest) (*CreateConnectionResponse, error) @@ -129,6 +187,7 @@ type CommandServiceServer interface { // buf:lint:ignore RPC_RESPONSE_STANDARD_NAME // buf:lint:ignore RPC_REQUEST_STANDARD_NAME Subscribe(CommandService_SubscribeServer) error + FileExchange(CommandService_FileExchangeServer) error } // UnimplementedCommandServiceServer should be embedded to have forward compatible implementations. @@ -147,6 +206,9 @@ func (UnimplementedCommandServiceServer) UpdateDataPlaneHealth(context.Context, func (UnimplementedCommandServiceServer) Subscribe(CommandService_SubscribeServer) error { return status.Errorf(codes.Unimplemented, "method Subscribe not implemented") } +func (UnimplementedCommandServiceServer) FileExchange(CommandService_FileExchangeServer) error { + return status.Errorf(codes.Unimplemented, "method FileExchange not implemented") +} // UnsafeCommandServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to CommandServiceServer will @@ -214,7 +276,7 @@ func _CommandService_UpdateDataPlaneHealth_Handler(srv interface{}, ctx context. } func _CommandService_Subscribe_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(CommandServiceServer).Subscribe(&commandServiceSubscribeServer{stream}) + return srv.(CommandServiceServer).Subscribe(&commandServiceSubscribeServer{ServerStream: stream}) } type CommandService_SubscribeServer interface { @@ -239,6 +301,32 @@ func (x *commandServiceSubscribeServer) Recv() (*DataPlaneResponse, error) { return m, nil } +func _CommandService_FileExchange_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(CommandServiceServer).FileExchange(&commandServiceFileExchangeServer{ServerStream: stream}) +} + +type CommandService_FileExchangeServer interface { + Send(*Exchange) error + Recv() (*Exchange, error) + grpc.ServerStream +} + +type commandServiceFileExchangeServer struct { + grpc.ServerStream +} + +func (x *commandServiceFileExchangeServer) Send(m *Exchange) error { + return x.ServerStream.SendMsg(m) +} + +func (x *commandServiceFileExchangeServer) Recv() (*Exchange, error) { + m := new(Exchange) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // CommandService_ServiceDesc is the grpc.ServiceDesc for CommandService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -266,6 +354,12 @@ var CommandService_ServiceDesc = grpc.ServiceDesc{ ServerStreams: true, ClientStreams: true, }, + { + StreamName: "FileExchange", + Handler: _CommandService_FileExchange_Handler, + ServerStreams: true, + ClientStreams: true, + }, }, Metadata: "mpi/v1/command.proto", } diff --git a/api/grpc/mpi/v1/files.pb.go b/api/grpc/mpi/v1/files.pb.go index a509a5b31..9cef6f64c 100644 --- a/api/grpc/mpi/v1/files.pb.go +++ b/api/grpc/mpi/v1/files.pb.go @@ -253,11 +253,14 @@ func (x *UpdateOverviewRequest) GetOverview() *FileOverview { return nil } -// Represents a the response from an UpdateOverviewRequest - intentionally left empty +// Represents a the response from an UpdateOverviewRequest. Currently this returns a list of FileMeta in which the +// management plane is requesting. It's up to the client to send it to the management plane. type UpdateOverviewResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Files []*FileMeta `protobuf:"bytes,1,rep,name=files,proto3" json:"files,omitempty"` } func (x *UpdateOverviewResponse) Reset() { @@ -292,6 +295,13 @@ func (*UpdateOverviewResponse) Descriptor() ([]byte, []int) { return file_mpi_v1_files_proto_rawDescGZIP(), []int{3} } +func (x *UpdateOverviewResponse) GetFiles() []*FileMeta { + if x != nil { + return x.Files + } + return nil +} + // Represents a specific configuration version associated with an instance type ConfigVersion struct { state protoimpl.MessageState @@ -713,10 +723,14 @@ type UpdateFileRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // meta should be the same through out the request + MessageMeta *MessageMeta `protobuf:"bytes,1,opt,name=message_meta,json=messageMeta,proto3" json:"message_meta,omitempty"` // The file requested to be updated - File *File `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"` + File *File `protobuf:"bytes,2,opt,name=file,proto3" json:"file,omitempty"` // The contents of a file - Contents *FileContents `protobuf:"bytes,2,opt,name=contents,proto3" json:"contents,omitempty"` + Contents *FileContents `protobuf:"bytes,3,opt,name=contents,proto3" json:"contents,omitempty"` + // seq of file base on the outstanding request, counting down, zero indicates no more file to transfer + FileSeq int32 `protobuf:"varint,4,opt,name=file_seq,json=fileSeq,proto3" json:"file_seq,omitempty"` } func (x *UpdateFileRequest) Reset() { @@ -751,6 +765,13 @@ func (*UpdateFileRequest) Descriptor() ([]byte, []int) { return file_mpi_v1_files_proto_rawDescGZIP(), []int{11} } +func (x *UpdateFileRequest) GetMessageMeta() *MessageMeta { + if x != nil { + return x.MessageMeta + } + return nil +} + func (x *UpdateFileRequest) GetFile() *File { if x != nil { return x.File @@ -765,6 +786,13 @@ func (x *UpdateFileRequest) GetContents() *FileContents { return nil } +func (x *UpdateFileRequest) GetFileSeq() int32 { + if x != nil { + return x.FileSeq + } + return 0 +} + // Represents the response to an update file request type UpdateFileResponse struct { state protoimpl.MessageState @@ -845,96 +873,104 @@ var file_mpi_v1_files_proto_rawDesc = []byte{ 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x30, 0x0a, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, - 0x08, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x22, 0x18, 0x0a, 0x16, 0x55, 0x70, 0x64, + 0x08, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x22, 0x40, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, - 0xb0, 0x01, 0x01, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x0c, 0x46, 0x69, 0x6c, - 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x12, 0x22, 0x0a, 0x05, 0x66, 0x69, 0x6c, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x3c, 0x0a, - 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x82, 0x02, 0x0a, 0x04, - 0x46, 0x69, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, - 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x22, 0x89, 0x01, 0x0a, 0x0a, 0x46, 0x69, - 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x49, 0x4c, 0x45, - 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x41, 0x43, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x41, 0x44, 0x44, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x41, 0x43, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x03, 0x12, 0x16, 0x0a, - 0x12, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, - 0x45, 0x54, 0x45, 0x10, 0x04, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x77, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0b, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x09, 0x66, 0x69, - 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x22, 0x43, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2a, - 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xcf, 0x01, 0x0a, 0x08, 0x46, - 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x3a, 0x01, 0x2f, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x49, 0x0a, 0x0d, 0x6d, 0x6f, 0x64, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xba, 0x48, - 0x05, 0xb2, 0x01, 0x02, 0x38, 0x01, 0x52, 0x0c, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0xba, 0x48, 0x0d, 0x72, 0x0b, - 0x32, 0x09, 0x30, 0x5b, 0x30, 0x2d, 0x37, 0x5d, 0x7b, 0x33, 0x7d, 0x52, 0x0b, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x67, 0x0a, 0x11, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x20, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, - 0x69, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, - 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x08, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x43, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, - 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x66, - 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x32, 0xaf, 0x02, 0x0a, 0x0b, 0x46, - 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x47, 0x65, - 0x74, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x12, 0x1a, 0x2e, 0x6d, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x76, - 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x12, 0x1d, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x69, - 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, - 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6d, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, - 0x69, 0x6c, 0x65, 0x12, 0x19, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, - 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, - 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x08, 0x5a, 0x06, - 0x6d, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, + 0x4d, 0x65, 0x74, 0x61, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x54, 0x0a, 0x0d, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x0b, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0a, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x70, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, + 0x77, 0x12, 0x22, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x22, 0x82, 0x02, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x09, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x34, 0x0a, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6d, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, + 0x01, 0x22, 0x89, 0x01, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, + 0x15, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x43, + 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x49, 0x4c, 0x45, + 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x44, 0x44, 0x10, 0x02, 0x12, 0x16, 0x0a, + 0x12, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x41, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x04, 0x42, 0x09, 0x0a, + 0x07, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x77, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, + 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0c, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, + 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, + 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x22, 0x43, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x08, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2a, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0xcf, 0x01, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, + 0x1c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, + 0x48, 0x05, 0x72, 0x03, 0x3a, 0x01, 0x2f, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, + 0x68, 0x12, 0x49, 0x0a, 0x0d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xba, 0x48, 0x05, 0xb2, 0x01, 0x02, 0x38, 0x01, 0x52, 0x0c, + 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x0b, + 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x10, 0xba, 0x48, 0x0d, 0x72, 0x0b, 0x32, 0x09, 0x30, 0x5b, 0x30, 0x2d, 0x37, 0x5d, + 0x7b, 0x33, 0x7d, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x22, 0xba, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0c, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, + 0x74, 0x61, 0x12, 0x20, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, + 0x66, 0x69, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x08, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, + 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x65, + 0x71, 0x22, 0x43, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x08, 0x66, 0x69, + 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x32, 0xaf, 0x02, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4f, 0x76, 0x65, + 0x72, 0x76, 0x69, 0x65, 0x77, 0x12, 0x1a, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x76, + 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x51, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, + 0x65, 0x77, 0x12, 0x1d, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1e, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x16, + 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x45, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, + 0x19, 0x2e, 0x6d, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x08, 0x5a, 0x06, 0x6d, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -975,30 +1011,32 @@ var file_mpi_v1_files_proto_depIdxs = []int32{ 6, // 2: mpi.v1.GetOverviewResponse.overview:type_name -> mpi.v1.FileOverview 14, // 3: mpi.v1.UpdateOverviewRequest.message_meta:type_name -> mpi.v1.MessageMeta 6, // 4: mpi.v1.UpdateOverviewRequest.overview:type_name -> mpi.v1.FileOverview - 7, // 5: mpi.v1.FileOverview.files:type_name -> mpi.v1.File - 5, // 6: mpi.v1.FileOverview.config_version:type_name -> mpi.v1.ConfigVersion - 11, // 7: mpi.v1.File.file_meta:type_name -> mpi.v1.FileMeta - 0, // 8: mpi.v1.File.action:type_name -> mpi.v1.File.FileAction - 14, // 9: mpi.v1.GetFileRequest.message_meta:type_name -> mpi.v1.MessageMeta - 11, // 10: mpi.v1.GetFileRequest.file_meta:type_name -> mpi.v1.FileMeta - 10, // 11: mpi.v1.GetFileResponse.contents:type_name -> mpi.v1.FileContents - 15, // 12: mpi.v1.FileMeta.modified_time:type_name -> google.protobuf.Timestamp - 7, // 13: mpi.v1.UpdateFileRequest.file:type_name -> mpi.v1.File - 10, // 14: mpi.v1.UpdateFileRequest.contents:type_name -> mpi.v1.FileContents - 11, // 15: mpi.v1.UpdateFileResponse.file_meta:type_name -> mpi.v1.FileMeta - 1, // 16: mpi.v1.FileService.GetOverview:input_type -> mpi.v1.GetOverviewRequest - 3, // 17: mpi.v1.FileService.UpdateOverview:input_type -> mpi.v1.UpdateOverviewRequest - 8, // 18: mpi.v1.FileService.GetFile:input_type -> mpi.v1.GetFileRequest - 12, // 19: mpi.v1.FileService.UpdateFile:input_type -> mpi.v1.UpdateFileRequest - 2, // 20: mpi.v1.FileService.GetOverview:output_type -> mpi.v1.GetOverviewResponse - 4, // 21: mpi.v1.FileService.UpdateOverview:output_type -> mpi.v1.UpdateOverviewResponse - 9, // 22: mpi.v1.FileService.GetFile:output_type -> mpi.v1.GetFileResponse - 13, // 23: mpi.v1.FileService.UpdateFile:output_type -> mpi.v1.UpdateFileResponse - 20, // [20:24] is the sub-list for method output_type - 16, // [16:20] is the sub-list for method input_type - 16, // [16:16] is the sub-list for extension type_name - 16, // [16:16] is the sub-list for extension extendee - 0, // [0:16] is the sub-list for field type_name + 11, // 5: mpi.v1.UpdateOverviewResponse.files:type_name -> mpi.v1.FileMeta + 7, // 6: mpi.v1.FileOverview.files:type_name -> mpi.v1.File + 5, // 7: mpi.v1.FileOverview.config_version:type_name -> mpi.v1.ConfigVersion + 11, // 8: mpi.v1.File.file_meta:type_name -> mpi.v1.FileMeta + 0, // 9: mpi.v1.File.action:type_name -> mpi.v1.File.FileAction + 14, // 10: mpi.v1.GetFileRequest.message_meta:type_name -> mpi.v1.MessageMeta + 11, // 11: mpi.v1.GetFileRequest.file_meta:type_name -> mpi.v1.FileMeta + 10, // 12: mpi.v1.GetFileResponse.contents:type_name -> mpi.v1.FileContents + 15, // 13: mpi.v1.FileMeta.modified_time:type_name -> google.protobuf.Timestamp + 14, // 14: mpi.v1.UpdateFileRequest.message_meta:type_name -> mpi.v1.MessageMeta + 7, // 15: mpi.v1.UpdateFileRequest.file:type_name -> mpi.v1.File + 10, // 16: mpi.v1.UpdateFileRequest.contents:type_name -> mpi.v1.FileContents + 11, // 17: mpi.v1.UpdateFileResponse.file_meta:type_name -> mpi.v1.FileMeta + 1, // 18: mpi.v1.FileService.GetOverview:input_type -> mpi.v1.GetOverviewRequest + 3, // 19: mpi.v1.FileService.UpdateOverview:input_type -> mpi.v1.UpdateOverviewRequest + 8, // 20: mpi.v1.FileService.GetFile:input_type -> mpi.v1.GetFileRequest + 12, // 21: mpi.v1.FileService.UpdateFile:input_type -> mpi.v1.UpdateFileRequest + 2, // 22: mpi.v1.FileService.GetOverview:output_type -> mpi.v1.GetOverviewResponse + 4, // 23: mpi.v1.FileService.UpdateOverview:output_type -> mpi.v1.UpdateOverviewResponse + 9, // 24: mpi.v1.FileService.GetFile:output_type -> mpi.v1.GetFileResponse + 13, // 25: mpi.v1.FileService.UpdateFile:output_type -> mpi.v1.UpdateFileResponse + 22, // [22:26] is the sub-list for method output_type + 18, // [18:22] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name } func init() { file_mpi_v1_files_proto_init() } diff --git a/api/grpc/mpi/v1/files.pb.validate.go b/api/grpc/mpi/v1/files.pb.validate.go index 35aa49997..2afff80fe 100644 --- a/api/grpc/mpi/v1/files.pb.validate.go +++ b/api/grpc/mpi/v1/files.pb.validate.go @@ -508,6 +508,40 @@ func (m *UpdateOverviewResponse) validate(all bool) error { var errors []error + for idx, item := range m.GetFiles() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateOverviewResponseValidationError{ + field: fmt.Sprintf("Files[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateOverviewResponseValidationError{ + field: fmt.Sprintf("Files[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateOverviewResponseValidationError{ + field: fmt.Sprintf("Files[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + if len(errors) > 0 { return UpdateOverviewResponseMultiError(errors) } @@ -1531,6 +1565,35 @@ func (m *UpdateFileRequest) validate(all bool) error { var errors []error + if all { + switch v := interface{}(m.GetMessageMeta()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateFileRequestValidationError{ + field: "MessageMeta", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateFileRequestValidationError{ + field: "MessageMeta", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMessageMeta()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateFileRequestValidationError{ + field: "MessageMeta", + reason: "embedded message failed validation", + cause: err, + } + } + } + if all { switch v := interface{}(m.GetFile()).(type) { case interface{ ValidateAll() error }: @@ -1589,6 +1652,8 @@ func (m *UpdateFileRequest) validate(all bool) error { } } + // no validation rules for FileSeq + if len(errors) > 0 { return UpdateFileRequestMultiError(errors) } diff --git a/api/grpc/mpi/v1/files.proto b/api/grpc/mpi/v1/files.proto index 570b0721b..30b4f8c27 100644 --- a/api/grpc/mpi/v1/files.proto +++ b/api/grpc/mpi/v1/files.proto @@ -51,8 +51,11 @@ message UpdateOverviewRequest { FileOverview overview = 2; } -// Represents a the response from an UpdateOverviewRequest - intentionally left empty -message UpdateOverviewResponse {} +// Represents a the response from an UpdateOverviewRequest. Currently this returns a list of FileMeta in which the +// management plane is requesting. It's up to the client to send it to the management plane. +message UpdateOverviewResponse { + repeated FileMeta files = 1; +} // Represents a specific configuration version associated with an instance message ConfigVersion { @@ -127,10 +130,15 @@ message FileMeta { // Represents the update file request message UpdateFileRequest { + // meta should be the same through out the request + mpi.v1.MessageMeta message_meta = 1; // The file requested to be updated - File file = 1; + File file = 2; // The contents of a file - FileContents contents = 2; + FileContents contents = 3; + // seq of file base on the outstanding request, counting down, zero indicates no more file to transfer + int32 file_seq = 4; + } // Represents the response to an update file request diff --git a/api/grpc/mpi/v1/files_grpc.pb.go b/api/grpc/mpi/v1/files_grpc.pb.go index 7bda701a8..e8a3b4b27 100644 --- a/api/grpc/mpi/v1/files_grpc.pb.go +++ b/api/grpc/mpi/v1/files_grpc.pb.go @@ -5,7 +5,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.3.0 +// - protoc-gen-go-grpc v1.4.0 // - protoc (unknown) // source: mpi/v1/files.proto @@ -20,8 +20,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 +// Requires gRPC-Go v1.62.0 or later. +const _ = grpc.SupportPackageIsVersion8 const ( FileService_GetOverview_FullMethodName = "/mpi.v1.FileService/GetOverview" @@ -33,6 +33,13 @@ const ( // FileServiceClient is the client API for FileService service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +// +// This specifies the FileService operations for transferring file data between a client and server. +// All operations are written from a client perspective and flow Client -> Server +// The server must set a max file size (in bytes), and that size must be used to configure +// the gRPC server and client for the FileService such that the FileContents object can be sent with bytes of the configured size. +// The actual configured max size for gRPC objects must be maxFileSize + sizeOfSha256HashString since a FileContents object contains both. +// A SHA256 hash string is 64 bytes, therefore the configured max message size should be maxFileSize + 64. type FileServiceClient interface { // Get the overview of files for a particular configuration version of an instance GetOverview(ctx context.Context, in *GetOverviewRequest, opts ...grpc.CallOption) (*GetOverviewResponse, error) @@ -53,8 +60,9 @@ func NewFileServiceClient(cc grpc.ClientConnInterface) FileServiceClient { } func (c *fileServiceClient) GetOverview(ctx context.Context, in *GetOverviewRequest, opts ...grpc.CallOption) (*GetOverviewResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetOverviewResponse) - err := c.cc.Invoke(ctx, FileService_GetOverview_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, FileService_GetOverview_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -62,8 +70,9 @@ func (c *fileServiceClient) GetOverview(ctx context.Context, in *GetOverviewRequ } func (c *fileServiceClient) UpdateOverview(ctx context.Context, in *UpdateOverviewRequest, opts ...grpc.CallOption) (*UpdateOverviewResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(UpdateOverviewResponse) - err := c.cc.Invoke(ctx, FileService_UpdateOverview_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, FileService_UpdateOverview_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -71,8 +80,9 @@ func (c *fileServiceClient) UpdateOverview(ctx context.Context, in *UpdateOvervi } func (c *fileServiceClient) GetFile(ctx context.Context, in *GetFileRequest, opts ...grpc.CallOption) (*GetFileResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetFileResponse) - err := c.cc.Invoke(ctx, FileService_GetFile_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, FileService_GetFile_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -80,8 +90,9 @@ func (c *fileServiceClient) GetFile(ctx context.Context, in *GetFileRequest, opt } func (c *fileServiceClient) UpdateFile(ctx context.Context, in *UpdateFileRequest, opts ...grpc.CallOption) (*UpdateFileResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(UpdateFileResponse) - err := c.cc.Invoke(ctx, FileService_UpdateFile_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, FileService_UpdateFile_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -91,6 +102,13 @@ func (c *fileServiceClient) UpdateFile(ctx context.Context, in *UpdateFileReques // FileServiceServer is the server API for FileService service. // All implementations should embed UnimplementedFileServiceServer // for forward compatibility +// +// This specifies the FileService operations for transferring file data between a client and server. +// All operations are written from a client perspective and flow Client -> Server +// The server must set a max file size (in bytes), and that size must be used to configure +// the gRPC server and client for the FileService such that the FileContents object can be sent with bytes of the configured size. +// The actual configured max size for gRPC objects must be maxFileSize + sizeOfSha256HashString since a FileContents object contains both. +// A SHA256 hash string is 64 bytes, therefore the configured max message size should be maxFileSize + 64. type FileServiceServer interface { // Get the overview of files for a particular configuration version of an instance GetOverview(context.Context, *GetOverviewRequest) (*GetOverviewResponse, error) diff --git a/api/grpc/mpi/v1/v1fakes/fake_command_service_client.go b/api/grpc/mpi/v1/v1fakes/fake_command_service_client.go index d8c2707a7..1e8145d1b 100644 --- a/api/grpc/mpi/v1/v1fakes/fake_command_service_client.go +++ b/api/grpc/mpi/v1/v1fakes/fake_command_service_client.go @@ -5,8 +5,9 @@ import ( "context" "sync" - v1 "github.com/nginx/agent/v3/api/grpc/mpi/v1" "google.golang.org/grpc" + + v1 "github.com/nginx/agent/v3/api/grpc/mpi/v1" ) type FakeCommandServiceClient struct { diff --git a/api/grpc/mpi/v1/v1fakes/fake_file_service_client.go b/api/grpc/mpi/v1/v1fakes/fake_file_service_client.go index fabc837dd..899cda4e0 100644 --- a/api/grpc/mpi/v1/v1fakes/fake_file_service_client.go +++ b/api/grpc/mpi/v1/v1fakes/fake_file_service_client.go @@ -5,8 +5,9 @@ import ( "context" "sync" - v1 "github.com/nginx/agent/v3/api/grpc/mpi/v1" "google.golang.org/grpc" + + v1 "github.com/nginx/agent/v3/api/grpc/mpi/v1" ) type FakeFileServiceClient struct { diff --git a/cmd/agent/package_test.go b/cmd/agent/package_test.go index 64b00b3ac..0cd8f4b35 100644 --- a/cmd/agent/package_test.go +++ b/cmd/agent/package_test.go @@ -8,8 +8,9 @@ package main import ( "testing" - "github.com/nginx/agent/v3/test/helpers" "go.uber.org/goleak" + + "github.com/nginx/agent/v3/test/helpers" ) func TestMain(m *testing.M) { diff --git a/cmd/exchange/go.mod b/cmd/exchange/go.mod new file mode 100644 index 000000000..e2dbfb5ea --- /dev/null +++ b/cmd/exchange/go.mod @@ -0,0 +1,54 @@ +module github.com/nginx/agent/v3/cmd/exchange + +go 1.22 + +require ( + github.com/nginx/agent/v3 v3.0.0-20240516154503-a518a6c822a4 + github.com/spf13/cobra v1.8.0 + google.golang.org/grpc v1.64.0 + google.golang.org/protobuf v1.34.1 +) + +require ( + buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.33.0-20240401165935-b983156c5e99.1 // indirect + github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230512164433-5d1fd1a340c9 // indirect + github.com/bufbuild/protovalidate-go v0.2.1 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/google/cel-go v0.17.1 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/lufia/plan9stats v0.0.0-20240408141607-282e7b5d6b74 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect + github.com/pelletier/go-toml/v2 v2.2.0 // indirect + github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/shirou/gopsutil/v3 v3.24.3 // indirect + github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/viper v1.18.2 // indirect + github.com/stoewer/go-strcase v1.3.0 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/tklauser/go-sysconf v0.3.14 // indirect + github.com/tklauser/numcpus v0.8.0 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/text v0.14.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240415180920-8c6c420018be // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) + +replace github.com/nginx/agent/v3 v3.0.0-20240516154503-a518a6c822a4 => ../../ diff --git a/cmd/exchange/go.sum b/cmd/exchange/go.sum new file mode 100644 index 000000000..9605fd8f6 --- /dev/null +++ b/cmd/exchange/go.sum @@ -0,0 +1,311 @@ +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.33.0-20240401165935-b983156c5e99.1 h1:2IGhRovxlsOIQgx2ekZWo4wTPAYpck41+18ICxs37is= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.33.0-20240401165935-b983156c5e99.1/go.mod h1:Tgn5bgL220vkFOI0KPStlcClPeOJzAv4uT+V8JXGUnw= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Microsoft/hcsshim v0.12.2 h1:AcXy+yfRvrx20g9v7qYaJv5Rh+8GaHOS6b8G6Wx/nKs= +github.com/Microsoft/hcsshim v0.12.2/go.mod h1:RZV12pcHCXQ42XnlQ3pz6FZfmrC1C+R4gaOHhRNML1g= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230512164433-5d1fd1a340c9 h1:goHVqTbFX3AIo0tzGr14pgfAW2ZfPChKO21Z9MGf/gk= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230512164433-5d1fd1a340c9/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/bufbuild/protovalidate-go v0.2.1 h1:pJr07sYhliyfj/STAM7hU4J3FKpVeLVKvOBmOTN8j+s= +github.com/bufbuild/protovalidate-go v0.2.1/go.mod h1:e7XXDtlxj5vlEyAgsrxpzayp4cEMKCSSb8ZCkin+MVA= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/containerd/containerd v1.7.15 h1:afEHXdil9iAm03BmhjzKyXnnEBtjaLJefdU7DV0IFes= +github.com/containerd/containerd v1.7.15/go.mod h1:ISzRRTMF8EXNpJlTzyr2XMhN+j9K302C21/+cr3kUnY= +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/cpuguy83/dockercfg v0.3.1 h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E= +github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/docker v26.0.0+incompatible h1:Ng2qi+gdKADUa/VM+6b6YaY2nlZhk/lVJiKR/2bMudU= +github.com/docker/docker v26.0.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= +github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/cel-go v0.17.1 h1:s2151PDGy/eqpCI80/8dl4VL3xTkqI/YubXLXCFw0mw= +github.com/google/cel-go v0.17.1/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= +github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/lufia/plan9stats v0.0.0-20240408141607-282e7b5d6b74 h1:1KuuSOy4ZNgW0KA2oYIngXVFhQcXxhLqCVK7cBcldkk= +github.com/lufia/plan9stats v0.0.0-20240408141607-282e7b5d6b74/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE= +github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= +github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= +github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= +github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= +github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= +github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg= +github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= +github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/pelletier/go-toml/v2 v2.2.0 h1:QLgLl2yMN7N+ruc31VynXs1vhMZa7CeHHejIeBAsoHo= +github.com/pelletier/go-toml/v2 v2.2.0/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE= +github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg= +github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= +github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= +github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= +github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= +github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs= +github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/testcontainers/testcontainers-go v0.30.0 h1:jmn/XS22q4YRrcMwWg0pAwlClzs/abopbsBzrepyc4E= +github.com/testcontainers/testcontainers-go v0.30.0/go.mod h1:K+kHNGiM5zjklKjgTtcrEetF3uhWbMUyqAQoyoh8Pf0= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= +github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY= +github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 h1:Xs2Ncz0gNihqu9iosIZ5SkBbWo5T8JhhLJFMQL1qmLI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0/go.mod h1:vy+2G/6NvVMpwGX/NyLqcC41fxepnuKHk16E6IZUcJc= +go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= +go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= +go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= +go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= +go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= +go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 h1:985EYyeCOxTpcgOTJpflJUwOeEz0CQOdPt73OzpE9F8= +golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= +golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto/googleapis/api v0.0.0-20240415180920-8c6c420018be h1:Zz7rLWqp0ApfsR/l7+zSHhY3PMiH2xqgxlfYfAfNpoU= +google.golang.org/genproto/googleapis/api v0.0.0-20240415180920-8c6c420018be/go.mod h1:dvdCTIoAGbkWbcIKBniID56/7XHTt6WfxXNMxuziJ+w= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 h1:DujSIu+2tC9Ht0aPNA7jgj23Iq8Ewi5sgkQ++wdvonE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= +google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/cmd/exchange/main.go b/cmd/exchange/main.go new file mode 100644 index 000000000..2b830e34d --- /dev/null +++ b/cmd/exchange/main.go @@ -0,0 +1,456 @@ +/* + * Copyright 2024 F5, Inc. All rights reserved. + * + * No part of the software may be reproduced or transmitted in any + * form or by any means, electronic or mechanical, for any purpose, + * without express written permission of F5 Networks, Inc. + * + */ + +package main + +import ( + "context" + "embed" + "errors" + "fmt" + "io" + "io/fs" + "log" + "os" + "os/signal" + "path/filepath" + "sync" + "syscall" + "time" + + "github.com/google/uuid" + "github.com/spf13/cobra" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/timestamppb" + + pb "github.com/nginx/agent/v3/api/grpc/mpi/v1" + grpc2 "github.com/nginx/agent/v3/internal/grpc" + "github.com/nginx/agent/v3/pkg/collections" + "github.com/nginx/agent/v3/pkg/grpc/messenger" +) + +//go:embed testfiles/* +var configs embed.FS + +const ( + token = "5Rp9bPpV8JP9Gyiy2M2Rr5t3/aQIzbWlsEvO9+5m/3M=" + instanceID = "8525cd7a-f221-42f6-ac52-4d97a6a169fa" +) + +func main() { + log.SetFlags(log.LstdFlags | log.Lshortfile) + ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) + defer cancel() + conn, err := grpc.NewClient("localhost:8888", + grpc.WithInsecure(), + grpc.WithPerRPCCredentials( + &grpc2.PerRPCCredentials{ + Token: token, + ID: instanceID, + }), + ) + if err != nil { + log.Fatal(err) + } + defer conn.Close() + + var rootCmd = &cobra.Command{ + Use: "exchange", + Short: "Exchange is a gRPC test client for connecting to local N1SC dataplane-ctrl", + Long: `Exchange is a gRPC test client for connecting to local N1SC dataplane-ctrl`, + Run: func(cmd *cobra.Command, args []string) { + _ = cmd.Help() + }, + } + + var streamCmd = &cobra.Command{ + Use: "stream", + Short: "Standalone stream", + Long: `Standalone stream, where the upload/download is independent`, + Run: func(cmd *cobra.Command, args []string) { + op := "upload" + if len(args) > 0 && args[0] == "download" { + op = "download" + } + switch op { + case "upload": + if err = streamUpload(ctx, conn); err != nil { + log.Fatal(err) + } + case "download": + if err = streamDownload(ctx, conn); err != nil { + log.Fatal(err) + } + } + }, + } + + var rpcCmd = &cobra.Command{ + Use: "rpc", + Short: "rpc", + Long: `rpc using the file service`, + Run: func(cmd *cobra.Command, args []string) { + op := "upload" + if len(args) > 0 && args[0] == "download" { + op = "download" + } + switch op { + case "upload": + if err = rpcUpload(ctx, conn); err != nil { + log.Fatal(err) + } + case "download": + if err = rpcDownload(ctx, conn); err != nil { + log.Fatal(err) + } + } + }, + } + rootCmd.AddCommand(streamCmd, rpcCmd) + if err = rootCmd.Execute(); err != nil { + log.Fatal(err) + } +} + +func rpcDownload(parent context.Context, conn *grpc.ClientConn) error { + ctx, cancel := context.WithCancel(parent) + defer cancel() + + fileServiceClient := pb.NewFileServiceClient(conn) + messageMeta := &pb.MessageMeta{ + MessageId: uuid.NewString(), + CorrelationId: uuid.NewString(), + Timestamp: timestamppb.New(time.Now()), + } + resp, err := fileServiceClient.GetOverview(ctx, &pb.GetOverviewRequest{ + MessageMeta: messageMeta, + }) + if err != nil { + log.Fatal(err) + } + tmpPrefix := filepath.Join(os.TempDir(), uuid.NewString()) + for _, f := range resp.GetOverview().GetFiles() { + fn := f.GetFileMeta().GetName() + var fc *pb.GetFileResponse + fc, err = fileServiceClient.GetFile(ctx, &pb.GetFileRequest{ + MessageMeta: messageMeta, + FileMeta: f.FileMeta, + }) + if err != nil { + log.Fatal(err) + } + if err = writeFile(tmpPrefix, &pb.FileResponse_File{ + Meta: f.FileMeta, + File: fc.Contents, + }); err != nil { + log.Fatal(err) + } + log.Printf("got %s", fn) + } + return nil +} + +func rpcUpload(parent context.Context, conn *grpc.ClientConn) error { + ctx, cancel := context.WithCancel(parent) + defer cancel() + + fileServiceClient := pb.NewFileServiceClient(conn) + fm := readFiles() + + messageMeta := &pb.MessageMeta{ + MessageId: uuid.NewString(), + CorrelationId: uuid.NewString(), + Timestamp: timestamppb.New(time.Now()), + } + resp, err := fileServiceClient.UpdateOverview(ctx, &pb.UpdateOverviewRequest{ + MessageMeta: messageMeta, + Overview: makeOverview(fm), + }) + if err != nil { + log.Fatal(err) + } + + seq := len(resp.Files) + for _, meta := range resp.Files { + ff, ok := fm[meta.Name] + if !ok { + // no feedback to the service + log.Fatalf("file %s not found", meta.Name) + } + _, err = fileServiceClient.UpdateFile(ctx, &pb.UpdateFileRequest{ + MessageMeta: messageMeta, + FileSeq: int32(seq), + File: &pb.File{ + FileMeta: ff.Meta, + }, + Contents: ff.File, + }) + if err != nil { + log.Fatal(err) + } + seq-- + } + return nil +} + +func makeOverview(fm map[string]*pb.FileResponse_File) *pb.FileOverview { + fo := make([]*pb.File, 0, len(fm)) + for _, fr := range fm { + fo = append(fo, &pb.File{ + FileMeta: fr.Meta, + }) + } + return &pb.FileOverview{ + Files: fo, + } +} +func streamUpload(parent context.Context, conn *grpc.ClientConn) error { + ctx, cancel := context.WithCancel(parent) + defer cancel() + + client := pb.NewCommandServiceClient(conn) + exchangeClient, err := client.FileExchange(ctx) + if err != nil { + log.Fatal(err) + } + me := messenger.New[pb.Exchange, pb.Exchange](5, exchangeClient) + wg := sync.WaitGroup{} + wg.Add(1) + go me.Run(ctx, &wg) + + fm := readFiles() + if err = me.Send(ctx, &pb.Exchange{ + Meta: &pb.MessageMeta{ + MessageId: uuid.NewString(), + CorrelationId: uuid.NewString(), + Timestamp: timestamppb.New(time.Now()), + }, + Message: &pb.Exchange_Overview{ + Overview: makeOverview(fm), + }, + }); err != nil { + log.Fatal(err) + } + for { + select { + case <-ctx.Done(): + return ctx.Err() + case err = <-me.Errors(): + if errors.Is(err, context.Canceled) || errors.Is(err, io.EOF) { + return nil + } + log.Fatalf("Received error: %s\n", err) + case msg := <-me.Messages(): + switch m := msg.Msg.Message.(type) { + case *pb.Exchange_Request: + for _, fr := range m.Request.GetFiles() { + ff, ok := fm[fr.Name] + if !ok { + return status.Error(codes.NotFound, fmt.Sprintf("%s not found", fr.Name)) + } + err = me.Send(ctx, &pb.Exchange{ + Meta: msg.Msg.Meta, + Message: &pb.Exchange_Response{ + Response: &pb.FileResponse{ + File: &pb.FileResponse_File{ + Meta: &pb.FileMeta{ + Name: fr.Name, + Hash: ff.Meta.Hash, + ModifiedTime: ff.Meta.ModifiedTime, + Size: int64(len(ff.File.Contents)), + }, + File: &pb.FileContents{Contents: ff.File.Contents}, + }, + }, + }, + }) + } + if err != nil { + return status.Error(codes.Aborted, err.Error()) + } + } + } + } + return nil +} + +func streamDownload(parent context.Context, conn *grpc.ClientConn) error { + wg := sync.WaitGroup{} + ctx, cancel := context.WithCancel(parent) + defer func() { + cancel() + wg.Wait() + }() + + client := pb.NewCommandServiceClient(conn) + exchangeClient, err := client.FileExchange(ctx) + if err != nil { + log.Fatal(err) + } + fmt.Println("File exchange stream started", conn.GetState()) + me := messenger.New[pb.Exchange, pb.Exchange](5, exchangeClient) + wg.Add(1) + go me.Run(ctx, &wg) + if err = me.Send(ctx, &pb.Exchange{ + Meta: &pb.MessageMeta{ + MessageId: uuid.NewString(), + CorrelationId: uuid.NewString(), + Timestamp: timestamppb.New(time.Now()), + }, + Message: &pb.Exchange_OverviewReq{}, + }); err != nil { + log.Fatal(err) + } + var reqQuestMap map[string]struct{} + for { + select { + case <-ctx.Done(): + return ctx.Err() + case err = <-me.Errors(): + log.Fatalf("Received error: %s\n", err) + case msg := <-me.Messages(): + log.Printf("Received message: %T\n", msg) + switch m := msg.Msg.Message.(type) { + case *pb.Exchange_Overview: + // we got an overview from the management server, we should mimic retrieval + files := make([]*pb.FileMeta, 0, len(m.Overview.Files)) + reqQuestMap = make(map[string]struct{}) + for _, f := range m.Overview.Files { + files = append(files, f.FileMeta) + reqQuestMap[f.FileMeta.Name] = struct{}{} + } + if len(reqQuestMap) == 0 { + log.Println("no files exchanged needed") + return nil + } + req := &pb.Exchange_Request{Request: &pb.FilesRequest{Files: files}} + if err = me.Send(ctx, &pb.Exchange{ + Meta: &pb.MessageMeta{ + MessageId: uuid.NewString(), + CorrelationId: uuid.NewString(), + Timestamp: timestamppb.New(time.Now()), + }, + Message: req, + }); err != nil { + log.Fatal(err) + } + case *pb.Exchange_Response: + f := m.Response.File + fn := f.Meta.Name + if _, ok := reqQuestMap[fn]; !ok { + log.Printf("unexpected file response: %s\n", fn) + } + tmpPrefix := filepath.Join(os.TempDir(), uuid.NewString()) + if err = writeFile(tmpPrefix, f); err != nil { + log.Fatal(err) + } + delete(reqQuestMap, fn) + if len(reqQuestMap) == 0 { + log.Println("done file transfer") + return nil + } + } + case <-time.Tick(30 * time.Second): + fmt.Println("state", conn.GetState()) + err = me.Send(ctx, &pb.Exchange{ + Meta: nil, + Message: nil, + }) + fmt.Println("state", conn.GetState(), err) + } + } + return nil +} + +func writeFile(prefix string, f *pb.FileResponse_File) error { + tmpFN := filepath.Join(prefix, f.Meta.Name) + if err := os.MkdirAll(filepath.Dir(tmpFN), 0777); err != nil { + return err + } + log.Println("create file:", tmpFN) + var ff *os.File + ff, err := os.Create(tmpFN) + if err != nil { + return err + } + defer ff.Close() + _, err = ff.Write(f.File.Contents) + if err != nil { + return err + } + return nil +} + +//func download() { +// log.Println("starting exchange") +// client := pb.NewCommandServiceClient(conn) +// exchangeClient, err := client.FileExchange(ctx) +// if err != nil { +// log.Fatal(err) +// } +// me := messenger.New[pb.Exchange, pb.Exchange](5, exchangeClient) +// wg := sync.WaitGroup{} +// wg.Add(1) +// go me.Run(ctx, &wg) +// +// log.Println("starting sending") +// for _, fn := range fm { +// err = me.Send(ctx, &pb.Exchange{ +// Meta: nil, +// Message: fn, +// }) +// if err != nil { +// log.Fatal(err) +// } +// } +// wg.Wait() +//} + +func readFiles() map[string]*pb.FileResponse_File { + files := make(map[string]*pb.FileResponse_File) + base := "testfiles" + if err := fs.WalkDir(configs, base, + func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + if d.IsDir() { + return nil + } + content, err := configs.ReadFile(path) + if err != nil { + return err + } + stats, err := os.Stat(path) + if err != nil { + return err + } + fn, err := filepath.Rel(base, path) + if err != nil { + return err + } + fn = filepath.Join("/", fn) + files[fn] = &pb.FileResponse_File{ + Meta: &pb.FileMeta{ + Name: fn, + Hash: collections.Hash(content), + ModifiedTime: timestamppb.New(stats.ModTime()), + Size: int64(len(content)), + }, + File: &pb.FileContents{Contents: content}, + } + return nil + + }); err != nil { + log.Fatal(err) + } + return files +} diff --git a/cmd/exchange/main_test.go b/cmd/exchange/main_test.go new file mode 100644 index 000000000..5c27d9de3 --- /dev/null +++ b/cmd/exchange/main_test.go @@ -0,0 +1,55 @@ +package main + +import ( + "context" + "log" + "os/signal" + "syscall" + "testing" + + "google.golang.org/grpc" + + grpc2 "github.com/nginx/agent/v3/internal/grpc" +) + +func BenchmarkStreamUpload(t *testing.B) { + ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) + defer cancel() + conn, err := grpc.NewClient("localhost:8888", + grpc.WithInsecure(), + grpc.WithPerRPCCredentials( + &grpc2.PerRPCCredentials{ + Token: token, + ID: instanceID, + }), + ) + if err != nil { + log.Fatal(err) + } + defer conn.Close() + + for i := 0; i < t.N; i++ { + _ = streamUpload(ctx, conn) + } +} + +func BenchmarkRPCUpload(t *testing.B) { + ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) + defer cancel() + conn, err := grpc.NewClient("localhost:8888", + grpc.WithInsecure(), + grpc.WithPerRPCCredentials( + &grpc2.PerRPCCredentials{ + Token: token, + ID: instanceID, + }), + ) + if err != nil { + log.Fatal(err) + } + defer conn.Close() + + for i := 0; i < t.N; i++ { + _ = rpcUpload(ctx, conn) + } +} diff --git a/cmd/exchange/testfiles/etc/nginx/conf.d/big_nginx_config.conf b/cmd/exchange/testfiles/etc/nginx/conf.d/big_nginx_config.conf new file mode 100644 index 000000000..d8cf4f5a2 --- /dev/null +++ b/cmd/exchange/testfiles/etc/nginx/conf.d/big_nginx_config.conf @@ -0,0 +1,14041 @@ + +user nginx; +worker_processes auto; +worker_rlimit_nofile 30000; + +error_log /var/log/nginx/error.log notice; +pid /var/run/nginx.pid; + + +events { + worker_connections 65535; #vg +} + + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + + keepalive_timeout 65; + + #gzip on; + #server { + # listen 127.0.0.1:8080; + # location /api { + # api write=on; + # allow 127.0.0.1; + # deny all; + # } + #} + server { + listen 9091; + return 200 "Test Response \n"; + } + upstream u_1 { + server 127.0.0.1:9091; + zone uz_1 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8081; + location / { + proxy_pass http://u_1; + } + } + + server { + listen 9092; + return 404 "404 Test Response \n"; + } + upstream u_2 { + server 127.0.0.1:9092; + zone uz_2 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8082; + location / { + proxy_pass http://u_2; + } + } + + server { + listen 9093; + return 400 "400 Test Response \n"; + } + upstream u_3 { + server 127.0.0.1:9093; + zone uz_3 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8083; + location / { + proxy_pass http://u_3; + } + } + + server { + listen 9094; + return 200 "Test Response \n"; + } + upstream u_4 { + server 127.0.0.1:9094; + zone uz_4 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8084; + location / { + proxy_pass http://u_4; + } + } + + server { + listen 9095; + return 200 "Test Response \n"; + } + upstream u_5 { + server 127.0.0.1:9095; + zone uz_5 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8085; + location / { + proxy_pass http://u_5; + } + } + + server { + listen 9096; + return 200 "Test Response \n"; + } + upstream u_6 { + server 127.0.0.1:9096; + zone uz_6 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8086; + location / { + proxy_pass http://u_6; + } + } + + server { + listen 9097; + return 200 "Test Response \n"; + } + upstream u_7 { + server 127.0.0.1:9097; + zone uz_7 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8087; + location / { + proxy_pass http://u_7; + } + } + + server { + listen 9098; + return 200 "Test Response \n"; + } + upstream u_8 { + server 127.0.0.1:9098; + zone uz_8 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8088; + location / { + proxy_pass http://u_8; + } + } + + server { + listen 9099; + return 200 "Test Response \n"; + } + upstream u_9 { + server 127.0.0.1:9099; + zone uz_9 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8089; + location / { + proxy_pass http://u_9; + } + } + + server { + listen 9100; + return 200 "Test Response \n"; + } + upstream u_10 { + server 127.0.0.1:9100; + zone uz_10 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8090; + location / { + proxy_pass http://u_10; + } + } + + server { + listen 9101; + return 200 "Test Response \n"; + } + upstream u_11 { + server 127.0.0.1:9101; + zone uz_11 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8091; + location / { + proxy_pass http://u_11; + } + } + + server { + listen 9102; + return 200 "Test Response \n"; + } + upstream u_12 { + server 127.0.0.1:9102; + zone uz_12 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8092; + location / { + proxy_pass http://u_12; + } + } + + server { + listen 9103; + return 200 "Test Response \n"; + } + upstream u_13 { + server 127.0.0.1:9103; + zone uz_13 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8093; + location / { + proxy_pass http://u_13; + } + } + + server { + listen 9104; + return 200 "Test Response \n"; + } + upstream u_14 { + server 127.0.0.1:9104; + zone uz_14 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8094; + location / { + proxy_pass http://u_14; + } + } + + server { + listen 9105; + return 200 "Test Response \n"; + } + upstream u_15 { + server 127.0.0.1:9105; + zone uz_15 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8095; + location / { + proxy_pass http://u_15; + } + } + + server { + listen 9106; + return 200 "Test Response \n"; + } + upstream u_16 { + server 127.0.0.1:9106; + zone uz_16 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8096; + location / { + proxy_pass http://u_16; + } + } + + server { + listen 9107; + return 200 "Test Response \n"; + } + upstream u_17 { + server 127.0.0.1:9107; + zone uz_17 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8097; + location / { + proxy_pass http://u_17; + } + } + + server { + listen 9108; + return 200 "Test Response \n"; + } + upstream u_18 { + server 127.0.0.1:9108; + zone uz_18 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8098; + location / { + proxy_pass http://u_18; + } + } + + server { + listen 9109; + return 200 "Test Response \n"; + } + upstream u_19 { + server 127.0.0.1:9109; + zone uz_19 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8099; + location / { + proxy_pass http://u_19; + } + } + + server { + listen 9110; + return 200 "Test Response \n"; + } + upstream u_20 { + server 127.0.0.1:9110; + zone uz_20 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8100; + location / { + proxy_pass http://u_20; + } + } + + server { + listen 9111; + return 200 "Test Response \n"; + } + upstream u_21 { + server 127.0.0.1:9111; + zone uz_21 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8101; + location / { + proxy_pass http://u_21; + } + } + + server { + listen 9112; + return 200 "Test Response \n"; + } + upstream u_22 { + server 127.0.0.1:9112; + zone uz_22 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8102; + location / { + proxy_pass http://u_22; + } + } + + server { + listen 9113; + return 200 "Test Response \n"; + } + upstream u_23 { + server 127.0.0.1:9113; + zone uz_23 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8103; + location / { + proxy_pass http://u_23; + } + } + + server { + listen 9114; + return 200 "Test Response \n"; + } + upstream u_24 { + server 127.0.0.1:9114; + zone uz_24 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8104; + location / { + proxy_pass http://u_24; + } + } + + server { + listen 9115; + return 200 "Test Response \n"; + } + upstream u_25 { + server 127.0.0.1:9115; + zone uz_25 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8105; + location / { + proxy_pass http://u_25; + } + } + + server { + listen 9116; + return 200 "Test Response \n"; + } + upstream u_26 { + server 127.0.0.1:9116; + zone uz_26 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8106; + location / { + proxy_pass http://u_26; + } + } + + server { + listen 9117; + return 200 "Test Response \n"; + } + upstream u_27 { + server 127.0.0.1:9117; + zone uz_27 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8107; + location / { + proxy_pass http://u_27; + } + } + + server { + listen 9118; + return 200 "Test Response \n"; + } + upstream u_28 { + server 127.0.0.1:9118; + zone uz_28 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8108; + location / { + proxy_pass http://u_28; + } + } + + server { + listen 9119; + return 200 "Test Response \n"; + } + upstream u_29 { + server 127.0.0.1:9119; + zone uz_29 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8109; + location / { + proxy_pass http://u_29; + } + } + + server { + listen 9120; + return 200 "Test Response \n"; + } + upstream u_30 { + server 127.0.0.1:9120; + zone uz_30 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8110; + location / { + proxy_pass http://u_30; + } + } + + server { + listen 9121; + return 200 "Test Response \n"; + } + upstream u_31 { + server 127.0.0.1:9121; + zone uz_31 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8111; + location / { + proxy_pass http://u_31; + } + } + + server { + listen 9122; + return 200 "Test Response \n"; + } + upstream u_32 { + server 127.0.0.1:9122; + zone uz_32 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8112; + location / { + proxy_pass http://u_32; + } + } + + server { + listen 9123; + return 200 "Test Response \n"; + } + upstream u_33 { + server 127.0.0.1:9123; + zone uz_33 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8113; + location / { + proxy_pass http://u_33; + } + } + + server { + listen 9124; + return 200 "Test Response \n"; + } + upstream u_34 { + server 127.0.0.1:9124; + zone uz_34 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8114; + location / { + proxy_pass http://u_34; + } + } + + server { + listen 9125; + return 200 "Test Response \n"; + } + upstream u_35 { + server 127.0.0.1:9125; + zone uz_35 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8115; + location / { + proxy_pass http://u_35; + } + } + + server { + listen 9126; + return 200 "Test Response \n"; + } + upstream u_36 { + server 127.0.0.1:9126; + zone uz_36 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8116; + location / { + proxy_pass http://u_36; + } + } + + server { + listen 9127; + return 200 "Test Response \n"; + } + upstream u_37 { + server 127.0.0.1:9127; + zone uz_37 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8117; + location / { + proxy_pass http://u_37; + } + } + + server { + listen 9128; + return 200 "Test Response \n"; + } + upstream u_38 { + server 127.0.0.1:9128; + zone uz_38 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8118; + location / { + proxy_pass http://u_38; + } + } + + server { + listen 9129; + return 200 "Test Response \n"; + } + upstream u_39 { + server 127.0.0.1:9129; + zone uz_39 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8119; + location / { + proxy_pass http://u_39; + } + } + + server { + listen 9130; + return 200 "Test Response \n"; + } + upstream u_40 { + server 127.0.0.1:9130; + zone uz_40 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8120; + location / { + proxy_pass http://u_40; + } + } + + server { + listen 9131; + return 200 "Test Response \n"; + } + upstream u_41 { + server 127.0.0.1:9131; + zone uz_41 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8121; + location / { + proxy_pass http://u_41; + } + } + + server { + listen 9132; + return 200 "Test Response \n"; + } + upstream u_42 { + server 127.0.0.1:9132; + zone uz_42 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8122; + location / { + proxy_pass http://u_42; + } + } + + server { + listen 9133; + return 200 "Test Response \n"; + } + upstream u_43 { + server 127.0.0.1:9133; + zone uz_43 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8123; + location / { + proxy_pass http://u_43; + } + } + + server { + listen 9134; + return 200 "Test Response \n"; + } + upstream u_44 { + server 127.0.0.1:9134; + zone uz_44 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8124; + location / { + proxy_pass http://u_44; + } + } + + server { + listen 9135; + return 200 "Test Response \n"; + } + upstream u_45 { + server 127.0.0.1:9135; + zone uz_45 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8125; + location / { + proxy_pass http://u_45; + } + } + + server { + listen 9136; + return 200 "Test Response \n"; + } + upstream u_46 { + server 127.0.0.1:9136; + zone uz_46 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8126; + location / { + proxy_pass http://u_46; + } + } + + server { + listen 9137; + return 200 "Test Response \n"; + } + upstream u_47 { + server 127.0.0.1:9137; + zone uz_47 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8127; + location / { + proxy_pass http://u_47; + } + } + + server { + listen 9138; + return 200 "Test Response \n"; + } + upstream u_48 { + server 127.0.0.1:9138; + zone uz_48 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8128; + location / { + proxy_pass http://u_48; + } + } + + server { + listen 9139; + return 200 "Test Response \n"; + } + upstream u_49 { + server 127.0.0.1:9139; + zone uz_49 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8129; + location / { + proxy_pass http://u_49; + } + } + + server { + listen 9140; + return 200 "Test Response \n"; + } + upstream u_50 { + server 127.0.0.1:9140; + zone uz_50 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8130; + location / { + proxy_pass http://u_50; + } + } + + server { + listen 9141; + return 200 "Test Response \n"; + } + upstream u_51 { + server 127.0.0.1:9141; + zone uz_51 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8131; + location / { + proxy_pass http://u_51; + } + } + + server { + listen 9142; + return 200 "Test Response \n"; + } + upstream u_52 { + server 127.0.0.1:9142; + zone uz_52 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8132; + location / { + proxy_pass http://u_52; + } + } + + server { + listen 9143; + return 200 "Test Response \n"; + } + upstream u_53 { + server 127.0.0.1:9143; + zone uz_53 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8133; + location / { + proxy_pass http://u_53; + } + } + + server { + listen 9144; + return 200 "Test Response \n"; + } + upstream u_54 { + server 127.0.0.1:9144; + zone uz_54 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8134; + location / { + proxy_pass http://u_54; + } + } + + server { + listen 9145; + return 200 "Test Response \n"; + } + upstream u_55 { + server 127.0.0.1:9145; + zone uz_55 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8135; + location / { + proxy_pass http://u_55; + } + } + + server { + listen 9146; + return 200 "Test Response \n"; + } + upstream u_56 { + server 127.0.0.1:9146; + zone uz_56 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8136; + location / { + proxy_pass http://u_56; + } + } + + server { + listen 9147; + return 200 "Test Response \n"; + } + upstream u_57 { + server 127.0.0.1:9147; + zone uz_57 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8137; + location / { + proxy_pass http://u_57; + } + } + + server { + listen 9148; + return 200 "Test Response \n"; + } + upstream u_58 { + server 127.0.0.1:9148; + zone uz_58 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8138; + location / { + proxy_pass http://u_58; + } + } + + server { + listen 9149; + return 200 "Test Response \n"; + } + upstream u_59 { + server 127.0.0.1:9149; + zone uz_59 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8139; + location / { + proxy_pass http://u_59; + } + } + + server { + listen 9150; + return 200 "Test Response \n"; + } + upstream u_60 { + server 127.0.0.1:9150; + zone uz_60 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8140; + location / { + proxy_pass http://u_60; + } + } + + server { + listen 9151; + return 200 "Test Response \n"; + } + upstream u_61 { + server 127.0.0.1:9151; + zone uz_61 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8141; + location / { + proxy_pass http://u_61; + } + } + + server { + listen 9152; + return 200 "Test Response \n"; + } + upstream u_62 { + server 127.0.0.1:9152; + zone uz_62 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8142; + location / { + proxy_pass http://u_62; + } + } + + server { + listen 9153; + return 200 "Test Response \n"; + } + upstream u_63 { + server 127.0.0.1:9153; + zone uz_63 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8143; + location / { + proxy_pass http://u_63; + } + } + + server { + listen 9154; + return 200 "Test Response \n"; + } + upstream u_64 { + server 127.0.0.1:9154; + zone uz_64 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8144; + location / { + proxy_pass http://u_64; + } + } + + server { + listen 9155; + return 200 "Test Response \n"; + } + upstream u_65 { + server 127.0.0.1:9155; + zone uz_65 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8145; + location / { + proxy_pass http://u_65; + } + } + + server { + listen 9156; + return 200 "Test Response \n"; + } + upstream u_66 { + server 127.0.0.1:9156; + zone uz_66 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8146; + location / { + proxy_pass http://u_66; + } + } + + server { + listen 9157; + return 200 "Test Response \n"; + } + upstream u_67 { + server 127.0.0.1:9157; + zone uz_67 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8147; + location / { + proxy_pass http://u_67; + } + } + + server { + listen 9158; + return 200 "Test Response \n"; + } + upstream u_68 { + server 127.0.0.1:9158; + zone uz_68 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8148; + location / { + proxy_pass http://u_68; + } + } + + server { + listen 9159; + return 200 "Test Response \n"; + } + upstream u_69 { + server 127.0.0.1:9159; + zone uz_69 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8149; + location / { + proxy_pass http://u_69; + } + } + + server { + listen 9160; + return 200 "Test Response \n"; + } + upstream u_70 { + server 127.0.0.1:9160; + zone uz_70 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8150; + location / { + proxy_pass http://u_70; + } + } + + server { + listen 9161; + return 200 "Test Response \n"; + } + upstream u_71 { + server 127.0.0.1:9161; + zone uz_71 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8151; + location / { + proxy_pass http://u_71; + } + } + + server { + listen 9162; + return 200 "Test Response \n"; + } + upstream u_72 { + server 127.0.0.1:9162; + zone uz_72 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8152; + location / { + proxy_pass http://u_72; + } + } + + server { + listen 9163; + return 200 "Test Response \n"; + } + upstream u_73 { + server 127.0.0.1:9163; + zone uz_73 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8153; + location / { + proxy_pass http://u_73; + } + } + + server { + listen 9164; + return 200 "Test Response \n"; + } + upstream u_74 { + server 127.0.0.1:9164; + zone uz_74 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8154; + location / { + proxy_pass http://u_74; + } + } + + server { + listen 9165; + return 200 "Test Response \n"; + } + upstream u_75 { + server 127.0.0.1:9165; + zone uz_75 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8155; + location / { + proxy_pass http://u_75; + } + } + + server { + listen 9166; + return 200 "Test Response \n"; + } + upstream u_76 { + server 127.0.0.1:9166; + zone uz_76 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8156; + location / { + proxy_pass http://u_76; + } + } + + server { + listen 9167; + return 200 "Test Response \n"; + } + upstream u_77 { + server 127.0.0.1:9167; + zone uz_77 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8157; + location / { + proxy_pass http://u_77; + } + } + + server { + listen 9168; + return 200 "Test Response \n"; + } + upstream u_78 { + server 127.0.0.1:9168; + zone uz_78 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8158; + location / { + proxy_pass http://u_78; + } + } + + server { + listen 9169; + return 200 "Test Response \n"; + } + upstream u_79 { + server 127.0.0.1:9169; + zone uz_79 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8159; + location / { + proxy_pass http://u_79; + } + } + + server { + listen 9170; + return 200 "Test Response \n"; + } + upstream u_80 { + server 127.0.0.1:9170; + zone uz_80 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8160; + location / { + proxy_pass http://u_80; + } + } + + server { + listen 9171; + return 200 "Test Response \n"; + } + upstream u_81 { + server 127.0.0.1:9171; + zone uz_81 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8161; + location / { + proxy_pass http://u_81; + } + } + + server { + listen 9172; + return 200 "Test Response \n"; + } + upstream u_82 { + server 127.0.0.1:9172; + zone uz_82 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8162; + location / { + proxy_pass http://u_82; + } + } + + server { + listen 9173; + return 200 "Test Response \n"; + } + upstream u_83 { + server 127.0.0.1:9173; + zone uz_83 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8163; + location / { + proxy_pass http://u_83; + } + } + + server { + listen 9174; + return 200 "Test Response \n"; + } + upstream u_84 { + server 127.0.0.1:9174; + zone uz_84 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8164; + location / { + proxy_pass http://u_84; + } + } + + server { + listen 9175; + return 200 "Test Response \n"; + } + upstream u_85 { + server 127.0.0.1:9175; + zone uz_85 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8165; + location / { + proxy_pass http://u_85; + } + } + + server { + listen 9176; + return 200 "Test Response \n"; + } + upstream u_86 { + server 127.0.0.1:9176; + zone uz_86 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8166; + location / { + proxy_pass http://u_86; + } + } + + server { + listen 9177; + return 200 "Test Response \n"; + } + upstream u_87 { + server 127.0.0.1:9177; + zone uz_87 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8167; + location / { + proxy_pass http://u_87; + } + } + + server { + listen 9178; + return 200 "Test Response \n"; + } + upstream u_88 { + server 127.0.0.1:9178; + zone uz_88 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8168; + location / { + proxy_pass http://u_88; + } + } + + server { + listen 9179; + return 200 "Test Response \n"; + } + upstream u_89 { + server 127.0.0.1:9179; + zone uz_89 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8169; + location / { + proxy_pass http://u_89; + } + } + + server { + listen 9180; + return 200 "Test Response \n"; + } + upstream u_90 { + server 127.0.0.1:9180; + zone uz_90 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8170; + location / { + proxy_pass http://u_90; + } + } + + server { + listen 9181; + return 200 "Test Response \n"; + } + upstream u_91 { + server 127.0.0.1:9181; + zone uz_91 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8171; + location / { + proxy_pass http://u_91; + } + } + + server { + listen 9182; + return 200 "Test Response \n"; + } + upstream u_92 { + server 127.0.0.1:9182; + zone uz_92 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8172; + location / { + proxy_pass http://u_92; + } + } + + server { + listen 9183; + return 200 "Test Response \n"; + } + upstream u_93 { + server 127.0.0.1:9183; + zone uz_93 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8173; + location / { + proxy_pass http://u_93; + } + } + + server { + listen 9184; + return 200 "Test Response \n"; + } + upstream u_94 { + server 127.0.0.1:9184; + zone uz_94 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8174; + location / { + proxy_pass http://u_94; + } + } + + server { + listen 9185; + return 200 "Test Response \n"; + } + upstream u_95 { + server 127.0.0.1:9185; + zone uz_95 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8175; + location / { + proxy_pass http://u_95; + } + } + + server { + listen 9186; + return 200 "Test Response \n"; + } + upstream u_96 { + server 127.0.0.1:9186; + zone uz_96 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8176; + location / { + proxy_pass http://u_96; + } + } + + server { + listen 9187; + return 200 "Test Response \n"; + } + upstream u_97 { + server 127.0.0.1:9187; + zone uz_97 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8177; + location / { + proxy_pass http://u_97; + } + } + + server { + listen 9188; + return 200 "Test Response \n"; + } + upstream u_98 { + server 127.0.0.1:9188; + zone uz_98 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8178; + location / { + proxy_pass http://u_98; + } + } + + server { + listen 9189; + return 200 "Test Response \n"; + } + upstream u_99 { + server 127.0.0.1:9189; + zone uz_99 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8179; + location / { + proxy_pass http://u_99; + } + } + + server { + listen 9190; + return 200 "Test Response \n"; + } + upstream u_100 { + server 127.0.0.1:9190; + zone uz_100 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8180; + location / { + proxy_pass http://u_100; + } + } + + server { + listen 9191; + return 200 "Test Response \n"; + } + upstream u_101 { + server 127.0.0.1:9191; + zone uz_101 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8181; + location / { + proxy_pass http://u_101; + } + } + + server { + listen 9192; + return 200 "Test Response \n"; + } + upstream u_102 { + server 127.0.0.1:9192; + zone uz_102 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8182; + location / { + proxy_pass http://u_102; + } + } + + server { + listen 9193; + return 200 "Test Response \n"; + } + upstream u_103 { + server 127.0.0.1:9193; + zone uz_103 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8183; + location / { + proxy_pass http://u_103; + } + } + + server { + listen 9194; + return 200 "Test Response \n"; + } + upstream u_104 { + server 127.0.0.1:9194; + zone uz_104 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8184; + location / { + proxy_pass http://u_104; + } + } + + server { + listen 9195; + return 200 "Test Response \n"; + } + upstream u_105 { + server 127.0.0.1:9195; + zone uz_105 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8185; + location / { + proxy_pass http://u_105; + } + } + + server { + listen 9196; + return 200 "Test Response \n"; + } + upstream u_106 { + server 127.0.0.1:9196; + zone uz_106 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8186; + location / { + proxy_pass http://u_106; + } + } + + server { + listen 9197; + return 200 "Test Response \n"; + } + upstream u_107 { + server 127.0.0.1:9197; + zone uz_107 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8187; + location / { + proxy_pass http://u_107; + } + } + + server { + listen 9198; + return 200 "Test Response \n"; + } + upstream u_108 { + server 127.0.0.1:9198; + zone uz_108 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8188; + location / { + proxy_pass http://u_108; + } + } + + server { + listen 9199; + return 200 "Test Response \n"; + } + upstream u_109 { + server 127.0.0.1:9199; + zone uz_109 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8189; + location / { + proxy_pass http://u_109; + } + } + + server { + listen 9200; + return 200 "Test Response \n"; + } + upstream u_110 { + server 127.0.0.1:9200; + zone uz_110 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8190; + location / { + proxy_pass http://u_110; + } + } + + server { + listen 9201; + return 200 "Test Response \n"; + } + upstream u_111 { + server 127.0.0.1:9201; + zone uz_111 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8191; + location / { + proxy_pass http://u_111; + } + } + + server { + listen 9202; + return 200 "Test Response \n"; + } + upstream u_112 { + server 127.0.0.1:9202; + zone uz_112 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8192; + location / { + proxy_pass http://u_112; + } + } + + server { + listen 9203; + return 200 "Test Response \n"; + } + upstream u_113 { + server 127.0.0.1:9203; + zone uz_113 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8193; + location / { + proxy_pass http://u_113; + } + } + + server { + listen 9204; + return 200 "Test Response \n"; + } + upstream u_114 { + server 127.0.0.1:9204; + zone uz_114 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8194; + location / { + proxy_pass http://u_114; + } + } + + server { + listen 9205; + return 200 "Test Response \n"; + } + upstream u_115 { + server 127.0.0.1:9205; + zone uz_115 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8195; + location / { + proxy_pass http://u_115; + } + } + + server { + listen 9206; + return 200 "Test Response \n"; + } + upstream u_116 { + server 127.0.0.1:9206; + zone uz_116 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8196; + location / { + proxy_pass http://u_116; + } + } + + server { + listen 9207; + return 200 "Test Response \n"; + } + upstream u_117 { + server 127.0.0.1:9207; + zone uz_117 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8197; + location / { + proxy_pass http://u_117; + } + } + + server { + listen 9208; + return 200 "Test Response \n"; + } + upstream u_118 { + server 127.0.0.1:9208; + zone uz_118 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8198; + location / { + proxy_pass http://u_118; + } + } + + server { + listen 9209; + return 200 "Test Response \n"; + } + upstream u_119 { + server 127.0.0.1:9209; + zone uz_119 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8199; + location / { + proxy_pass http://u_119; + } + } + + server { + listen 9210; + return 200 "Test Response \n"; + } + upstream u_120 { + server 127.0.0.1:9210; + zone uz_120 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8200; + location / { + proxy_pass http://u_120; + } + } + + server { + listen 9211; + return 200 "Test Response \n"; + } + upstream u_121 { + server 127.0.0.1:9211; + zone uz_121 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8201; + location / { + proxy_pass http://u_121; + } + } + + server { + listen 9212; + return 200 "Test Response \n"; + } + upstream u_122 { + server 127.0.0.1:9212; + zone uz_122 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8202; + location / { + proxy_pass http://u_122; + } + } + + server { + listen 9213; + return 200 "Test Response \n"; + } + upstream u_123 { + server 127.0.0.1:9213; + zone uz_123 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8203; + location / { + proxy_pass http://u_123; + } + } + + server { + listen 9214; + return 200 "Test Response \n"; + } + upstream u_124 { + server 127.0.0.1:9214; + zone uz_124 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8204; + location / { + proxy_pass http://u_124; + } + } + + server { + listen 9215; + return 200 "Test Response \n"; + } + upstream u_125 { + server 127.0.0.1:9215; + zone uz_125 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8205; + location / { + proxy_pass http://u_125; + } + } + + server { + listen 9216; + return 200 "Test Response \n"; + } + upstream u_126 { + server 127.0.0.1:9216; + zone uz_126 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8206; + location / { + proxy_pass http://u_126; + } + } + + server { + listen 9217; + return 200 "Test Response \n"; + } + upstream u_127 { + server 127.0.0.1:9217; + zone uz_127 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8207; + location / { + proxy_pass http://u_127; + } + } + + server { + listen 9218; + return 200 "Test Response \n"; + } + upstream u_128 { + server 127.0.0.1:9218; + zone uz_128 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8208; + location / { + proxy_pass http://u_128; + } + } + + server { + listen 9219; + return 200 "Test Response \n"; + } + upstream u_129 { + server 127.0.0.1:9219; + zone uz_129 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8209; + location / { + proxy_pass http://u_129; + } + } + + server { + listen 9220; + return 200 "Test Response \n"; + } + upstream u_130 { + server 127.0.0.1:9220; + zone uz_130 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8210; + location / { + proxy_pass http://u_130; + } + } + + server { + listen 9221; + return 200 "Test Response \n"; + } + upstream u_131 { + server 127.0.0.1:9221; + zone uz_131 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8211; + location / { + proxy_pass http://u_131; + } + } + + server { + listen 9222; + return 200 "Test Response \n"; + } + upstream u_132 { + server 127.0.0.1:9222; + zone uz_132 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8212; + location / { + proxy_pass http://u_132; + } + } + + server { + listen 9223; + return 200 "Test Response \n"; + } + upstream u_133 { + server 127.0.0.1:9223; + zone uz_133 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8213; + location / { + proxy_pass http://u_133; + } + } + + server { + listen 9224; + return 200 "Test Response \n"; + } + upstream u_134 { + server 127.0.0.1:9224; + zone uz_134 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8214; + location / { + proxy_pass http://u_134; + } + } + + server { + listen 9225; + return 200 "Test Response \n"; + } + upstream u_135 { + server 127.0.0.1:9225; + zone uz_135 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8215; + location / { + proxy_pass http://u_135; + } + } + + server { + listen 9226; + return 200 "Test Response \n"; + } + upstream u_136 { + server 127.0.0.1:9226; + zone uz_136 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8216; + location / { + proxy_pass http://u_136; + } + } + + server { + listen 9227; + return 200 "Test Response \n"; + } + upstream u_137 { + server 127.0.0.1:9227; + zone uz_137 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8217; + location / { + proxy_pass http://u_137; + } + } + + server { + listen 9228; + return 200 "Test Response \n"; + } + upstream u_138 { + server 127.0.0.1:9228; + zone uz_138 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8218; + location / { + proxy_pass http://u_138; + } + } + + server { + listen 9229; + return 200 "Test Response \n"; + } + upstream u_139 { + server 127.0.0.1:9229; + zone uz_139 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8219; + location / { + proxy_pass http://u_139; + } + } + + server { + listen 9230; + return 200 "Test Response \n"; + } + upstream u_140 { + server 127.0.0.1:9230; + zone uz_140 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8220; + location / { + proxy_pass http://u_140; + } + } + + server { + listen 9231; + return 200 "Test Response \n"; + } + upstream u_141 { + server 127.0.0.1:9231; + zone uz_141 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8221; + location / { + proxy_pass http://u_141; + } + } + + server { + listen 9232; + return 200 "Test Response \n"; + } + upstream u_142 { + server 127.0.0.1:9232; + zone uz_142 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8222; + location / { + proxy_pass http://u_142; + } + } + + server { + listen 9233; + return 200 "Test Response \n"; + } + upstream u_143 { + server 127.0.0.1:9233; + zone uz_143 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8223; + location / { + proxy_pass http://u_143; + } + } + + server { + listen 9234; + return 200 "Test Response \n"; + } + upstream u_144 { + server 127.0.0.1:9234; + zone uz_144 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8224; + location / { + proxy_pass http://u_144; + } + } + + server { + listen 9235; + return 200 "Test Response \n"; + } + upstream u_145 { + server 127.0.0.1:9235; + zone uz_145 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8225; + location / { + proxy_pass http://u_145; + } + } + + server { + listen 9236; + return 200 "Test Response \n"; + } + upstream u_146 { + server 127.0.0.1:9236; + zone uz_146 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8226; + location / { + proxy_pass http://u_146; + } + } + + server { + listen 9237; + return 200 "Test Response \n"; + } + upstream u_147 { + server 127.0.0.1:9237; + zone uz_147 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8227; + location / { + proxy_pass http://u_147; + } + } + + server { + listen 9238; + return 200 "Test Response \n"; + } + upstream u_148 { + server 127.0.0.1:9238; + zone uz_148 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8228; + location / { + proxy_pass http://u_148; + } + } + + server { + listen 9239; + return 200 "Test Response \n"; + } + upstream u_149 { + server 127.0.0.1:9239; + zone uz_149 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8229; + location / { + proxy_pass http://u_149; + } + } + + server { + listen 9240; + return 200 "Test Response \n"; + } + upstream u_150 { + server 127.0.0.1:9240; + zone uz_150 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8230; + location / { + proxy_pass http://u_150; + } + } + + server { + listen 9241; + return 200 "Test Response \n"; + } + upstream u_151 { + server 127.0.0.1:9241; + zone uz_151 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8231; + location / { + proxy_pass http://u_151; + } + } + + server { + listen 9242; + return 200 "Test Response \n"; + } + upstream u_152 { + server 127.0.0.1:9242; + zone uz_152 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8232; + location / { + proxy_pass http://u_152; + } + } + + server { + listen 9243; + return 200 "Test Response \n"; + } + upstream u_153 { + server 127.0.0.1:9243; + zone uz_153 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8233; + location / { + proxy_pass http://u_153; + } + } + + server { + listen 9244; + return 200 "Test Response \n"; + } + upstream u_154 { + server 127.0.0.1:9244; + zone uz_154 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8234; + location / { + proxy_pass http://u_154; + } + } + + server { + listen 9245; + return 200 "Test Response \n"; + } + upstream u_155 { + server 127.0.0.1:9245; + zone uz_155 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8235; + location / { + proxy_pass http://u_155; + } + } + + server { + listen 9246; + return 200 "Test Response \n"; + } + upstream u_156 { + server 127.0.0.1:9246; + zone uz_156 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8236; + location / { + proxy_pass http://u_156; + } + } + + server { + listen 9247; + return 200 "Test Response \n"; + } + upstream u_157 { + server 127.0.0.1:9247; + zone uz_157 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8237; + location / { + proxy_pass http://u_157; + } + } + + server { + listen 9248; + return 200 "Test Response \n"; + } + upstream u_158 { + server 127.0.0.1:9248; + zone uz_158 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8238; + location / { + proxy_pass http://u_158; + } + } + + server { + listen 9249; + return 200 "Test Response \n"; + } + upstream u_159 { + server 127.0.0.1:9249; + zone uz_159 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8239; + location / { + proxy_pass http://u_159; + } + } + + server { + listen 9250; + return 200 "Test Response \n"; + } + upstream u_160 { + server 127.0.0.1:9250; + zone uz_160 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8240; + location / { + proxy_pass http://u_160; + } + } + + server { + listen 9251; + return 200 "Test Response \n"; + } + upstream u_161 { + server 127.0.0.1:9251; + zone uz_161 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8241; + location / { + proxy_pass http://u_161; + } + } + + server { + listen 9252; + return 200 "Test Response \n"; + } + upstream u_162 { + server 127.0.0.1:9252; + zone uz_162 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8242; + location / { + proxy_pass http://u_162; + } + } + + server { + listen 9253; + return 200 "Test Response \n"; + } + upstream u_163 { + server 127.0.0.1:9253; + zone uz_163 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8243; + location / { + proxy_pass http://u_163; + } + } + + server { + listen 9254; + return 200 "Test Response \n"; + } + upstream u_164 { + server 127.0.0.1:9254; + zone uz_164 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8244; + location / { + proxy_pass http://u_164; + } + } + + server { + listen 9255; + return 200 "Test Response \n"; + } + upstream u_165 { + server 127.0.0.1:9255; + zone uz_165 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8245; + location / { + proxy_pass http://u_165; + } + } + + server { + listen 9256; + return 200 "Test Response \n"; + } + upstream u_166 { + server 127.0.0.1:9256; + zone uz_166 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8246; + location / { + proxy_pass http://u_166; + } + } + + server { + listen 9257; + return 200 "Test Response \n"; + } + upstream u_167 { + server 127.0.0.1:9257; + zone uz_167 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8247; + location / { + proxy_pass http://u_167; + } + } + + server { + listen 9258; + return 200 "Test Response \n"; + } + upstream u_168 { + server 127.0.0.1:9258; + zone uz_168 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8248; + location / { + proxy_pass http://u_168; + } + } + + server { + listen 9259; + return 200 "Test Response \n"; + } + upstream u_169 { + server 127.0.0.1:9259; + zone uz_169 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8249; + location / { + proxy_pass http://u_169; + } + } + + server { + listen 9260; + return 200 "Test Response \n"; + } + upstream u_170 { + server 127.0.0.1:9260; + zone uz_170 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8250; + location / { + proxy_pass http://u_170; + } + } + + server { + listen 9261; + return 200 "Test Response \n"; + } + upstream u_171 { + server 127.0.0.1:9261; + zone uz_171 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8251; + location / { + proxy_pass http://u_171; + } + } + + server { + listen 9262; + return 200 "Test Response \n"; + } + upstream u_172 { + server 127.0.0.1:9262; + zone uz_172 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8252; + location / { + proxy_pass http://u_172; + } + } + + server { + listen 9263; + return 200 "Test Response \n"; + } + upstream u_173 { + server 127.0.0.1:9263; + zone uz_173 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8253; + location / { + proxy_pass http://u_173; + } + } + + server { + listen 9264; + return 200 "Test Response \n"; + } + upstream u_174 { + server 127.0.0.1:9264; + zone uz_174 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8254; + location / { + proxy_pass http://u_174; + } + } + + server { + listen 9265; + return 200 "Test Response \n"; + } + upstream u_175 { + server 127.0.0.1:9265; + zone uz_175 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8255; + location / { + proxy_pass http://u_175; + } + } + + server { + listen 9266; + return 200 "Test Response \n"; + } + upstream u_176 { + server 127.0.0.1:9266; + zone uz_176 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8256; + location / { + proxy_pass http://u_176; + } + } + + server { + listen 9267; + return 200 "Test Response \n"; + } + upstream u_177 { + server 127.0.0.1:9267; + zone uz_177 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8257; + location / { + proxy_pass http://u_177; + } + } + + server { + listen 9268; + return 200 "Test Response \n"; + } + upstream u_178 { + server 127.0.0.1:9268; + zone uz_178 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8258; + location / { + proxy_pass http://u_178; + } + } + + server { + listen 9269; + return 200 "Test Response \n"; + } + upstream u_179 { + server 127.0.0.1:9269; + zone uz_179 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8259; + location / { + proxy_pass http://u_179; + } + } + + server { + listen 9270; + return 200 "Test Response \n"; + } + upstream u_180 { + server 127.0.0.1:9270; + zone uz_180 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8260; + location / { + proxy_pass http://u_180; + } + } + + server { + listen 9271; + return 200 "Test Response \n"; + } + upstream u_181 { + server 127.0.0.1:9271; + zone uz_181 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8261; + location / { + proxy_pass http://u_181; + } + } + + server { + listen 9272; + return 200 "Test Response \n"; + } + upstream u_182 { + server 127.0.0.1:9272; + zone uz_182 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8262; + location / { + proxy_pass http://u_182; + } + } + + server { + listen 9273; + return 200 "Test Response \n"; + } + upstream u_183 { + server 127.0.0.1:9273; + zone uz_183 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8263; + location / { + proxy_pass http://u_183; + } + } + + server { + listen 9274; + return 200 "Test Response \n"; + } + upstream u_184 { + server 127.0.0.1:9274; + zone uz_184 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8264; + location / { + proxy_pass http://u_184; + } + } + + server { + listen 9275; + return 200 "Test Response \n"; + } + upstream u_185 { + server 127.0.0.1:9275; + zone uz_185 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8265; + location / { + proxy_pass http://u_185; + } + } + + server { + listen 9276; + return 200 "Test Response \n"; + } + upstream u_186 { + server 127.0.0.1:9276; + zone uz_186 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8266; + location / { + proxy_pass http://u_186; + } + } + + server { + listen 9277; + return 200 "Test Response \n"; + } + upstream u_187 { + server 127.0.0.1:9277; + zone uz_187 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8267; + location / { + proxy_pass http://u_187; + } + } + + server { + listen 9278; + return 200 "Test Response \n"; + } + upstream u_188 { + server 127.0.0.1:9278; + zone uz_188 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8268; + location / { + proxy_pass http://u_188; + } + } + + server { + listen 9279; + return 200 "Test Response \n"; + } + upstream u_189 { + server 127.0.0.1:9279; + zone uz_189 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8269; + location / { + proxy_pass http://u_189; + } + } + + server { + listen 9280; + return 200 "Test Response \n"; + } + upstream u_190 { + server 127.0.0.1:9280; + zone uz_190 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8270; + location / { + proxy_pass http://u_190; + } + } + + server { + listen 9281; + return 200 "Test Response \n"; + } + upstream u_191 { + server 127.0.0.1:9281; + zone uz_191 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8271; + location / { + proxy_pass http://u_191; + } + } + + server { + listen 9282; + return 200 "Test Response \n"; + } + upstream u_192 { + server 127.0.0.1:9282; + zone uz_192 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8272; + location / { + proxy_pass http://u_192; + } + } + + server { + listen 9283; + return 200 "Test Response \n"; + } + upstream u_193 { + server 127.0.0.1:9283; + zone uz_193 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8273; + location / { + proxy_pass http://u_193; + } + } + + server { + listen 9284; + return 200 "Test Response \n"; + } + upstream u_194 { + server 127.0.0.1:9284; + zone uz_194 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8274; + location / { + proxy_pass http://u_194; + } + } + + server { + listen 9285; + return 200 "Test Response \n"; + } + upstream u_195 { + server 127.0.0.1:9285; + zone uz_195 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8275; + location / { + proxy_pass http://u_195; + } + } + + server { + listen 9286; + return 200 "Test Response \n"; + } + upstream u_196 { + server 127.0.0.1:9286; + zone uz_196 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8276; + location / { + proxy_pass http://u_196; + } + } + + server { + listen 9287; + return 200 "Test Response \n"; + } + upstream u_197 { + server 127.0.0.1:9287; + zone uz_197 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8277; + location / { + proxy_pass http://u_197; + } + } + + server { + listen 9288; + return 200 "Test Response \n"; + } + upstream u_198 { + server 127.0.0.1:9288; + zone uz_198 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8278; + location / { + proxy_pass http://u_198; + } + } + + server { + listen 9289; + return 200 "Test Response \n"; + } + upstream u_199 { + server 127.0.0.1:9289; + zone uz_199 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8279; + location / { + proxy_pass http://u_199; + } + } + + server { + listen 9290; + return 200 "Test Response \n"; + } + upstream u_200 { + server 127.0.0.1:9290; + zone uz_200 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8280; + location / { + proxy_pass http://u_200; + } + } + + server { + listen 9291; + return 200 "Test Response \n"; + } + upstream u_201 { + server 127.0.0.1:9291; + zone uz_201 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8281; + location / { + proxy_pass http://u_201; + } + } + + server { + listen 9292; + return 200 "Test Response \n"; + } + upstream u_202 { + server 127.0.0.1:9292; + zone uz_202 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8282; + location / { + proxy_pass http://u_202; + } + } + + server { + listen 9293; + return 200 "Test Response \n"; + } + upstream u_203 { + server 127.0.0.1:9293; + zone uz_203 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8283; + location / { + proxy_pass http://u_203; + } + } + + server { + listen 9294; + return 200 "Test Response \n"; + } + upstream u_204 { + server 127.0.0.1:9294; + zone uz_204 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8284; + location / { + proxy_pass http://u_204; + } + } + + server { + listen 9295; + return 200 "Test Response \n"; + } + upstream u_205 { + server 127.0.0.1:9295; + zone uz_205 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8285; + location / { + proxy_pass http://u_205; + } + } + + server { + listen 9296; + return 200 "Test Response \n"; + } + upstream u_206 { + server 127.0.0.1:9296; + zone uz_206 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8286; + location / { + proxy_pass http://u_206; + } + } + + server { + listen 9297; + return 200 "Test Response \n"; + } + upstream u_207 { + server 127.0.0.1:9297; + zone uz_207 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8287; + location / { + proxy_pass http://u_207; + } + } + + server { + listen 9298; + return 200 "Test Response \n"; + } + upstream u_208 { + server 127.0.0.1:9298; + zone uz_208 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8288; + location / { + proxy_pass http://u_208; + } + } + + server { + listen 9299; + return 200 "Test Response \n"; + } + upstream u_209 { + server 127.0.0.1:9299; + zone uz_209 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8289; + location / { + proxy_pass http://u_209; + } + } + + server { + listen 9300; + return 200 "Test Response \n"; + } + upstream u_210 { + server 127.0.0.1:9300; + zone uz_210 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8290; + location / { + proxy_pass http://u_210; + } + } + + server { + listen 9301; + return 200 "Test Response \n"; + } + upstream u_211 { + server 127.0.0.1:9301; + zone uz_211 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8291; + location / { + proxy_pass http://u_211; + } + } + + server { + listen 9302; + return 200 "Test Response \n"; + } + upstream u_212 { + server 127.0.0.1:9302; + zone uz_212 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8292; + location / { + proxy_pass http://u_212; + } + } + + server { + listen 9303; + return 200 "Test Response \n"; + } + upstream u_213 { + server 127.0.0.1:9303; + zone uz_213 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8293; + location / { + proxy_pass http://u_213; + } + } + + server { + listen 9304; + return 200 "Test Response \n"; + } + upstream u_214 { + server 127.0.0.1:9304; + zone uz_214 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8294; + location / { + proxy_pass http://u_214; + } + } + + server { + listen 9305; + return 200 "Test Response \n"; + } + upstream u_215 { + server 127.0.0.1:9305; + zone uz_215 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8295; + location / { + proxy_pass http://u_215; + } + } + + server { + listen 9306; + return 200 "Test Response \n"; + } + upstream u_216 { + server 127.0.0.1:9306; + zone uz_216 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8296; + location / { + proxy_pass http://u_216; + } + } + + server { + listen 9307; + return 200 "Test Response \n"; + } + upstream u_217 { + server 127.0.0.1:9307; + zone uz_217 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8297; + location / { + proxy_pass http://u_217; + } + } + + server { + listen 9308; + return 200 "Test Response \n"; + } + upstream u_218 { + server 127.0.0.1:9308; + zone uz_218 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8298; + location / { + proxy_pass http://u_218; + } + } + + server { + listen 9309; + return 200 "Test Response \n"; + } + upstream u_219 { + server 127.0.0.1:9309; + zone uz_219 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8299; + location / { + proxy_pass http://u_219; + } + } + + server { + listen 9310; + return 200 "Test Response \n"; + } + upstream u_220 { + server 127.0.0.1:9310; + zone uz_220 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8300; + location / { + proxy_pass http://u_220; + } + } + + server { + listen 9311; + return 200 "Test Response \n"; + } + upstream u_221 { + server 127.0.0.1:9311; + zone uz_221 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8301; + location / { + proxy_pass http://u_221; + } + } + + server { + listen 9312; + return 200 "Test Response \n"; + } + upstream u_222 { + server 127.0.0.1:9312; + zone uz_222 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8302; + location / { + proxy_pass http://u_222; + } + } + + server { + listen 9313; + return 200 "Test Response \n"; + } + upstream u_223 { + server 127.0.0.1:9313; + zone uz_223 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8303; + location / { + proxy_pass http://u_223; + } + } + + server { + listen 9314; + return 200 "Test Response \n"; + } + upstream u_224 { + server 127.0.0.1:9314; + zone uz_224 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8304; + location / { + proxy_pass http://u_224; + } + } + + server { + listen 9315; + return 200 "Test Response \n"; + } + upstream u_225 { + server 127.0.0.1:9315; + zone uz_225 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8305; + location / { + proxy_pass http://u_225; + } + } + + server { + listen 9316; + return 200 "Test Response \n"; + } + upstream u_226 { + server 127.0.0.1:9316; + zone uz_226 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8306; + location / { + proxy_pass http://u_226; + } + } + + server { + listen 9317; + return 200 "Test Response \n"; + } + upstream u_227 { + server 127.0.0.1:9317; + zone uz_227 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8307; + location / { + proxy_pass http://u_227; + } + } + + server { + listen 9318; + return 200 "Test Response \n"; + } + upstream u_228 { + server 127.0.0.1:9318; + zone uz_228 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8308; + location / { + proxy_pass http://u_228; + } + } + + server { + listen 9319; + return 200 "Test Response \n"; + } + upstream u_229 { + server 127.0.0.1:9319; + zone uz_229 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8309; + location / { + proxy_pass http://u_229; + } + } + + server { + listen 9320; + return 200 "Test Response \n"; + } + upstream u_230 { + server 127.0.0.1:9320; + zone uz_230 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8310; + location / { + proxy_pass http://u_230; + } + } + + server { + listen 9321; + return 200 "Test Response \n"; + } + upstream u_231 { + server 127.0.0.1:9321; + zone uz_231 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8311; + location / { + proxy_pass http://u_231; + } + } + + server { + listen 9322; + return 200 "Test Response \n"; + } + upstream u_232 { + server 127.0.0.1:9322; + zone uz_232 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8312; + location / { + proxy_pass http://u_232; + } + } + + server { + listen 9323; + return 200 "Test Response \n"; + } + upstream u_233 { + server 127.0.0.1:9323; + zone uz_233 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8313; + location / { + proxy_pass http://u_233; + } + } + + server { + listen 9324; + return 200 "Test Response \n"; + } + upstream u_234 { + server 127.0.0.1:9324; + zone uz_234 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8314; + location / { + proxy_pass http://u_234; + } + } + + server { + listen 9325; + return 200 "Test Response \n"; + } + upstream u_235 { + server 127.0.0.1:9325; + zone uz_235 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8315; + location / { + proxy_pass http://u_235; + } + } + + server { + listen 9326; + return 200 "Test Response \n"; + } + upstream u_236 { + server 127.0.0.1:9326; + zone uz_236 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8316; + location / { + proxy_pass http://u_236; + } + } + + server { + listen 9327; + return 200 "Test Response \n"; + } + upstream u_237 { + server 127.0.0.1:9327; + zone uz_237 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8317; + location / { + proxy_pass http://u_237; + } + } + + server { + listen 9328; + return 200 "Test Response \n"; + } + upstream u_238 { + server 127.0.0.1:9328; + zone uz_238 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8318; + location / { + proxy_pass http://u_238; + } + } + + server { + listen 9329; + return 200 "Test Response \n"; + } + upstream u_239 { + server 127.0.0.1:9329; + zone uz_239 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8319; + location / { + proxy_pass http://u_239; + } + } + + server { + listen 9330; + return 200 "Test Response \n"; + } + upstream u_240 { + server 127.0.0.1:9330; + zone uz_240 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8320; + location / { + proxy_pass http://u_240; + } + } + + server { + listen 9331; + return 200 "Test Response \n"; + } + upstream u_241 { + server 127.0.0.1:9331; + zone uz_241 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8321; + location / { + proxy_pass http://u_241; + } + } + + server { + listen 9332; + return 200 "Test Response \n"; + } + upstream u_242 { + server 127.0.0.1:9332; + zone uz_242 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8322; + location / { + proxy_pass http://u_242; + } + } + + server { + listen 9333; + return 200 "Test Response \n"; + } + upstream u_243 { + server 127.0.0.1:9333; + zone uz_243 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8323; + location / { + proxy_pass http://u_243; + } + } + + server { + listen 9334; + return 200 "Test Response \n"; + } + upstream u_244 { + server 127.0.0.1:9334; + zone uz_244 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8324; + location / { + proxy_pass http://u_244; + } + } + + server { + listen 9335; + return 200 "Test Response \n"; + } + upstream u_245 { + server 127.0.0.1:9335; + zone uz_245 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8325; + location / { + proxy_pass http://u_245; + } + } + + server { + listen 9336; + return 200 "Test Response \n"; + } + upstream u_246 { + server 127.0.0.1:9336; + zone uz_246 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8326; + location / { + proxy_pass http://u_246; + } + } + + server { + listen 9337; + return 200 "Test Response \n"; + } + upstream u_247 { + server 127.0.0.1:9337; + zone uz_247 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8327; + location / { + proxy_pass http://u_247; + } + } + + server { + listen 9338; + return 200 "Test Response \n"; + } + upstream u_248 { + server 127.0.0.1:9338; + zone uz_248 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8328; + location / { + proxy_pass http://u_248; + } + } + + server { + listen 9339; + return 200 "Test Response \n"; + } + upstream u_249 { + server 127.0.0.1:9339; + zone uz_249 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8329; + location / { + proxy_pass http://u_249; + } + } + + server { + listen 9340; + return 200 "Test Response \n"; + } + upstream u_250 { + server 127.0.0.1:9340; + zone uz_250 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8330; + location / { + proxy_pass http://u_250; + } + } + + server { + listen 9341; + return 200 "Test Response \n"; + } + upstream u_251 { + server 127.0.0.1:9341; + zone uz_251 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8331; + location / { + proxy_pass http://u_251; + } + } + + server { + listen 9342; + return 200 "Test Response \n"; + } + upstream u_252 { + server 127.0.0.1:9342; + zone uz_252 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8332; + location / { + proxy_pass http://u_252; + } + } + + server { + listen 9343; + return 200 "Test Response \n"; + } + upstream u_253 { + server 127.0.0.1:9343; + zone uz_253 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8333; + location / { + proxy_pass http://u_253; + } + } + + server { + listen 9344; + return 200 "Test Response \n"; + } + upstream u_254 { + server 127.0.0.1:9344; + zone uz_254 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8334; + location / { + proxy_pass http://u_254; + } + } + + server { + listen 9345; + return 200 "Test Response \n"; + } + upstream u_255 { + server 127.0.0.1:9345; + zone uz_255 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8335; + location / { + proxy_pass http://u_255; + } + } + + server { + listen 9346; + return 200 "Test Response \n"; + } + upstream u_256 { + server 127.0.0.1:9346; + zone uz_256 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8336; + location / { + proxy_pass http://u_256; + } + } + + server { + listen 9347; + return 200 "Test Response \n"; + } + upstream u_257 { + server 127.0.0.1:9347; + zone uz_257 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8337; + location / { + proxy_pass http://u_257; + } + } + + server { + listen 9348; + return 200 "Test Response \n"; + } + upstream u_258 { + server 127.0.0.1:9348; + zone uz_258 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8338; + location / { + proxy_pass http://u_258; + } + } + + server { + listen 9349; + return 200 "Test Response \n"; + } + upstream u_259 { + server 127.0.0.1:9349; + zone uz_259 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8339; + location / { + proxy_pass http://u_259; + } + } + + server { + listen 9350; + return 200 "Test Response \n"; + } + upstream u_260 { + server 127.0.0.1:9350; + zone uz_260 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8340; + location / { + proxy_pass http://u_260; + } + } + + server { + listen 9351; + return 200 "Test Response \n"; + } + upstream u_261 { + server 127.0.0.1:9351; + zone uz_261 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8341; + location / { + proxy_pass http://u_261; + } + } + + server { + listen 9352; + return 200 "Test Response \n"; + } + upstream u_262 { + server 127.0.0.1:9352; + zone uz_262 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8342; + location / { + proxy_pass http://u_262; + } + } + + server { + listen 9353; + return 200 "Test Response \n"; + } + upstream u_263 { + server 127.0.0.1:9353; + zone uz_263 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8343; + location / { + proxy_pass http://u_263; + } + } + + server { + listen 9354; + return 200 "Test Response \n"; + } + upstream u_264 { + server 127.0.0.1:9354; + zone uz_264 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8344; + location / { + proxy_pass http://u_264; + } + } + + server { + listen 9355; + return 200 "Test Response \n"; + } + upstream u_265 { + server 127.0.0.1:9355; + zone uz_265 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8345; + location / { + proxy_pass http://u_265; + } + } + + server { + listen 9356; + return 200 "Test Response \n"; + } + upstream u_266 { + server 127.0.0.1:9356; + zone uz_266 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8346; + location / { + proxy_pass http://u_266; + } + } + + server { + listen 9357; + return 200 "Test Response \n"; + } + upstream u_267 { + server 127.0.0.1:9357; + zone uz_267 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8347; + location / { + proxy_pass http://u_267; + } + } + + server { + listen 9358; + return 200 "Test Response \n"; + } + upstream u_268 { + server 127.0.0.1:9358; + zone uz_268 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8348; + location / { + proxy_pass http://u_268; + } + } + + server { + listen 9359; + return 200 "Test Response \n"; + } + upstream u_269 { + server 127.0.0.1:9359; + zone uz_269 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8349; + location / { + proxy_pass http://u_269; + } + } + + server { + listen 9360; + return 200 "Test Response \n"; + } + upstream u_270 { + server 127.0.0.1:9360; + zone uz_270 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8350; + location / { + proxy_pass http://u_270; + } + } + + server { + listen 9361; + return 200 "Test Response \n"; + } + upstream u_271 { + server 127.0.0.1:9361; + zone uz_271 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8351; + location / { + proxy_pass http://u_271; + } + } + + server { + listen 9362; + return 200 "Test Response \n"; + } + upstream u_272 { + server 127.0.0.1:9362; + zone uz_272 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8352; + location / { + proxy_pass http://u_272; + } + } + + server { + listen 9363; + return 200 "Test Response \n"; + } + upstream u_273 { + server 127.0.0.1:9363; + zone uz_273 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8353; + location / { + proxy_pass http://u_273; + } + } + + server { + listen 9364; + return 200 "Test Response \n"; + } + upstream u_274 { + server 127.0.0.1:9364; + zone uz_274 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8354; + location / { + proxy_pass http://u_274; + } + } + + server { + listen 9365; + return 200 "Test Response \n"; + } + upstream u_275 { + server 127.0.0.1:9365; + zone uz_275 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8355; + location / { + proxy_pass http://u_275; + } + } + + server { + listen 9366; + return 200 "Test Response \n"; + } + upstream u_276 { + server 127.0.0.1:9366; + zone uz_276 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8356; + location / { + proxy_pass http://u_276; + } + } + + server { + listen 9367; + return 200 "Test Response \n"; + } + upstream u_277 { + server 127.0.0.1:9367; + zone uz_277 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8357; + location / { + proxy_pass http://u_277; + } + } + + server { + listen 9368; + return 200 "Test Response \n"; + } + upstream u_278 { + server 127.0.0.1:9368; + zone uz_278 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8358; + location / { + proxy_pass http://u_278; + } + } + + server { + listen 9369; + return 200 "Test Response \n"; + } + upstream u_279 { + server 127.0.0.1:9369; + zone uz_279 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8359; + location / { + proxy_pass http://u_279; + } + } + + server { + listen 9370; + return 200 "Test Response \n"; + } + upstream u_280 { + server 127.0.0.1:9370; + zone uz_280 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8360; + location / { + proxy_pass http://u_280; + } + } + + server { + listen 9371; + return 200 "Test Response \n"; + } + upstream u_281 { + server 127.0.0.1:9371; + zone uz_281 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8361; + location / { + proxy_pass http://u_281; + } + } + + server { + listen 9372; + return 200 "Test Response \n"; + } + upstream u_282 { + server 127.0.0.1:9372; + zone uz_282 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8362; + location / { + proxy_pass http://u_282; + } + } + + server { + listen 9373; + return 200 "Test Response \n"; + } + upstream u_283 { + server 127.0.0.1:9373; + zone uz_283 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8363; + location / { + proxy_pass http://u_283; + } + } + + server { + listen 9374; + return 200 "Test Response \n"; + } + upstream u_284 { + server 127.0.0.1:9374; + zone uz_284 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8364; + location / { + proxy_pass http://u_284; + } + } + + server { + listen 9375; + return 200 "Test Response \n"; + } + upstream u_285 { + server 127.0.0.1:9375; + zone uz_285 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8365; + location / { + proxy_pass http://u_285; + } + } + + server { + listen 9376; + return 200 "Test Response \n"; + } + upstream u_286 { + server 127.0.0.1:9376; + zone uz_286 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8366; + location / { + proxy_pass http://u_286; + } + } + + server { + listen 9377; + return 200 "Test Response \n"; + } + upstream u_287 { + server 127.0.0.1:9377; + zone uz_287 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8367; + location / { + proxy_pass http://u_287; + } + } + + server { + listen 9378; + return 200 "Test Response \n"; + } + upstream u_288 { + server 127.0.0.1:9378; + zone uz_288 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8368; + location / { + proxy_pass http://u_288; + } + } + + server { + listen 9379; + return 200 "Test Response \n"; + } + upstream u_289 { + server 127.0.0.1:9379; + zone uz_289 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8369; + location / { + proxy_pass http://u_289; + } + } + + server { + listen 9380; + return 200 "Test Response \n"; + } + upstream u_290 { + server 127.0.0.1:9380; + zone uz_290 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8370; + location / { + proxy_pass http://u_290; + } + } + + server { + listen 9381; + return 200 "Test Response \n"; + } + upstream u_291 { + server 127.0.0.1:9381; + zone uz_291 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8371; + location / { + proxy_pass http://u_291; + } + } + + server { + listen 9382; + return 200 "Test Response \n"; + } + upstream u_292 { + server 127.0.0.1:9382; + zone uz_292 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8372; + location / { + proxy_pass http://u_292; + } + } + + server { + listen 9383; + return 200 "Test Response \n"; + } + upstream u_293 { + server 127.0.0.1:9383; + zone uz_293 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8373; + location / { + proxy_pass http://u_293; + } + } + + server { + listen 9384; + return 200 "Test Response \n"; + } + upstream u_294 { + server 127.0.0.1:9384; + zone uz_294 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8374; + location / { + proxy_pass http://u_294; + } + } + + server { + listen 9385; + return 200 "Test Response \n"; + } + upstream u_295 { + server 127.0.0.1:9385; + zone uz_295 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8375; + location / { + proxy_pass http://u_295; + } + } + + server { + listen 9386; + return 200 "Test Response \n"; + } + upstream u_296 { + server 127.0.0.1:9386; + zone uz_296 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8376; + location / { + proxy_pass http://u_296; + } + } + + server { + listen 9387; + return 200 "Test Response \n"; + } + upstream u_297 { + server 127.0.0.1:9387; + zone uz_297 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8377; + location / { + proxy_pass http://u_297; + } + } + + server { + listen 9388; + return 200 "Test Response \n"; + } + upstream u_298 { + server 127.0.0.1:9388; + zone uz_298 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8378; + location / { + proxy_pass http://u_298; + } + } + + server { + listen 9389; + return 200 "Test Response \n"; + } + upstream u_299 { + server 127.0.0.1:9389; + zone uz_299 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8379; + location / { + proxy_pass http://u_299; + } + } + + server { + listen 9390; + return 200 "Test Response \n"; + } + upstream u_300 { + server 127.0.0.1:9390; + zone uz_300 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8380; + location / { + proxy_pass http://u_300; + } + } + + server { + listen 9391; + return 200 "Test Response \n"; + } + upstream u_301 { + server 127.0.0.1:9391; + zone uz_301 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8381; + location / { + proxy_pass http://u_301; + } + } + + server { + listen 9392; + return 200 "Test Response \n"; + } + upstream u_302 { + server 127.0.0.1:9392; + zone uz_302 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8382; + location / { + proxy_pass http://u_302; + } + } + + server { + listen 9393; + return 200 "Test Response \n"; + } + upstream u_303 { + server 127.0.0.1:9393; + zone uz_303 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8383; + location / { + proxy_pass http://u_303; + } + } + + server { + listen 9394; + return 200 "Test Response \n"; + } + upstream u_304 { + server 127.0.0.1:9394; + zone uz_304 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8384; + location / { + proxy_pass http://u_304; + } + } + + server { + listen 9395; + return 200 "Test Response \n"; + } + upstream u_305 { + server 127.0.0.1:9395; + zone uz_305 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8385; + location / { + proxy_pass http://u_305; + } + } + + server { + listen 9396; + return 200 "Test Response \n"; + } + upstream u_306 { + server 127.0.0.1:9396; + zone uz_306 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8386; + location / { + proxy_pass http://u_306; + } + } + + server { + listen 9397; + return 200 "Test Response \n"; + } + upstream u_307 { + server 127.0.0.1:9397; + zone uz_307 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8387; + location / { + proxy_pass http://u_307; + } + } + + server { + listen 9398; + return 200 "Test Response \n"; + } + upstream u_308 { + server 127.0.0.1:9398; + zone uz_308 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8388; + location / { + proxy_pass http://u_308; + } + } + + server { + listen 9399; + return 200 "Test Response \n"; + } + upstream u_309 { + server 127.0.0.1:9399; + zone uz_309 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8389; + location / { + proxy_pass http://u_309; + } + } + + server { + listen 9400; + return 200 "Test Response \n"; + } + upstream u_310 { + server 127.0.0.1:9400; + zone uz_310 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8390; + location / { + proxy_pass http://u_310; + } + } + + server { + listen 9401; + return 200 "Test Response \n"; + } + upstream u_311 { + server 127.0.0.1:9401; + zone uz_311 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8391; + location / { + proxy_pass http://u_311; + } + } + + server { + listen 9402; + return 200 "Test Response \n"; + } + upstream u_312 { + server 127.0.0.1:9402; + zone uz_312 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8392; + location / { + proxy_pass http://u_312; + } + } + + server { + listen 9403; + return 200 "Test Response \n"; + } + upstream u_313 { + server 127.0.0.1:9403; + zone uz_313 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8393; + location / { + proxy_pass http://u_313; + } + } + + server { + listen 9404; + return 200 "Test Response \n"; + } + upstream u_314 { + server 127.0.0.1:9404; + zone uz_314 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8394; + location / { + proxy_pass http://u_314; + } + } + + server { + listen 9405; + return 200 "Test Response \n"; + } + upstream u_315 { + server 127.0.0.1:9405; + zone uz_315 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8395; + location / { + proxy_pass http://u_315; + } + } + + server { + listen 9406; + return 200 "Test Response \n"; + } + upstream u_316 { + server 127.0.0.1:9406; + zone uz_316 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8396; + location / { + proxy_pass http://u_316; + } + } + + server { + listen 9407; + return 200 "Test Response \n"; + } + upstream u_317 { + server 127.0.0.1:9407; + zone uz_317 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8397; + location / { + proxy_pass http://u_317; + } + } + + server { + listen 9408; + return 200 "Test Response \n"; + } + upstream u_318 { + server 127.0.0.1:9408; + zone uz_318 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8398; + location / { + proxy_pass http://u_318; + } + } + + server { + listen 9409; + return 200 "Test Response \n"; + } + upstream u_319 { + server 127.0.0.1:9409; + zone uz_319 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8399; + location / { + proxy_pass http://u_319; + } + } + + server { + listen 9410; + return 200 "Test Response \n"; + } + upstream u_320 { + server 127.0.0.1:9410; + zone uz_320 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8400; + location / { + proxy_pass http://u_320; + } + } + + server { + listen 9411; + return 200 "Test Response \n"; + } + upstream u_321 { + server 127.0.0.1:9411; + zone uz_321 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8401; + location / { + proxy_pass http://u_321; + } + } + + server { + listen 9412; + return 200 "Test Response \n"; + } + upstream u_322 { + server 127.0.0.1:9412; + zone uz_322 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8402; + location / { + proxy_pass http://u_322; + } + } + + server { + listen 9413; + return 200 "Test Response \n"; + } + upstream u_323 { + server 127.0.0.1:9413; + zone uz_323 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8403; + location / { + proxy_pass http://u_323; + } + } + + server { + listen 9414; + return 200 "Test Response \n"; + } + upstream u_324 { + server 127.0.0.1:9414; + zone uz_324 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8404; + location / { + proxy_pass http://u_324; + } + } + + server { + listen 9415; + return 200 "Test Response \n"; + } + upstream u_325 { + server 127.0.0.1:9415; + zone uz_325 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8405; + location / { + proxy_pass http://u_325; + } + } + + server { + listen 9416; + return 200 "Test Response \n"; + } + upstream u_326 { + server 127.0.0.1:9416; + zone uz_326 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8406; + location / { + proxy_pass http://u_326; + } + } + + server { + listen 9417; + return 200 "Test Response \n"; + } + upstream u_327 { + server 127.0.0.1:9417; + zone uz_327 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8407; + location / { + proxy_pass http://u_327; + } + } + + server { + listen 9418; + return 200 "Test Response \n"; + } + upstream u_328 { + server 127.0.0.1:9418; + zone uz_328 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8408; + location / { + proxy_pass http://u_328; + } + } + + server { + listen 9419; + return 200 "Test Response \n"; + } + upstream u_329 { + server 127.0.0.1:9419; + zone uz_329 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8409; + location / { + proxy_pass http://u_329; + } + } + + server { + listen 9420; + return 200 "Test Response \n"; + } + upstream u_330 { + server 127.0.0.1:9420; + zone uz_330 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8410; + location / { + proxy_pass http://u_330; + } + } + + server { + listen 9421; + return 200 "Test Response \n"; + } + upstream u_331 { + server 127.0.0.1:9421; + zone uz_331 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8411; + location / { + proxy_pass http://u_331; + } + } + + server { + listen 9422; + return 200 "Test Response \n"; + } + upstream u_332 { + server 127.0.0.1:9422; + zone uz_332 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8412; + location / { + proxy_pass http://u_332; + } + } + + server { + listen 9423; + return 200 "Test Response \n"; + } + upstream u_333 { + server 127.0.0.1:9423; + zone uz_333 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8413; + location / { + proxy_pass http://u_333; + } + } + + server { + listen 9424; + return 200 "Test Response \n"; + } + upstream u_334 { + server 127.0.0.1:9424; + zone uz_334 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8414; + location / { + proxy_pass http://u_334; + } + } + + server { + listen 9425; + return 200 "Test Response \n"; + } + upstream u_335 { + server 127.0.0.1:9425; + zone uz_335 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8415; + location / { + proxy_pass http://u_335; + } + } + + server { + listen 9426; + return 200 "Test Response \n"; + } + upstream u_336 { + server 127.0.0.1:9426; + zone uz_336 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8416; + location / { + proxy_pass http://u_336; + } + } + + server { + listen 9427; + return 200 "Test Response \n"; + } + upstream u_337 { + server 127.0.0.1:9427; + zone uz_337 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8417; + location / { + proxy_pass http://u_337; + } + } + + server { + listen 9428; + return 200 "Test Response \n"; + } + upstream u_338 { + server 127.0.0.1:9428; + zone uz_338 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8418; + location / { + proxy_pass http://u_338; + } + } + + server { + listen 9429; + return 200 "Test Response \n"; + } + upstream u_339 { + server 127.0.0.1:9429; + zone uz_339 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8419; + location / { + proxy_pass http://u_339; + } + } + + server { + listen 9430; + return 200 "Test Response \n"; + } + upstream u_340 { + server 127.0.0.1:9430; + zone uz_340 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8420; + location / { + proxy_pass http://u_340; + } + } + + server { + listen 9431; + return 200 "Test Response \n"; + } + upstream u_341 { + server 127.0.0.1:9431; + zone uz_341 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8421; + location / { + proxy_pass http://u_341; + } + } + + server { + listen 9432; + return 200 "Test Response \n"; + } + upstream u_342 { + server 127.0.0.1:9432; + zone uz_342 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8422; + location / { + proxy_pass http://u_342; + } + } + + server { + listen 9433; + return 200 "Test Response \n"; + } + upstream u_343 { + server 127.0.0.1:9433; + zone uz_343 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8423; + location / { + proxy_pass http://u_343; + } + } + + server { + listen 9434; + return 200 "Test Response \n"; + } + upstream u_344 { + server 127.0.0.1:9434; + zone uz_344 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8424; + location / { + proxy_pass http://u_344; + } + } + + server { + listen 9435; + return 200 "Test Response \n"; + } + upstream u_345 { + server 127.0.0.1:9435; + zone uz_345 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8425; + location / { + proxy_pass http://u_345; + } + } + + server { + listen 9436; + return 200 "Test Response \n"; + } + upstream u_346 { + server 127.0.0.1:9436; + zone uz_346 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8426; + location / { + proxy_pass http://u_346; + } + } + + server { + listen 9437; + return 200 "Test Response \n"; + } + upstream u_347 { + server 127.0.0.1:9437; + zone uz_347 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8427; + location / { + proxy_pass http://u_347; + } + } + + server { + listen 9438; + return 200 "Test Response \n"; + } + upstream u_348 { + server 127.0.0.1:9438; + zone uz_348 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8428; + location / { + proxy_pass http://u_348; + } + } + + server { + listen 9439; + return 200 "Test Response \n"; + } + upstream u_349 { + server 127.0.0.1:9439; + zone uz_349 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8429; + location / { + proxy_pass http://u_349; + } + } + + server { + listen 9440; + return 200 "Test Response \n"; + } + upstream u_350 { + server 127.0.0.1:9440; + zone uz_350 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8430; + location / { + proxy_pass http://u_350; + } + } + + server { + listen 9441; + return 200 "Test Response \n"; + } + upstream u_351 { + server 127.0.0.1:9441; + zone uz_351 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8431; + location / { + proxy_pass http://u_351; + } + } + + server { + listen 9442; + return 200 "Test Response \n"; + } + upstream u_352 { + server 127.0.0.1:9442; + zone uz_352 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8432; + location / { + proxy_pass http://u_352; + } + } + + server { + listen 9443; + return 200 "Test Response \n"; + } + upstream u_353 { + server 127.0.0.1:9443; + zone uz_353 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8433; + location / { + proxy_pass http://u_353; + } + } + + server { + listen 9444; + return 200 "Test Response \n"; + } + upstream u_354 { + server 127.0.0.1:9444; + zone uz_354 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8434; + location / { + proxy_pass http://u_354; + } + } + + server { + listen 9445; + return 200 "Test Response \n"; + } + upstream u_355 { + server 127.0.0.1:9445; + zone uz_355 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8435; + location / { + proxy_pass http://u_355; + } + } + + server { + listen 9446; + return 200 "Test Response \n"; + } + upstream u_356 { + server 127.0.0.1:9446; + zone uz_356 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8436; + location / { + proxy_pass http://u_356; + } + } + + server { + listen 9447; + return 200 "Test Response \n"; + } + upstream u_357 { + server 127.0.0.1:9447; + zone uz_357 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8437; + location / { + proxy_pass http://u_357; + } + } + + server { + listen 9448; + return 200 "Test Response \n"; + } + upstream u_358 { + server 127.0.0.1:9448; + zone uz_358 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8438; + location / { + proxy_pass http://u_358; + } + } + + server { + listen 9449; + return 200 "Test Response \n"; + } + upstream u_359 { + server 127.0.0.1:9449; + zone uz_359 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8439; + location / { + proxy_pass http://u_359; + } + } + + server { + listen 9450; + return 200 "Test Response \n"; + } + upstream u_360 { + server 127.0.0.1:9450; + zone uz_360 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8440; + location / { + proxy_pass http://u_360; + } + } + + server { + listen 9451; + return 200 "Test Response \n"; + } + upstream u_361 { + server 127.0.0.1:9451; + zone uz_361 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8441; + location / { + proxy_pass http://u_361; + } + } + + server { + listen 9452; + return 200 "Test Response \n"; + } + upstream u_362 { + server 127.0.0.1:9452; + zone uz_362 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8442; + location / { + proxy_pass http://u_362; + } + } + + server { + listen 9453; + return 200 "Test Response \n"; + } + upstream u_363 { + server 127.0.0.1:9453; + zone uz_363 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8443; + location / { + proxy_pass http://u_363; + } + } + + server { + listen 9454; + return 200 "Test Response \n"; + } + upstream u_364 { + server 127.0.0.1:9454; + zone uz_364 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8444; + location / { + proxy_pass http://u_364; + } + } + + server { + listen 9455; + return 200 "Test Response \n"; + } + upstream u_365 { + server 127.0.0.1:9455; + zone uz_365 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8445; + location / { + proxy_pass http://u_365; + } + } + + server { + listen 9456; + return 200 "Test Response \n"; + } + upstream u_366 { + server 127.0.0.1:9456; + zone uz_366 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8446; + location / { + proxy_pass http://u_366; + } + } + + server { + listen 9457; + return 200 "Test Response \n"; + } + upstream u_367 { + server 127.0.0.1:9457; + zone uz_367 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8447; + location / { + proxy_pass http://u_367; + } + } + + server { + listen 9458; + return 200 "Test Response \n"; + } + upstream u_368 { + server 127.0.0.1:9458; + zone uz_368 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8448; + location / { + proxy_pass http://u_368; + } + } + + server { + listen 9459; + return 200 "Test Response \n"; + } + upstream u_369 { + server 127.0.0.1:9459; + zone uz_369 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8449; + location / { + proxy_pass http://u_369; + } + } + + server { + listen 9460; + return 200 "Test Response \n"; + } + upstream u_370 { + server 127.0.0.1:9460; + zone uz_370 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8450; + location / { + proxy_pass http://u_370; + } + } + + server { + listen 9461; + return 200 "Test Response \n"; + } + upstream u_371 { + server 127.0.0.1:9461; + zone uz_371 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8451; + location / { + proxy_pass http://u_371; + } + } + + server { + listen 9462; + return 200 "Test Response \n"; + } + upstream u_372 { + server 127.0.0.1:9462; + zone uz_372 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8452; + location / { + proxy_pass http://u_372; + } + } + + server { + listen 9463; + return 200 "Test Response \n"; + } + upstream u_373 { + server 127.0.0.1:9463; + zone uz_373 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8453; + location / { + proxy_pass http://u_373; + } + } + + server { + listen 9464; + return 200 "Test Response \n"; + } + upstream u_374 { + server 127.0.0.1:9464; + zone uz_374 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8454; + location / { + proxy_pass http://u_374; + } + } + + server { + listen 9465; + return 200 "Test Response \n"; + } + upstream u_375 { + server 127.0.0.1:9465; + zone uz_375 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8455; + location / { + proxy_pass http://u_375; + } + } + + server { + listen 9466; + return 200 "Test Response \n"; + } + upstream u_376 { + server 127.0.0.1:9466; + zone uz_376 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8456; + location / { + proxy_pass http://u_376; + } + } + + server { + listen 9467; + return 200 "Test Response \n"; + } + upstream u_377 { + server 127.0.0.1:9467; + zone uz_377 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8457; + location / { + proxy_pass http://u_377; + } + } + + server { + listen 9468; + return 200 "Test Response \n"; + } + upstream u_378 { + server 127.0.0.1:9468; + zone uz_378 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8458; + location / { + proxy_pass http://u_378; + } + } + + server { + listen 9469; + return 200 "Test Response \n"; + } + upstream u_379 { + server 127.0.0.1:9469; + zone uz_379 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8459; + location / { + proxy_pass http://u_379; + } + } + + server { + listen 9470; + return 200 "Test Response \n"; + } + upstream u_380 { + server 127.0.0.1:9470; + zone uz_380 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8460; + location / { + proxy_pass http://u_380; + } + } + + server { + listen 9471; + return 200 "Test Response \n"; + } + upstream u_381 { + server 127.0.0.1:9471; + zone uz_381 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8461; + location / { + proxy_pass http://u_381; + } + } + + server { + listen 9472; + return 200 "Test Response \n"; + } + upstream u_382 { + server 127.0.0.1:9472; + zone uz_382 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8462; + location / { + proxy_pass http://u_382; + } + } + + server { + listen 9473; + return 200 "Test Response \n"; + } + upstream u_383 { + server 127.0.0.1:9473; + zone uz_383 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8463; + location / { + proxy_pass http://u_383; + } + } + + server { + listen 9474; + return 200 "Test Response \n"; + } + upstream u_384 { + server 127.0.0.1:9474; + zone uz_384 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8464; + location / { + proxy_pass http://u_384; + } + } + + server { + listen 9475; + return 200 "Test Response \n"; + } + upstream u_385 { + server 127.0.0.1:9475; + zone uz_385 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8465; + location / { + proxy_pass http://u_385; + } + } + + server { + listen 9476; + return 200 "Test Response \n"; + } + upstream u_386 { + server 127.0.0.1:9476; + zone uz_386 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8466; + location / { + proxy_pass http://u_386; + } + } + + server { + listen 9477; + return 200 "Test Response \n"; + } + upstream u_387 { + server 127.0.0.1:9477; + zone uz_387 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8467; + location / { + proxy_pass http://u_387; + } + } + + server { + listen 9478; + return 200 "Test Response \n"; + } + upstream u_388 { + server 127.0.0.1:9478; + zone uz_388 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8468; + location / { + proxy_pass http://u_388; + } + } + + server { + listen 9479; + return 200 "Test Response \n"; + } + upstream u_389 { + server 127.0.0.1:9479; + zone uz_389 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8469; + location / { + proxy_pass http://u_389; + } + } + + server { + listen 9480; + return 200 "Test Response \n"; + } + upstream u_390 { + server 127.0.0.1:9480; + zone uz_390 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8470; + location / { + proxy_pass http://u_390; + } + } + + server { + listen 9481; + return 200 "Test Response \n"; + } + upstream u_391 { + server 127.0.0.1:9481; + zone uz_391 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8471; + location / { + proxy_pass http://u_391; + } + } + + server { + listen 9482; + return 200 "Test Response \n"; + } + upstream u_392 { + server 127.0.0.1:9482; + zone uz_392 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8472; + location / { + proxy_pass http://u_392; + } + } + + server { + listen 9483; + return 200 "Test Response \n"; + } + upstream u_393 { + server 127.0.0.1:9483; + zone uz_393 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8473; + location / { + proxy_pass http://u_393; + } + } + + server { + listen 9484; + return 200 "Test Response \n"; + } + upstream u_394 { + server 127.0.0.1:9484; + zone uz_394 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8474; + location / { + proxy_pass http://u_394; + } + } + + server { + listen 9485; + return 200 "Test Response \n"; + } + upstream u_395 { + server 127.0.0.1:9485; + zone uz_395 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8475; + location / { + proxy_pass http://u_395; + } + } + + server { + listen 9486; + return 200 "Test Response \n"; + } + upstream u_396 { + server 127.0.0.1:9486; + zone uz_396 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8476; + location / { + proxy_pass http://u_396; + } + } + + server { + listen 9487; + return 200 "Test Response \n"; + } + upstream u_397 { + server 127.0.0.1:9487; + zone uz_397 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8477; + location / { + proxy_pass http://u_397; + } + } + + server { + listen 9488; + return 200 "Test Response \n"; + } + upstream u_398 { + server 127.0.0.1:9488; + zone uz_398 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8478; + location / { + proxy_pass http://u_398; + } + } + + server { + listen 9489; + return 200 "Test Response \n"; + } + upstream u_399 { + server 127.0.0.1:9489; + zone uz_399 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8479; + location / { + proxy_pass http://u_399; + } + } + + server { + listen 9490; + return 200 "Test Response \n"; + } + upstream u_400 { + server 127.0.0.1:9490; + zone uz_400 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8480; + location / { + proxy_pass http://u_400; + } + } + + server { + listen 9491; + return 200 "Test Response \n"; + } + upstream u_401 { + server 127.0.0.1:9491; + zone uz_401 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8481; + location / { + proxy_pass http://u_401; + } + } + + server { + listen 9492; + return 200 "Test Response \n"; + } + upstream u_402 { + server 127.0.0.1:9492; + zone uz_402 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8482; + location / { + proxy_pass http://u_402; + } + } + + server { + listen 9493; + return 200 "Test Response \n"; + } + upstream u_403 { + server 127.0.0.1:9493; + zone uz_403 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8483; + location / { + proxy_pass http://u_403; + } + } + + server { + listen 9494; + return 200 "Test Response \n"; + } + upstream u_404 { + server 127.0.0.1:9494; + zone uz_404 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8484; + location / { + proxy_pass http://u_404; + } + } + + server { + listen 9495; + return 200 "Test Response \n"; + } + upstream u_405 { + server 127.0.0.1:9495; + zone uz_405 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8485; + location / { + proxy_pass http://u_405; + } + } + + server { + listen 9496; + return 200 "Test Response \n"; + } + upstream u_406 { + server 127.0.0.1:9496; + zone uz_406 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8486; + location / { + proxy_pass http://u_406; + } + } + + server { + listen 9497; + return 200 "Test Response \n"; + } + upstream u_407 { + server 127.0.0.1:9497; + zone uz_407 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8487; + location / { + proxy_pass http://u_407; + } + } + + server { + listen 9498; + return 200 "Test Response \n"; + } + upstream u_408 { + server 127.0.0.1:9498; + zone uz_408 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8488; + location / { + proxy_pass http://u_408; + } + } + + server { + listen 9499; + return 200 "Test Response \n"; + } + upstream u_409 { + server 127.0.0.1:9499; + zone uz_409 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8489; + location / { + proxy_pass http://u_409; + } + } + + server { + listen 9500; + return 200 "Test Response \n"; + } + upstream u_410 { + server 127.0.0.1:9500; + zone uz_410 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8490; + location / { + proxy_pass http://u_410; + } + } + + server { + listen 9501; + return 200 "Test Response \n"; + } + upstream u_411 { + server 127.0.0.1:9501; + zone uz_411 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8491; + location / { + proxy_pass http://u_411; + } + } + + server { + listen 9502; + return 200 "Test Response \n"; + } + upstream u_412 { + server 127.0.0.1:9502; + zone uz_412 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8492; + location / { + proxy_pass http://u_412; + } + } + + server { + listen 9503; + return 200 "Test Response \n"; + } + upstream u_413 { + server 127.0.0.1:9503; + zone uz_413 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8493; + location / { + proxy_pass http://u_413; + } + } + + server { + listen 9504; + return 200 "Test Response \n"; + } + upstream u_414 { + server 127.0.0.1:9504; + zone uz_414 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8494; + location / { + proxy_pass http://u_414; + } + } + + server { + listen 9505; + return 200 "Test Response \n"; + } + upstream u_415 { + server 127.0.0.1:9505; + zone uz_415 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8495; + location / { + proxy_pass http://u_415; + } + } + + server { + listen 9506; + return 200 "Test Response \n"; + } + upstream u_416 { + server 127.0.0.1:9506; + zone uz_416 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8496; + location / { + proxy_pass http://u_416; + } + } + + server { + listen 9507; + return 200 "Test Response \n"; + } + upstream u_417 { + server 127.0.0.1:9507; + zone uz_417 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8497; + location / { + proxy_pass http://u_417; + } + } + + server { + listen 9508; + return 200 "Test Response \n"; + } + upstream u_418 { + server 127.0.0.1:9508; + zone uz_418 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8498; + location / { + proxy_pass http://u_418; + } + } + + server { + listen 9509; + return 200 "Test Response \n"; + } + upstream u_419 { + server 127.0.0.1:9509; + zone uz_419 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8499; + location / { + proxy_pass http://u_419; + } + } + + server { + listen 9510; + return 200 "Test Response \n"; + } + upstream u_420 { + server 127.0.0.1:9510; + zone uz_420 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8500; + location / { + proxy_pass http://u_420; + } + } + + server { + listen 9511; + return 200 "Test Response \n"; + } + upstream u_421 { + server 127.0.0.1:9511; + zone uz_421 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8501; + location / { + proxy_pass http://u_421; + } + } + + server { + listen 9512; + return 200 "Test Response \n"; + } + upstream u_422 { + server 127.0.0.1:9512; + zone uz_422 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8502; + location / { + proxy_pass http://u_422; + } + } + + server { + listen 9513; + return 200 "Test Response \n"; + } + upstream u_423 { + server 127.0.0.1:9513; + zone uz_423 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8503; + location / { + proxy_pass http://u_423; + } + } + + server { + listen 9514; + return 200 "Test Response \n"; + } + upstream u_424 { + server 127.0.0.1:9514; + zone uz_424 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8504; + location / { + proxy_pass http://u_424; + } + } + + server { + listen 9515; + return 200 "Test Response \n"; + } + upstream u_425 { + server 127.0.0.1:9515; + zone uz_425 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8505; + location / { + proxy_pass http://u_425; + } + } + + server { + listen 9516; + return 200 "Test Response \n"; + } + upstream u_426 { + server 127.0.0.1:9516; + zone uz_426 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8506; + location / { + proxy_pass http://u_426; + } + } + + server { + listen 9517; + return 200 "Test Response \n"; + } + upstream u_427 { + server 127.0.0.1:9517; + zone uz_427 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8507; + location / { + proxy_pass http://u_427; + } + } + + server { + listen 9518; + return 200 "Test Response \n"; + } + upstream u_428 { + server 127.0.0.1:9518; + zone uz_428 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8508; + location / { + proxy_pass http://u_428; + } + } + + server { + listen 9519; + return 200 "Test Response \n"; + } + upstream u_429 { + server 127.0.0.1:9519; + zone uz_429 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8509; + location / { + proxy_pass http://u_429; + } + } + + server { + listen 9520; + return 200 "Test Response \n"; + } + upstream u_430 { + server 127.0.0.1:9520; + zone uz_430 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8510; + location / { + proxy_pass http://u_430; + } + } + + server { + listen 9521; + return 200 "Test Response \n"; + } + upstream u_431 { + server 127.0.0.1:9521; + zone uz_431 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8511; + location / { + proxy_pass http://u_431; + } + } + + server { + listen 9522; + return 200 "Test Response \n"; + } + upstream u_432 { + server 127.0.0.1:9522; + zone uz_432 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8512; + location / { + proxy_pass http://u_432; + } + } + + server { + listen 9523; + return 200 "Test Response \n"; + } + upstream u_433 { + server 127.0.0.1:9523; + zone uz_433 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8513; + location / { + proxy_pass http://u_433; + } + } + + server { + listen 9524; + return 200 "Test Response \n"; + } + upstream u_434 { + server 127.0.0.1:9524; + zone uz_434 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8514; + location / { + proxy_pass http://u_434; + } + } + + server { + listen 9525; + return 200 "Test Response \n"; + } + upstream u_435 { + server 127.0.0.1:9525; + zone uz_435 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8515; + location / { + proxy_pass http://u_435; + } + } + + server { + listen 9526; + return 200 "Test Response \n"; + } + upstream u_436 { + server 127.0.0.1:9526; + zone uz_436 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8516; + location / { + proxy_pass http://u_436; + } + } + + server { + listen 9527; + return 200 "Test Response \n"; + } + upstream u_437 { + server 127.0.0.1:9527; + zone uz_437 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8517; + location / { + proxy_pass http://u_437; + } + } + + server { + listen 9528; + return 200 "Test Response \n"; + } + upstream u_438 { + server 127.0.0.1:9528; + zone uz_438 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8518; + location / { + proxy_pass http://u_438; + } + } + + server { + listen 9529; + return 200 "Test Response \n"; + } + upstream u_439 { + server 127.0.0.1:9529; + zone uz_439 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8519; + location / { + proxy_pass http://u_439; + } + } + + server { + listen 9530; + return 200 "Test Response \n"; + } + upstream u_440 { + server 127.0.0.1:9530; + zone uz_440 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8520; + location / { + proxy_pass http://u_440; + } + } + + server { + listen 9531; + return 200 "Test Response \n"; + } + upstream u_441 { + server 127.0.0.1:9531; + zone uz_441 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8521; + location / { + proxy_pass http://u_441; + } + } + + server { + listen 9532; + return 200 "Test Response \n"; + } + upstream u_442 { + server 127.0.0.1:9532; + zone uz_442 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8522; + location / { + proxy_pass http://u_442; + } + } + + server { + listen 9533; + return 200 "Test Response \n"; + } + upstream u_443 { + server 127.0.0.1:9533; + zone uz_443 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8523; + location / { + proxy_pass http://u_443; + } + } + + server { + listen 9534; + return 200 "Test Response \n"; + } + upstream u_444 { + server 127.0.0.1:9534; + zone uz_444 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8524; + location / { + proxy_pass http://u_444; + } + } + + server { + listen 9535; + return 200 "Test Response \n"; + } + upstream u_445 { + server 127.0.0.1:9535; + zone uz_445 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8525; + location / { + proxy_pass http://u_445; + } + } + + server { + listen 9536; + return 200 "Test Response \n"; + } + upstream u_446 { + server 127.0.0.1:9536; + zone uz_446 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8526; + location / { + proxy_pass http://u_446; + } + } + + server { + listen 9537; + return 200 "Test Response \n"; + } + upstream u_447 { + server 127.0.0.1:9537; + zone uz_447 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8527; + location / { + proxy_pass http://u_447; + } + } + + server { + listen 9538; + return 200 "Test Response \n"; + } + upstream u_448 { + server 127.0.0.1:9538; + zone uz_448 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8528; + location / { + proxy_pass http://u_448; + } + } + + server { + listen 9539; + return 200 "Test Response \n"; + } + upstream u_449 { + server 127.0.0.1:9539; + zone uz_449 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8529; + location / { + proxy_pass http://u_449; + } + } + + server { + listen 9540; + return 200 "Test Response \n"; + } + upstream u_450 { + server 127.0.0.1:9540; + zone uz_450 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8530; + location / { + proxy_pass http://u_450; + } + } + + server { + listen 9541; + return 200 "Test Response \n"; + } + upstream u_451 { + server 127.0.0.1:9541; + zone uz_451 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8531; + location / { + proxy_pass http://u_451; + } + } + + server { + listen 9542; + return 200 "Test Response \n"; + } + upstream u_452 { + server 127.0.0.1:9542; + zone uz_452 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8532; + location / { + proxy_pass http://u_452; + } + } + + server { + listen 9543; + return 200 "Test Response \n"; + } + upstream u_453 { + server 127.0.0.1:9543; + zone uz_453 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8533; + location / { + proxy_pass http://u_453; + } + } + + server { + listen 9544; + return 200 "Test Response \n"; + } + upstream u_454 { + server 127.0.0.1:9544; + zone uz_454 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8534; + location / { + proxy_pass http://u_454; + } + } + + server { + listen 9545; + return 200 "Test Response \n"; + } + upstream u_455 { + server 127.0.0.1:9545; + zone uz_455 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8535; + location / { + proxy_pass http://u_455; + } + } + + server { + listen 9546; + return 200 "Test Response \n"; + } + upstream u_456 { + server 127.0.0.1:9546; + zone uz_456 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8536; + location / { + proxy_pass http://u_456; + } + } + + server { + listen 9547; + return 200 "Test Response \n"; + } + upstream u_457 { + server 127.0.0.1:9547; + zone uz_457 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8537; + location / { + proxy_pass http://u_457; + } + } + + server { + listen 9548; + return 200 "Test Response \n"; + } + upstream u_458 { + server 127.0.0.1:9548; + zone uz_458 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8538; + location / { + proxy_pass http://u_458; + } + } + + server { + listen 9549; + return 200 "Test Response \n"; + } + upstream u_459 { + server 127.0.0.1:9549; + zone uz_459 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8539; + location / { + proxy_pass http://u_459; + } + } + + server { + listen 9550; + return 200 "Test Response \n"; + } + upstream u_460 { + server 127.0.0.1:9550; + zone uz_460 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8540; + location / { + proxy_pass http://u_460; + } + } + + server { + listen 9551; + return 200 "Test Response \n"; + } + upstream u_461 { + server 127.0.0.1:9551; + zone uz_461 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8541; + location / { + proxy_pass http://u_461; + } + } + + server { + listen 9552; + return 200 "Test Response \n"; + } + upstream u_462 { + server 127.0.0.1:9552; + zone uz_462 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8542; + location / { + proxy_pass http://u_462; + } + } + + server { + listen 9553; + return 200 "Test Response \n"; + } + upstream u_463 { + server 127.0.0.1:9553; + zone uz_463 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8543; + location / { + proxy_pass http://u_463; + } + } + + server { + listen 9554; + return 200 "Test Response \n"; + } + upstream u_464 { + server 127.0.0.1:9554; + zone uz_464 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8544; + location / { + proxy_pass http://u_464; + } + } + + server { + listen 9555; + return 200 "Test Response \n"; + } + upstream u_465 { + server 127.0.0.1:9555; + zone uz_465 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8545; + location / { + proxy_pass http://u_465; + } + } + + server { + listen 9556; + return 200 "Test Response \n"; + } + upstream u_466 { + server 127.0.0.1:9556; + zone uz_466 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8546; + location / { + proxy_pass http://u_466; + } + } + + server { + listen 9557; + return 200 "Test Response \n"; + } + upstream u_467 { + server 127.0.0.1:9557; + zone uz_467 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8547; + location / { + proxy_pass http://u_467; + } + } + + server { + listen 9558; + return 200 "Test Response \n"; + } + upstream u_468 { + server 127.0.0.1:9558; + zone uz_468 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8548; + location / { + proxy_pass http://u_468; + } + } + + server { + listen 9559; + return 200 "Test Response \n"; + } + upstream u_469 { + server 127.0.0.1:9559; + zone uz_469 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8549; + location / { + proxy_pass http://u_469; + } + } + + server { + listen 9560; + return 200 "Test Response \n"; + } + upstream u_470 { + server 127.0.0.1:9560; + zone uz_470 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8550; + location / { + proxy_pass http://u_470; + } + } + + server { + listen 9561; + return 200 "Test Response \n"; + } + upstream u_471 { + server 127.0.0.1:9561; + zone uz_471 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8551; + location / { + proxy_pass http://u_471; + } + } + + server { + listen 9562; + return 200 "Test Response \n"; + } + upstream u_472 { + server 127.0.0.1:9562; + zone uz_472 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8552; + location / { + proxy_pass http://u_472; + } + } + + server { + listen 9563; + return 200 "Test Response \n"; + } + upstream u_473 { + server 127.0.0.1:9563; + zone uz_473 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8553; + location / { + proxy_pass http://u_473; + } + } + + server { + listen 9564; + return 200 "Test Response \n"; + } + upstream u_474 { + server 127.0.0.1:9564; + zone uz_474 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8554; + location / { + proxy_pass http://u_474; + } + } + + server { + listen 9565; + return 200 "Test Response \n"; + } + upstream u_475 { + server 127.0.0.1:9565; + zone uz_475 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8555; + location / { + proxy_pass http://u_475; + } + } + + server { + listen 9566; + return 200 "Test Response \n"; + } + upstream u_476 { + server 127.0.0.1:9566; + zone uz_476 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8556; + location / { + proxy_pass http://u_476; + } + } + + server { + listen 9567; + return 200 "Test Response \n"; + } + upstream u_477 { + server 127.0.0.1:9567; + zone uz_477 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8557; + location / { + proxy_pass http://u_477; + } + } + + server { + listen 9568; + return 200 "Test Response \n"; + } + upstream u_478 { + server 127.0.0.1:9568; + zone uz_478 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8558; + location / { + proxy_pass http://u_478; + } + } + + server { + listen 9569; + return 200 "Test Response \n"; + } + upstream u_479 { + server 127.0.0.1:9569; + zone uz_479 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8559; + location / { + proxy_pass http://u_479; + } + } + + server { + listen 9570; + return 200 "Test Response \n"; + } + upstream u_480 { + server 127.0.0.1:9570; + zone uz_480 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8560; + location / { + proxy_pass http://u_480; + } + } + + server { + listen 9571; + return 200 "Test Response \n"; + } + upstream u_481 { + server 127.0.0.1:9571; + zone uz_481 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8561; + location / { + proxy_pass http://u_481; + } + } + + server { + listen 9572; + return 200 "Test Response \n"; + } + upstream u_482 { + server 127.0.0.1:9572; + zone uz_482 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8562; + location / { + proxy_pass http://u_482; + } + } + + server { + listen 9573; + return 200 "Test Response \n"; + } + upstream u_483 { + server 127.0.0.1:9573; + zone uz_483 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8563; + location / { + proxy_pass http://u_483; + } + } + + server { + listen 9574; + return 200 "Test Response \n"; + } + upstream u_484 { + server 127.0.0.1:9574; + zone uz_484 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8564; + location / { + proxy_pass http://u_484; + } + } + + server { + listen 9575; + return 200 "Test Response \n"; + } + upstream u_485 { + server 127.0.0.1:9575; + zone uz_485 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8565; + location / { + proxy_pass http://u_485; + } + } + + server { + listen 9576; + return 200 "Test Response \n"; + } + upstream u_486 { + server 127.0.0.1:9576; + zone uz_486 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8566; + location / { + proxy_pass http://u_486; + } + } + + server { + listen 9577; + return 200 "Test Response \n"; + } + upstream u_487 { + server 127.0.0.1:9577; + zone uz_487 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8567; + location / { + proxy_pass http://u_487; + } + } + + server { + listen 9578; + return 200 "Test Response \n"; + } + upstream u_488 { + server 127.0.0.1:9578; + zone uz_488 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8568; + location / { + proxy_pass http://u_488; + } + } + + server { + listen 9579; + return 200 "Test Response \n"; + } + upstream u_489 { + server 127.0.0.1:9579; + zone uz_489 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8569; + location / { + proxy_pass http://u_489; + } + } + + server { + listen 9580; + return 200 "Test Response \n"; + } + upstream u_490 { + server 127.0.0.1:9580; + zone uz_490 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8570; + location / { + proxy_pass http://u_490; + } + } + + server { + listen 9581; + return 200 "Test Response \n"; + } + upstream u_491 { + server 127.0.0.1:9581; + zone uz_491 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8571; + location / { + proxy_pass http://u_491; + } + } + + server { + listen 9582; + return 200 "Test Response \n"; + } + upstream u_492 { + server 127.0.0.1:9582; + zone uz_492 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8572; + location / { + proxy_pass http://u_492; + } + } + + server { + listen 9583; + return 200 "Test Response \n"; + } + upstream u_493 { + server 127.0.0.1:9583; + zone uz_493 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8573; + location / { + proxy_pass http://u_493; + } + } + + server { + listen 9584; + return 200 "Test Response \n"; + } + upstream u_494 { + server 127.0.0.1:9584; + zone uz_494 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8574; + location / { + proxy_pass http://u_494; + } + } + + server { + listen 9585; + return 200 "Test Response \n"; + } + upstream u_495 { + server 127.0.0.1:9585; + zone uz_495 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8575; + location / { + proxy_pass http://u_495; + } + } + + server { + listen 9586; + return 200 "Test Response \n"; + } + upstream u_496 { + server 127.0.0.1:9586; + zone uz_496 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8576; + location / { + proxy_pass http://u_496; + } + } + + server { + listen 9587; + return 200 "Test Response \n"; + } + upstream u_497 { + server 127.0.0.1:9587; + zone uz_497 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8577; + location / { + proxy_pass http://u_497; + } + } + + server { + listen 9588; + return 200 "Test Response \n"; + } + upstream u_498 { + server 127.0.0.1:9588; + zone uz_498 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8578; + location / { + proxy_pass http://u_498; + } + } + + server { + listen 9589; + return 200 "Test Response \n"; + } + upstream u_499 { + server 127.0.0.1:9589; + zone uz_499 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8579; + location / { + proxy_pass http://u_499; + } + } + + server { + listen 9590; + return 200 "Test Response \n"; + } + upstream u_500 { + server 127.0.0.1:9590; + zone uz_500 1000000; + keepalive 32; + } + server { + listen 127.0.0.1:8580; + location / { + proxy_pass http://u_500; + } + } + + proxy_cache_path /data/nginx/cache_1 levels=1:2 keys_zone=cache_1:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8581; + location / { + proxy_cache cache_1; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_2 levels=1:2 keys_zone=cache_2:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8582; + location / { + proxy_cache cache_2; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_3 levels=1:2 keys_zone=cache_3:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8583; + location / { + proxy_cache cache_3; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_4 levels=1:2 keys_zone=cache_4:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8584; + location / { + proxy_cache cache_4; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_5 levels=1:2 keys_zone=cache_5:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8585; + location / { + proxy_cache cache_5; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_6 levels=1:2 keys_zone=cache_6:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8586; + location / { + proxy_cache cache_6; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_7 levels=1:2 keys_zone=cache_7:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8587; + location / { + proxy_cache cache_7; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_8 levels=1:2 keys_zone=cache_8:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8588; + location / { + proxy_cache cache_8; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_9 levels=1:2 keys_zone=cache_9:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8589; + location / { + proxy_cache cache_9; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_10 levels=1:2 keys_zone=cache_10:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8590; + location / { + proxy_cache cache_10; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_11 levels=1:2 keys_zone=cache_11:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8591; + location / { + proxy_cache cache_11; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_12 levels=1:2 keys_zone=cache_12:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8592; + location / { + proxy_cache cache_12; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_13 levels=1:2 keys_zone=cache_13:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8593; + location / { + proxy_cache cache_13; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_14 levels=1:2 keys_zone=cache_14:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8594; + location / { + proxy_cache cache_14; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_15 levels=1:2 keys_zone=cache_15:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8595; + location / { + proxy_cache cache_15; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_16 levels=1:2 keys_zone=cache_16:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8596; + location / { + proxy_cache cache_16; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_17 levels=1:2 keys_zone=cache_17:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8597; + location / { + proxy_cache cache_17; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_18 levels=1:2 keys_zone=cache_18:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8598; + location / { + proxy_cache cache_18; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_19 levels=1:2 keys_zone=cache_19:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8599; + location / { + proxy_cache cache_19; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_20 levels=1:2 keys_zone=cache_20:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8600; + location / { + proxy_cache cache_20; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_21 levels=1:2 keys_zone=cache_21:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8601; + location / { + proxy_cache cache_21; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_22 levels=1:2 keys_zone=cache_22:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8602; + location / { + proxy_cache cache_22; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_23 levels=1:2 keys_zone=cache_23:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8603; + location / { + proxy_cache cache_23; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_24 levels=1:2 keys_zone=cache_24:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8604; + location / { + proxy_cache cache_24; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_25 levels=1:2 keys_zone=cache_25:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8605; + location / { + proxy_cache cache_25; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_26 levels=1:2 keys_zone=cache_26:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8606; + location / { + proxy_cache cache_26; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_27 levels=1:2 keys_zone=cache_27:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8607; + location / { + proxy_cache cache_27; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_28 levels=1:2 keys_zone=cache_28:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8608; + location / { + proxy_cache cache_28; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_29 levels=1:2 keys_zone=cache_29:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8609; + location / { + proxy_cache cache_29; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_30 levels=1:2 keys_zone=cache_30:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8610; + location / { + proxy_cache cache_30; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_31 levels=1:2 keys_zone=cache_31:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8611; + location / { + proxy_cache cache_31; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_32 levels=1:2 keys_zone=cache_32:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8612; + location / { + proxy_cache cache_32; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_33 levels=1:2 keys_zone=cache_33:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8613; + location / { + proxy_cache cache_33; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_34 levels=1:2 keys_zone=cache_34:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8614; + location / { + proxy_cache cache_34; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_35 levels=1:2 keys_zone=cache_35:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8615; + location / { + proxy_cache cache_35; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_36 levels=1:2 keys_zone=cache_36:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8616; + location / { + proxy_cache cache_36; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_37 levels=1:2 keys_zone=cache_37:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8617; + location / { + proxy_cache cache_37; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_38 levels=1:2 keys_zone=cache_38:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8618; + location / { + proxy_cache cache_38; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_39 levels=1:2 keys_zone=cache_39:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8619; + location / { + proxy_cache cache_39; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_40 levels=1:2 keys_zone=cache_40:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8620; + location / { + proxy_cache cache_40; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_41 levels=1:2 keys_zone=cache_41:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8621; + location / { + proxy_cache cache_41; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_42 levels=1:2 keys_zone=cache_42:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8622; + location / { + proxy_cache cache_42; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_43 levels=1:2 keys_zone=cache_43:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8623; + location / { + proxy_cache cache_43; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_44 levels=1:2 keys_zone=cache_44:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8624; + location / { + proxy_cache cache_44; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_45 levels=1:2 keys_zone=cache_45:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8625; + location / { + proxy_cache cache_45; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_46 levels=1:2 keys_zone=cache_46:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8626; + location / { + proxy_cache cache_46; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_47 levels=1:2 keys_zone=cache_47:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8627; + location / { + proxy_cache cache_47; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_48 levels=1:2 keys_zone=cache_48:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8628; + location / { + proxy_cache cache_48; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_49 levels=1:2 keys_zone=cache_49:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8629; + location / { + proxy_cache cache_49; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_50 levels=1:2 keys_zone=cache_50:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8630; + location / { + proxy_cache cache_50; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_51 levels=1:2 keys_zone=cache_51:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8631; + location / { + proxy_cache cache_51; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_52 levels=1:2 keys_zone=cache_52:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8632; + location / { + proxy_cache cache_52; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_53 levels=1:2 keys_zone=cache_53:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8633; + location / { + proxy_cache cache_53; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_54 levels=1:2 keys_zone=cache_54:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8634; + location / { + proxy_cache cache_54; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_55 levels=1:2 keys_zone=cache_55:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8635; + location / { + proxy_cache cache_55; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_56 levels=1:2 keys_zone=cache_56:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8636; + location / { + proxy_cache cache_56; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_57 levels=1:2 keys_zone=cache_57:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8637; + location / { + proxy_cache cache_57; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_58 levels=1:2 keys_zone=cache_58:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8638; + location / { + proxy_cache cache_58; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_59 levels=1:2 keys_zone=cache_59:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8639; + location / { + proxy_cache cache_59; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_60 levels=1:2 keys_zone=cache_60:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8640; + location / { + proxy_cache cache_60; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_61 levels=1:2 keys_zone=cache_61:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8641; + location / { + proxy_cache cache_61; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_62 levels=1:2 keys_zone=cache_62:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8642; + location / { + proxy_cache cache_62; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_63 levels=1:2 keys_zone=cache_63:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8643; + location / { + proxy_cache cache_63; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_64 levels=1:2 keys_zone=cache_64:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8644; + location / { + proxy_cache cache_64; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_65 levels=1:2 keys_zone=cache_65:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8645; + location / { + proxy_cache cache_65; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_66 levels=1:2 keys_zone=cache_66:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8646; + location / { + proxy_cache cache_66; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_67 levels=1:2 keys_zone=cache_67:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8647; + location / { + proxy_cache cache_67; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_68 levels=1:2 keys_zone=cache_68:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8648; + location / { + proxy_cache cache_68; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_69 levels=1:2 keys_zone=cache_69:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8649; + location / { + proxy_cache cache_69; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_70 levels=1:2 keys_zone=cache_70:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8650; + location / { + proxy_cache cache_70; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_71 levels=1:2 keys_zone=cache_71:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8651; + location / { + proxy_cache cache_71; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_72 levels=1:2 keys_zone=cache_72:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8652; + location / { + proxy_cache cache_72; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_73 levels=1:2 keys_zone=cache_73:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8653; + location / { + proxy_cache cache_73; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_74 levels=1:2 keys_zone=cache_74:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8654; + location / { + proxy_cache cache_74; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_75 levels=1:2 keys_zone=cache_75:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8655; + location / { + proxy_cache cache_75; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_76 levels=1:2 keys_zone=cache_76:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8656; + location / { + proxy_cache cache_76; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_77 levels=1:2 keys_zone=cache_77:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8657; + location / { + proxy_cache cache_77; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_78 levels=1:2 keys_zone=cache_78:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8658; + location / { + proxy_cache cache_78; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_79 levels=1:2 keys_zone=cache_79:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8659; + location / { + proxy_cache cache_79; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_80 levels=1:2 keys_zone=cache_80:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8660; + location / { + proxy_cache cache_80; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_81 levels=1:2 keys_zone=cache_81:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8661; + location / { + proxy_cache cache_81; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_82 levels=1:2 keys_zone=cache_82:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8662; + location / { + proxy_cache cache_82; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_83 levels=1:2 keys_zone=cache_83:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8663; + location / { + proxy_cache cache_83; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_84 levels=1:2 keys_zone=cache_84:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8664; + location / { + proxy_cache cache_84; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_85 levels=1:2 keys_zone=cache_85:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8665; + location / { + proxy_cache cache_85; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_86 levels=1:2 keys_zone=cache_86:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8666; + location / { + proxy_cache cache_86; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_87 levels=1:2 keys_zone=cache_87:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8667; + location / { + proxy_cache cache_87; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_88 levels=1:2 keys_zone=cache_88:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8668; + location / { + proxy_cache cache_88; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_89 levels=1:2 keys_zone=cache_89:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8669; + location / { + proxy_cache cache_89; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_90 levels=1:2 keys_zone=cache_90:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8670; + location / { + proxy_cache cache_90; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_91 levels=1:2 keys_zone=cache_91:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8671; + location / { + proxy_cache cache_91; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_92 levels=1:2 keys_zone=cache_92:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8672; + location / { + proxy_cache cache_92; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_93 levels=1:2 keys_zone=cache_93:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8673; + location / { + proxy_cache cache_93; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_94 levels=1:2 keys_zone=cache_94:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8674; + location / { + proxy_cache cache_94; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_95 levels=1:2 keys_zone=cache_95:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8675; + location / { + proxy_cache cache_95; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_96 levels=1:2 keys_zone=cache_96:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8676; + location / { + proxy_cache cache_96; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_97 levels=1:2 keys_zone=cache_97:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8677; + location / { + proxy_cache cache_97; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_98 levels=1:2 keys_zone=cache_98:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8678; + location / { + proxy_cache cache_98; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_99 levels=1:2 keys_zone=cache_99:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8679; + location / { + proxy_cache cache_99; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_100 levels=1:2 keys_zone=cache_100:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8680; + location / { + proxy_cache cache_100; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_101 levels=1:2 keys_zone=cache_101:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8681; + location / { + proxy_cache cache_101; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_102 levels=1:2 keys_zone=cache_102:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8682; + location / { + proxy_cache cache_102; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_103 levels=1:2 keys_zone=cache_103:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8683; + location / { + proxy_cache cache_103; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_104 levels=1:2 keys_zone=cache_104:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8684; + location / { + proxy_cache cache_104; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_105 levels=1:2 keys_zone=cache_105:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8685; + location / { + proxy_cache cache_105; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_106 levels=1:2 keys_zone=cache_106:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8686; + location / { + proxy_cache cache_106; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_107 levels=1:2 keys_zone=cache_107:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8687; + location / { + proxy_cache cache_107; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_108 levels=1:2 keys_zone=cache_108:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8688; + location / { + proxy_cache cache_108; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_109 levels=1:2 keys_zone=cache_109:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8689; + location / { + proxy_cache cache_109; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_110 levels=1:2 keys_zone=cache_110:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8690; + location / { + proxy_cache cache_110; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_111 levels=1:2 keys_zone=cache_111:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8691; + location / { + proxy_cache cache_111; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_112 levels=1:2 keys_zone=cache_112:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8692; + location / { + proxy_cache cache_112; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_113 levels=1:2 keys_zone=cache_113:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8693; + location / { + proxy_cache cache_113; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_114 levels=1:2 keys_zone=cache_114:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8694; + location / { + proxy_cache cache_114; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_115 levels=1:2 keys_zone=cache_115:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8695; + location / { + proxy_cache cache_115; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_116 levels=1:2 keys_zone=cache_116:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8696; + location / { + proxy_cache cache_116; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_117 levels=1:2 keys_zone=cache_117:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8697; + location / { + proxy_cache cache_117; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_118 levels=1:2 keys_zone=cache_118:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8698; + location / { + proxy_cache cache_118; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_119 levels=1:2 keys_zone=cache_119:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8699; + location / { + proxy_cache cache_119; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_120 levels=1:2 keys_zone=cache_120:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8700; + location / { + proxy_cache cache_120; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_121 levels=1:2 keys_zone=cache_121:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8701; + location / { + proxy_cache cache_121; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_122 levels=1:2 keys_zone=cache_122:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8702; + location / { + proxy_cache cache_122; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_123 levels=1:2 keys_zone=cache_123:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8703; + location / { + proxy_cache cache_123; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_124 levels=1:2 keys_zone=cache_124:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8704; + location / { + proxy_cache cache_124; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_125 levels=1:2 keys_zone=cache_125:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8705; + location / { + proxy_cache cache_125; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_126 levels=1:2 keys_zone=cache_126:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8706; + location / { + proxy_cache cache_126; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_127 levels=1:2 keys_zone=cache_127:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8707; + location / { + proxy_cache cache_127; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_128 levels=1:2 keys_zone=cache_128:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8708; + location / { + proxy_cache cache_128; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_129 levels=1:2 keys_zone=cache_129:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8709; + location / { + proxy_cache cache_129; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_130 levels=1:2 keys_zone=cache_130:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8710; + location / { + proxy_cache cache_130; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_131 levels=1:2 keys_zone=cache_131:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8711; + location / { + proxy_cache cache_131; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_132 levels=1:2 keys_zone=cache_132:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8712; + location / { + proxy_cache cache_132; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_133 levels=1:2 keys_zone=cache_133:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8713; + location / { + proxy_cache cache_133; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_134 levels=1:2 keys_zone=cache_134:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8714; + location / { + proxy_cache cache_134; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_135 levels=1:2 keys_zone=cache_135:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8715; + location / { + proxy_cache cache_135; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_136 levels=1:2 keys_zone=cache_136:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8716; + location / { + proxy_cache cache_136; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_137 levels=1:2 keys_zone=cache_137:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8717; + location / { + proxy_cache cache_137; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_138 levels=1:2 keys_zone=cache_138:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8718; + location / { + proxy_cache cache_138; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_139 levels=1:2 keys_zone=cache_139:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8719; + location / { + proxy_cache cache_139; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_140 levels=1:2 keys_zone=cache_140:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8720; + location / { + proxy_cache cache_140; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_141 levels=1:2 keys_zone=cache_141:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8721; + location / { + proxy_cache cache_141; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_142 levels=1:2 keys_zone=cache_142:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8722; + location / { + proxy_cache cache_142; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_143 levels=1:2 keys_zone=cache_143:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8723; + location / { + proxy_cache cache_143; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_144 levels=1:2 keys_zone=cache_144:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8724; + location / { + proxy_cache cache_144; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_145 levels=1:2 keys_zone=cache_145:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8725; + location / { + proxy_cache cache_145; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_146 levels=1:2 keys_zone=cache_146:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8726; + location / { + proxy_cache cache_146; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_147 levels=1:2 keys_zone=cache_147:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8727; + location / { + proxy_cache cache_147; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_148 levels=1:2 keys_zone=cache_148:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8728; + location / { + proxy_cache cache_148; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_149 levels=1:2 keys_zone=cache_149:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8729; + location / { + proxy_cache cache_149; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_150 levels=1:2 keys_zone=cache_150:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8730; + location / { + proxy_cache cache_150; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_151 levels=1:2 keys_zone=cache_151:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8731; + location / { + proxy_cache cache_151; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_152 levels=1:2 keys_zone=cache_152:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8732; + location / { + proxy_cache cache_152; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_153 levels=1:2 keys_zone=cache_153:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8733; + location / { + proxy_cache cache_153; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_154 levels=1:2 keys_zone=cache_154:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8734; + location / { + proxy_cache cache_154; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_155 levels=1:2 keys_zone=cache_155:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8735; + location / { + proxy_cache cache_155; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_156 levels=1:2 keys_zone=cache_156:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8736; + location / { + proxy_cache cache_156; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_157 levels=1:2 keys_zone=cache_157:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8737; + location / { + proxy_cache cache_157; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_158 levels=1:2 keys_zone=cache_158:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8738; + location / { + proxy_cache cache_158; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_159 levels=1:2 keys_zone=cache_159:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8739; + location / { + proxy_cache cache_159; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_160 levels=1:2 keys_zone=cache_160:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8740; + location / { + proxy_cache cache_160; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_161 levels=1:2 keys_zone=cache_161:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8741; + location / { + proxy_cache cache_161; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_162 levels=1:2 keys_zone=cache_162:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8742; + location / { + proxy_cache cache_162; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_163 levels=1:2 keys_zone=cache_163:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8743; + location / { + proxy_cache cache_163; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_164 levels=1:2 keys_zone=cache_164:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8744; + location / { + proxy_cache cache_164; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_165 levels=1:2 keys_zone=cache_165:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8745; + location / { + proxy_cache cache_165; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_166 levels=1:2 keys_zone=cache_166:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8746; + location / { + proxy_cache cache_166; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_167 levels=1:2 keys_zone=cache_167:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8747; + location / { + proxy_cache cache_167; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_168 levels=1:2 keys_zone=cache_168:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8748; + location / { + proxy_cache cache_168; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_169 levels=1:2 keys_zone=cache_169:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8749; + location / { + proxy_cache cache_169; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_170 levels=1:2 keys_zone=cache_170:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8750; + location / { + proxy_cache cache_170; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_171 levels=1:2 keys_zone=cache_171:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8751; + location / { + proxy_cache cache_171; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_172 levels=1:2 keys_zone=cache_172:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8752; + location / { + proxy_cache cache_172; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_173 levels=1:2 keys_zone=cache_173:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8753; + location / { + proxy_cache cache_173; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_174 levels=1:2 keys_zone=cache_174:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8754; + location / { + proxy_cache cache_174; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_175 levels=1:2 keys_zone=cache_175:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8755; + location / { + proxy_cache cache_175; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_176 levels=1:2 keys_zone=cache_176:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8756; + location / { + proxy_cache cache_176; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_177 levels=1:2 keys_zone=cache_177:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8757; + location / { + proxy_cache cache_177; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_178 levels=1:2 keys_zone=cache_178:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8758; + location / { + proxy_cache cache_178; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_179 levels=1:2 keys_zone=cache_179:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8759; + location / { + proxy_cache cache_179; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_180 levels=1:2 keys_zone=cache_180:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8760; + location / { + proxy_cache cache_180; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_181 levels=1:2 keys_zone=cache_181:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8761; + location / { + proxy_cache cache_181; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_182 levels=1:2 keys_zone=cache_182:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8762; + location / { + proxy_cache cache_182; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_183 levels=1:2 keys_zone=cache_183:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8763; + location / { + proxy_cache cache_183; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_184 levels=1:2 keys_zone=cache_184:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8764; + location / { + proxy_cache cache_184; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_185 levels=1:2 keys_zone=cache_185:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8765; + location / { + proxy_cache cache_185; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_186 levels=1:2 keys_zone=cache_186:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8766; + location / { + proxy_cache cache_186; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_187 levels=1:2 keys_zone=cache_187:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8767; + location / { + proxy_cache cache_187; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_188 levels=1:2 keys_zone=cache_188:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8768; + location / { + proxy_cache cache_188; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_189 levels=1:2 keys_zone=cache_189:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8769; + location / { + proxy_cache cache_189; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_190 levels=1:2 keys_zone=cache_190:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8770; + location / { + proxy_cache cache_190; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_191 levels=1:2 keys_zone=cache_191:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8771; + location / { + proxy_cache cache_191; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_192 levels=1:2 keys_zone=cache_192:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8772; + location / { + proxy_cache cache_192; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_193 levels=1:2 keys_zone=cache_193:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8773; + location / { + proxy_cache cache_193; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_194 levels=1:2 keys_zone=cache_194:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8774; + location / { + proxy_cache cache_194; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_195 levels=1:2 keys_zone=cache_195:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8775; + location / { + proxy_cache cache_195; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_196 levels=1:2 keys_zone=cache_196:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8776; + location / { + proxy_cache cache_196; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_197 levels=1:2 keys_zone=cache_197:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8777; + location / { + proxy_cache cache_197; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_198 levels=1:2 keys_zone=cache_198:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8778; + location / { + proxy_cache cache_198; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_199 levels=1:2 keys_zone=cache_199:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8779; + location / { + proxy_cache cache_199; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_200 levels=1:2 keys_zone=cache_200:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8780; + location / { + proxy_cache cache_200; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_201 levels=1:2 keys_zone=cache_201:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8781; + location / { + proxy_cache cache_201; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_202 levels=1:2 keys_zone=cache_202:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8782; + location / { + proxy_cache cache_202; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_203 levels=1:2 keys_zone=cache_203:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8783; + location / { + proxy_cache cache_203; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_204 levels=1:2 keys_zone=cache_204:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8784; + location / { + proxy_cache cache_204; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_205 levels=1:2 keys_zone=cache_205:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8785; + location / { + proxy_cache cache_205; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_206 levels=1:2 keys_zone=cache_206:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8786; + location / { + proxy_cache cache_206; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_207 levels=1:2 keys_zone=cache_207:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8787; + location / { + proxy_cache cache_207; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_208 levels=1:2 keys_zone=cache_208:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8788; + location / { + proxy_cache cache_208; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_209 levels=1:2 keys_zone=cache_209:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8789; + location / { + proxy_cache cache_209; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_210 levels=1:2 keys_zone=cache_210:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8790; + location / { + proxy_cache cache_210; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_211 levels=1:2 keys_zone=cache_211:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8791; + location / { + proxy_cache cache_211; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_212 levels=1:2 keys_zone=cache_212:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8792; + location / { + proxy_cache cache_212; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_213 levels=1:2 keys_zone=cache_213:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8793; + location / { + proxy_cache cache_213; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_214 levels=1:2 keys_zone=cache_214:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8794; + location / { + proxy_cache cache_214; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_215 levels=1:2 keys_zone=cache_215:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8795; + location / { + proxy_cache cache_215; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_216 levels=1:2 keys_zone=cache_216:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8796; + location / { + proxy_cache cache_216; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_217 levels=1:2 keys_zone=cache_217:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8797; + location / { + proxy_cache cache_217; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_218 levels=1:2 keys_zone=cache_218:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8798; + location / { + proxy_cache cache_218; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_219 levels=1:2 keys_zone=cache_219:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8799; + location / { + proxy_cache cache_219; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_220 levels=1:2 keys_zone=cache_220:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8800; + location / { + proxy_cache cache_220; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_221 levels=1:2 keys_zone=cache_221:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8801; + location / { + proxy_cache cache_221; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_222 levels=1:2 keys_zone=cache_222:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8802; + location / { + proxy_cache cache_222; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_223 levels=1:2 keys_zone=cache_223:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8803; + location / { + proxy_cache cache_223; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_224 levels=1:2 keys_zone=cache_224:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8804; + location / { + proxy_cache cache_224; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_225 levels=1:2 keys_zone=cache_225:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8805; + location / { + proxy_cache cache_225; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_226 levels=1:2 keys_zone=cache_226:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8806; + location / { + proxy_cache cache_226; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_227 levels=1:2 keys_zone=cache_227:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8807; + location / { + proxy_cache cache_227; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_228 levels=1:2 keys_zone=cache_228:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8808; + location / { + proxy_cache cache_228; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_229 levels=1:2 keys_zone=cache_229:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8809; + location / { + proxy_cache cache_229; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_230 levels=1:2 keys_zone=cache_230:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8810; + location / { + proxy_cache cache_230; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_231 levels=1:2 keys_zone=cache_231:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8811; + location / { + proxy_cache cache_231; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_232 levels=1:2 keys_zone=cache_232:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8812; + location / { + proxy_cache cache_232; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_233 levels=1:2 keys_zone=cache_233:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8813; + location / { + proxy_cache cache_233; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_234 levels=1:2 keys_zone=cache_234:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8814; + location / { + proxy_cache cache_234; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_235 levels=1:2 keys_zone=cache_235:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8815; + location / { + proxy_cache cache_235; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_236 levels=1:2 keys_zone=cache_236:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8816; + location / { + proxy_cache cache_236; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_237 levels=1:2 keys_zone=cache_237:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8817; + location / { + proxy_cache cache_237; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_238 levels=1:2 keys_zone=cache_238:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8818; + location / { + proxy_cache cache_238; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_239 levels=1:2 keys_zone=cache_239:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8819; + location / { + proxy_cache cache_239; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_240 levels=1:2 keys_zone=cache_240:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8820; + location / { + proxy_cache cache_240; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_241 levels=1:2 keys_zone=cache_241:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8821; + location / { + proxy_cache cache_241; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_242 levels=1:2 keys_zone=cache_242:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8822; + location / { + proxy_cache cache_242; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_243 levels=1:2 keys_zone=cache_243:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8823; + location / { + proxy_cache cache_243; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_244 levels=1:2 keys_zone=cache_244:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8824; + location / { + proxy_cache cache_244; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_245 levels=1:2 keys_zone=cache_245:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8825; + location / { + proxy_cache cache_245; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_246 levels=1:2 keys_zone=cache_246:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8826; + location / { + proxy_cache cache_246; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_247 levels=1:2 keys_zone=cache_247:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8827; + location / { + proxy_cache cache_247; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_248 levels=1:2 keys_zone=cache_248:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8828; + location / { + proxy_cache cache_248; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_249 levels=1:2 keys_zone=cache_249:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8829; + location / { + proxy_cache cache_249; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_250 levels=1:2 keys_zone=cache_250:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8830; + location / { + proxy_cache cache_250; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_251 levels=1:2 keys_zone=cache_251:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8831; + location / { + proxy_cache cache_251; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_252 levels=1:2 keys_zone=cache_252:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8832; + location / { + proxy_cache cache_252; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_253 levels=1:2 keys_zone=cache_253:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8833; + location / { + proxy_cache cache_253; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_254 levels=1:2 keys_zone=cache_254:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8834; + location / { + proxy_cache cache_254; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_255 levels=1:2 keys_zone=cache_255:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8835; + location / { + proxy_cache cache_255; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_256 levels=1:2 keys_zone=cache_256:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8836; + location / { + proxy_cache cache_256; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_257 levels=1:2 keys_zone=cache_257:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8837; + location / { + proxy_cache cache_257; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_258 levels=1:2 keys_zone=cache_258:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8838; + location / { + proxy_cache cache_258; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_259 levels=1:2 keys_zone=cache_259:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8839; + location / { + proxy_cache cache_259; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_260 levels=1:2 keys_zone=cache_260:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8840; + location / { + proxy_cache cache_260; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_261 levels=1:2 keys_zone=cache_261:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8841; + location / { + proxy_cache cache_261; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_262 levels=1:2 keys_zone=cache_262:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8842; + location / { + proxy_cache cache_262; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_263 levels=1:2 keys_zone=cache_263:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8843; + location / { + proxy_cache cache_263; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_264 levels=1:2 keys_zone=cache_264:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8844; + location / { + proxy_cache cache_264; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_265 levels=1:2 keys_zone=cache_265:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8845; + location / { + proxy_cache cache_265; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_266 levels=1:2 keys_zone=cache_266:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8846; + location / { + proxy_cache cache_266; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_267 levels=1:2 keys_zone=cache_267:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8847; + location / { + proxy_cache cache_267; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_268 levels=1:2 keys_zone=cache_268:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8848; + location / { + proxy_cache cache_268; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_269 levels=1:2 keys_zone=cache_269:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8849; + location / { + proxy_cache cache_269; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_270 levels=1:2 keys_zone=cache_270:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8850; + location / { + proxy_cache cache_270; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_271 levels=1:2 keys_zone=cache_271:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8851; + location / { + proxy_cache cache_271; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_272 levels=1:2 keys_zone=cache_272:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8852; + location / { + proxy_cache cache_272; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_273 levels=1:2 keys_zone=cache_273:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8853; + location / { + proxy_cache cache_273; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_274 levels=1:2 keys_zone=cache_274:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8854; + location / { + proxy_cache cache_274; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_275 levels=1:2 keys_zone=cache_275:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8855; + location / { + proxy_cache cache_275; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_276 levels=1:2 keys_zone=cache_276:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8856; + location / { + proxy_cache cache_276; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_277 levels=1:2 keys_zone=cache_277:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8857; + location / { + proxy_cache cache_277; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_278 levels=1:2 keys_zone=cache_278:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8858; + location / { + proxy_cache cache_278; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_279 levels=1:2 keys_zone=cache_279:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8859; + location / { + proxy_cache cache_279; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_280 levels=1:2 keys_zone=cache_280:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8860; + location / { + proxy_cache cache_280; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_281 levels=1:2 keys_zone=cache_281:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8861; + location / { + proxy_cache cache_281; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_282 levels=1:2 keys_zone=cache_282:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8862; + location / { + proxy_cache cache_282; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_283 levels=1:2 keys_zone=cache_283:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8863; + location / { + proxy_cache cache_283; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_284 levels=1:2 keys_zone=cache_284:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8864; + location / { + proxy_cache cache_284; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_285 levels=1:2 keys_zone=cache_285:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8865; + location / { + proxy_cache cache_285; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_286 levels=1:2 keys_zone=cache_286:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8866; + location / { + proxy_cache cache_286; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_287 levels=1:2 keys_zone=cache_287:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8867; + location / { + proxy_cache cache_287; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_288 levels=1:2 keys_zone=cache_288:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8868; + location / { + proxy_cache cache_288; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_289 levels=1:2 keys_zone=cache_289:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8869; + location / { + proxy_cache cache_289; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_290 levels=1:2 keys_zone=cache_290:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8870; + location / { + proxy_cache cache_290; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_291 levels=1:2 keys_zone=cache_291:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8871; + location / { + proxy_cache cache_291; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_292 levels=1:2 keys_zone=cache_292:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8872; + location / { + proxy_cache cache_292; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_293 levels=1:2 keys_zone=cache_293:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8873; + location / { + proxy_cache cache_293; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_294 levels=1:2 keys_zone=cache_294:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8874; + location / { + proxy_cache cache_294; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_295 levels=1:2 keys_zone=cache_295:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8875; + location / { + proxy_cache cache_295; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_296 levels=1:2 keys_zone=cache_296:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8876; + location / { + proxy_cache cache_296; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_297 levels=1:2 keys_zone=cache_297:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8877; + location / { + proxy_cache cache_297; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_298 levels=1:2 keys_zone=cache_298:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8878; + location / { + proxy_cache cache_298; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_299 levels=1:2 keys_zone=cache_299:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8879; + location / { + proxy_cache cache_299; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_300 levels=1:2 keys_zone=cache_300:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8880; + location / { + proxy_cache cache_300; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_301 levels=1:2 keys_zone=cache_301:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8881; + location / { + proxy_cache cache_301; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_302 levels=1:2 keys_zone=cache_302:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8882; + location / { + proxy_cache cache_302; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_303 levels=1:2 keys_zone=cache_303:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8883; + location / { + proxy_cache cache_303; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_304 levels=1:2 keys_zone=cache_304:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8884; + location / { + proxy_cache cache_304; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_305 levels=1:2 keys_zone=cache_305:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8885; + location / { + proxy_cache cache_305; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_306 levels=1:2 keys_zone=cache_306:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8886; + location / { + proxy_cache cache_306; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_307 levels=1:2 keys_zone=cache_307:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8887; + location / { + proxy_cache cache_307; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_308 levels=1:2 keys_zone=cache_308:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8888; + location / { + proxy_cache cache_308; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_309 levels=1:2 keys_zone=cache_309:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8889; + location / { + proxy_cache cache_309; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_310 levels=1:2 keys_zone=cache_310:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8890; + location / { + proxy_cache cache_310; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_311 levels=1:2 keys_zone=cache_311:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8891; + location / { + proxy_cache cache_311; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_312 levels=1:2 keys_zone=cache_312:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8892; + location / { + proxy_cache cache_312; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_313 levels=1:2 keys_zone=cache_313:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8893; + location / { + proxy_cache cache_313; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_314 levels=1:2 keys_zone=cache_314:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8894; + location / { + proxy_cache cache_314; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_315 levels=1:2 keys_zone=cache_315:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8895; + location / { + proxy_cache cache_315; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_316 levels=1:2 keys_zone=cache_316:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8896; + location / { + proxy_cache cache_316; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_317 levels=1:2 keys_zone=cache_317:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8897; + location / { + proxy_cache cache_317; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_318 levels=1:2 keys_zone=cache_318:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8898; + location / { + proxy_cache cache_318; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_319 levels=1:2 keys_zone=cache_319:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8899; + location / { + proxy_cache cache_319; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_320 levels=1:2 keys_zone=cache_320:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8900; + location / { + proxy_cache cache_320; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_321 levels=1:2 keys_zone=cache_321:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8901; + location / { + proxy_cache cache_321; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_322 levels=1:2 keys_zone=cache_322:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8902; + location / { + proxy_cache cache_322; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_323 levels=1:2 keys_zone=cache_323:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8903; + location / { + proxy_cache cache_323; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_324 levels=1:2 keys_zone=cache_324:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8904; + location / { + proxy_cache cache_324; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_325 levels=1:2 keys_zone=cache_325:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8905; + location / { + proxy_cache cache_325; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_326 levels=1:2 keys_zone=cache_326:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8906; + location / { + proxy_cache cache_326; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_327 levels=1:2 keys_zone=cache_327:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8907; + location / { + proxy_cache cache_327; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_328 levels=1:2 keys_zone=cache_328:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8908; + location / { + proxy_cache cache_328; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_329 levels=1:2 keys_zone=cache_329:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8909; + location / { + proxy_cache cache_329; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_330 levels=1:2 keys_zone=cache_330:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8910; + location / { + proxy_cache cache_330; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_331 levels=1:2 keys_zone=cache_331:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8911; + location / { + proxy_cache cache_331; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_332 levels=1:2 keys_zone=cache_332:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8912; + location / { + proxy_cache cache_332; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_333 levels=1:2 keys_zone=cache_333:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8913; + location / { + proxy_cache cache_333; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_334 levels=1:2 keys_zone=cache_334:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8914; + location / { + proxy_cache cache_334; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_335 levels=1:2 keys_zone=cache_335:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8915; + location / { + proxy_cache cache_335; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_336 levels=1:2 keys_zone=cache_336:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8916; + location / { + proxy_cache cache_336; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_337 levels=1:2 keys_zone=cache_337:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8917; + location / { + proxy_cache cache_337; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_338 levels=1:2 keys_zone=cache_338:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8918; + location / { + proxy_cache cache_338; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_339 levels=1:2 keys_zone=cache_339:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8919; + location / { + proxy_cache cache_339; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_340 levels=1:2 keys_zone=cache_340:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8920; + location / { + proxy_cache cache_340; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_341 levels=1:2 keys_zone=cache_341:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8921; + location / { + proxy_cache cache_341; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_342 levels=1:2 keys_zone=cache_342:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8922; + location / { + proxy_cache cache_342; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_343 levels=1:2 keys_zone=cache_343:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8923; + location / { + proxy_cache cache_343; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_344 levels=1:2 keys_zone=cache_344:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8924; + location / { + proxy_cache cache_344; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_345 levels=1:2 keys_zone=cache_345:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8925; + location / { + proxy_cache cache_345; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_346 levels=1:2 keys_zone=cache_346:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8926; + location / { + proxy_cache cache_346; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_347 levels=1:2 keys_zone=cache_347:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8927; + location / { + proxy_cache cache_347; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_348 levels=1:2 keys_zone=cache_348:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8928; + location / { + proxy_cache cache_348; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_349 levels=1:2 keys_zone=cache_349:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8929; + location / { + proxy_cache cache_349; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_350 levels=1:2 keys_zone=cache_350:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8930; + location / { + proxy_cache cache_350; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_351 levels=1:2 keys_zone=cache_351:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8931; + location / { + proxy_cache cache_351; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_352 levels=1:2 keys_zone=cache_352:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8932; + location / { + proxy_cache cache_352; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_353 levels=1:2 keys_zone=cache_353:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8933; + location / { + proxy_cache cache_353; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_354 levels=1:2 keys_zone=cache_354:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8934; + location / { + proxy_cache cache_354; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_355 levels=1:2 keys_zone=cache_355:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8935; + location / { + proxy_cache cache_355; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_356 levels=1:2 keys_zone=cache_356:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8936; + location / { + proxy_cache cache_356; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_357 levels=1:2 keys_zone=cache_357:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8937; + location / { + proxy_cache cache_357; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_358 levels=1:2 keys_zone=cache_358:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8938; + location / { + proxy_cache cache_358; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_359 levels=1:2 keys_zone=cache_359:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8939; + location / { + proxy_cache cache_359; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_360 levels=1:2 keys_zone=cache_360:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8940; + location / { + proxy_cache cache_360; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_361 levels=1:2 keys_zone=cache_361:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8941; + location / { + proxy_cache cache_361; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_362 levels=1:2 keys_zone=cache_362:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8942; + location / { + proxy_cache cache_362; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_363 levels=1:2 keys_zone=cache_363:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8943; + location / { + proxy_cache cache_363; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_364 levels=1:2 keys_zone=cache_364:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8944; + location / { + proxy_cache cache_364; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_365 levels=1:2 keys_zone=cache_365:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8945; + location / { + proxy_cache cache_365; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_366 levels=1:2 keys_zone=cache_366:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8946; + location / { + proxy_cache cache_366; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_367 levels=1:2 keys_zone=cache_367:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8947; + location / { + proxy_cache cache_367; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_368 levels=1:2 keys_zone=cache_368:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8948; + location / { + proxy_cache cache_368; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_369 levels=1:2 keys_zone=cache_369:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8949; + location / { + proxy_cache cache_369; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_370 levels=1:2 keys_zone=cache_370:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8950; + location / { + proxy_cache cache_370; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_371 levels=1:2 keys_zone=cache_371:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8951; + location / { + proxy_cache cache_371; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_372 levels=1:2 keys_zone=cache_372:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8952; + location / { + proxy_cache cache_372; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_373 levels=1:2 keys_zone=cache_373:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8953; + location / { + proxy_cache cache_373; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_374 levels=1:2 keys_zone=cache_374:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8954; + location / { + proxy_cache cache_374; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_375 levels=1:2 keys_zone=cache_375:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8955; + location / { + proxy_cache cache_375; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_376 levels=1:2 keys_zone=cache_376:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8956; + location / { + proxy_cache cache_376; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_377 levels=1:2 keys_zone=cache_377:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8957; + location / { + proxy_cache cache_377; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_378 levels=1:2 keys_zone=cache_378:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8958; + location / { + proxy_cache cache_378; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_379 levels=1:2 keys_zone=cache_379:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8959; + location / { + proxy_cache cache_379; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_380 levels=1:2 keys_zone=cache_380:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8960; + location / { + proxy_cache cache_380; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_381 levels=1:2 keys_zone=cache_381:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8961; + location / { + proxy_cache cache_381; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_382 levels=1:2 keys_zone=cache_382:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8962; + location / { + proxy_cache cache_382; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_383 levels=1:2 keys_zone=cache_383:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8963; + location / { + proxy_cache cache_383; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_384 levels=1:2 keys_zone=cache_384:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8964; + location / { + proxy_cache cache_384; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_385 levels=1:2 keys_zone=cache_385:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8965; + location / { + proxy_cache cache_385; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_386 levels=1:2 keys_zone=cache_386:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8966; + location / { + proxy_cache cache_386; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_387 levels=1:2 keys_zone=cache_387:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8967; + location / { + proxy_cache cache_387; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_388 levels=1:2 keys_zone=cache_388:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8968; + location / { + proxy_cache cache_388; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_389 levels=1:2 keys_zone=cache_389:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8969; + location / { + proxy_cache cache_389; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_390 levels=1:2 keys_zone=cache_390:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8970; + location / { + proxy_cache cache_390; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_391 levels=1:2 keys_zone=cache_391:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8971; + location / { + proxy_cache cache_391; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_392 levels=1:2 keys_zone=cache_392:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8972; + location / { + proxy_cache cache_392; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_393 levels=1:2 keys_zone=cache_393:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8973; + location / { + proxy_cache cache_393; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_394 levels=1:2 keys_zone=cache_394:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8974; + location / { + proxy_cache cache_394; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_395 levels=1:2 keys_zone=cache_395:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8975; + location / { + proxy_cache cache_395; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_396 levels=1:2 keys_zone=cache_396:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8976; + location / { + proxy_cache cache_396; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_397 levels=1:2 keys_zone=cache_397:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8977; + location / { + proxy_cache cache_397; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_398 levels=1:2 keys_zone=cache_398:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8978; + location / { + proxy_cache cache_398; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_399 levels=1:2 keys_zone=cache_399:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8979; + location / { + proxy_cache cache_399; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_400 levels=1:2 keys_zone=cache_400:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8980; + location / { + proxy_cache cache_400; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_401 levels=1:2 keys_zone=cache_401:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8981; + location / { + proxy_cache cache_401; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_402 levels=1:2 keys_zone=cache_402:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8982; + location / { + proxy_cache cache_402; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_403 levels=1:2 keys_zone=cache_403:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8983; + location / { + proxy_cache cache_403; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_404 levels=1:2 keys_zone=cache_404:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8984; + location / { + proxy_cache cache_404; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_405 levels=1:2 keys_zone=cache_405:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8985; + location / { + proxy_cache cache_405; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_406 levels=1:2 keys_zone=cache_406:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8986; + location / { + proxy_cache cache_406; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_407 levels=1:2 keys_zone=cache_407:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8987; + location / { + proxy_cache cache_407; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_408 levels=1:2 keys_zone=cache_408:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8988; + location / { + proxy_cache cache_408; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_409 levels=1:2 keys_zone=cache_409:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8989; + location / { + proxy_cache cache_409; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_410 levels=1:2 keys_zone=cache_410:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8990; + location / { + proxy_cache cache_410; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_411 levels=1:2 keys_zone=cache_411:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8991; + location / { + proxy_cache cache_411; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_412 levels=1:2 keys_zone=cache_412:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8992; + location / { + proxy_cache cache_412; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_413 levels=1:2 keys_zone=cache_413:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8993; + location / { + proxy_cache cache_413; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_414 levels=1:2 keys_zone=cache_414:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8994; + location / { + proxy_cache cache_414; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_415 levels=1:2 keys_zone=cache_415:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8995; + location / { + proxy_cache cache_415; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_416 levels=1:2 keys_zone=cache_416:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8996; + location / { + proxy_cache cache_416; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_417 levels=1:2 keys_zone=cache_417:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8997; + location / { + proxy_cache cache_417; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_418 levels=1:2 keys_zone=cache_418:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8998; + location / { + proxy_cache cache_418; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_419 levels=1:2 keys_zone=cache_419:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:8999; + location / { + proxy_cache cache_419; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_420 levels=1:2 keys_zone=cache_420:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9000; + location / { + proxy_cache cache_420; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_421 levels=1:2 keys_zone=cache_421:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9001; + location / { + proxy_cache cache_421; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_422 levels=1:2 keys_zone=cache_422:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9002; + location / { + proxy_cache cache_422; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_423 levels=1:2 keys_zone=cache_423:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9003; + location / { + proxy_cache cache_423; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_424 levels=1:2 keys_zone=cache_424:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9004; + location / { + proxy_cache cache_424; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_425 levels=1:2 keys_zone=cache_425:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9005; + location / { + proxy_cache cache_425; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_426 levels=1:2 keys_zone=cache_426:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9006; + location / { + proxy_cache cache_426; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_427 levels=1:2 keys_zone=cache_427:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9007; + location / { + proxy_cache cache_427; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_428 levels=1:2 keys_zone=cache_428:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9008; + location / { + proxy_cache cache_428; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_429 levels=1:2 keys_zone=cache_429:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9009; + location / { + proxy_cache cache_429; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_430 levels=1:2 keys_zone=cache_430:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9010; + location / { + proxy_cache cache_430; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_431 levels=1:2 keys_zone=cache_431:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9011; + location / { + proxy_cache cache_431; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_432 levels=1:2 keys_zone=cache_432:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9012; + location / { + proxy_cache cache_432; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_433 levels=1:2 keys_zone=cache_433:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9013; + location / { + proxy_cache cache_433; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_434 levels=1:2 keys_zone=cache_434:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9014; + location / { + proxy_cache cache_434; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_435 levels=1:2 keys_zone=cache_435:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9015; + location / { + proxy_cache cache_435; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_436 levels=1:2 keys_zone=cache_436:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9016; + location / { + proxy_cache cache_436; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_437 levels=1:2 keys_zone=cache_437:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9017; + location / { + proxy_cache cache_437; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_438 levels=1:2 keys_zone=cache_438:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9018; + location / { + proxy_cache cache_438; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_439 levels=1:2 keys_zone=cache_439:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9019; + location / { + proxy_cache cache_439; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_440 levels=1:2 keys_zone=cache_440:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9020; + location / { + proxy_cache cache_440; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_441 levels=1:2 keys_zone=cache_441:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9021; + location / { + proxy_cache cache_441; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_442 levels=1:2 keys_zone=cache_442:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9022; + location / { + proxy_cache cache_442; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_443 levels=1:2 keys_zone=cache_443:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9023; + location / { + proxy_cache cache_443; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_444 levels=1:2 keys_zone=cache_444:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9024; + location / { + proxy_cache cache_444; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_445 levels=1:2 keys_zone=cache_445:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9025; + location / { + proxy_cache cache_445; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_446 levels=1:2 keys_zone=cache_446:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9026; + location / { + proxy_cache cache_446; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_447 levels=1:2 keys_zone=cache_447:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9027; + location / { + proxy_cache cache_447; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_448 levels=1:2 keys_zone=cache_448:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9028; + location / { + proxy_cache cache_448; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_449 levels=1:2 keys_zone=cache_449:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9029; + location / { + proxy_cache cache_449; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_450 levels=1:2 keys_zone=cache_450:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9030; + location / { + proxy_cache cache_450; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_451 levels=1:2 keys_zone=cache_451:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9031; + location / { + proxy_cache cache_451; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_452 levels=1:2 keys_zone=cache_452:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9032; + location / { + proxy_cache cache_452; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_453 levels=1:2 keys_zone=cache_453:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9033; + location / { + proxy_cache cache_453; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_454 levels=1:2 keys_zone=cache_454:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9034; + location / { + proxy_cache cache_454; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_455 levels=1:2 keys_zone=cache_455:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9035; + location / { + proxy_cache cache_455; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_456 levels=1:2 keys_zone=cache_456:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9036; + location / { + proxy_cache cache_456; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_457 levels=1:2 keys_zone=cache_457:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9037; + location / { + proxy_cache cache_457; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_458 levels=1:2 keys_zone=cache_458:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9038; + location / { + proxy_cache cache_458; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_459 levels=1:2 keys_zone=cache_459:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9039; + location / { + proxy_cache cache_459; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_460 levels=1:2 keys_zone=cache_460:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9040; + location / { + proxy_cache cache_460; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_461 levels=1:2 keys_zone=cache_461:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9041; + location / { + proxy_cache cache_461; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_462 levels=1:2 keys_zone=cache_462:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9042; + location / { + proxy_cache cache_462; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_463 levels=1:2 keys_zone=cache_463:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9043; + location / { + proxy_cache cache_463; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_464 levels=1:2 keys_zone=cache_464:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9044; + location / { + proxy_cache cache_464; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_465 levels=1:2 keys_zone=cache_465:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9045; + location / { + proxy_cache cache_465; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_466 levels=1:2 keys_zone=cache_466:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9046; + location / { + proxy_cache cache_466; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_467 levels=1:2 keys_zone=cache_467:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9047; + location / { + proxy_cache cache_467; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_468 levels=1:2 keys_zone=cache_468:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9048; + location / { + proxy_cache cache_468; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_469 levels=1:2 keys_zone=cache_469:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9049; + location / { + proxy_cache cache_469; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_470 levels=1:2 keys_zone=cache_470:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9050; + location / { + proxy_cache cache_470; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_471 levels=1:2 keys_zone=cache_471:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9051; + location / { + proxy_cache cache_471; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_472 levels=1:2 keys_zone=cache_472:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9052; + location / { + proxy_cache cache_472; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_473 levels=1:2 keys_zone=cache_473:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9053; + location / { + proxy_cache cache_473; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_474 levels=1:2 keys_zone=cache_474:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9054; + location / { + proxy_cache cache_474; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_475 levels=1:2 keys_zone=cache_475:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9055; + location / { + proxy_cache cache_475; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_476 levels=1:2 keys_zone=cache_476:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9056; + location / { + proxy_cache cache_476; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_477 levels=1:2 keys_zone=cache_477:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9057; + location / { + proxy_cache cache_477; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_478 levels=1:2 keys_zone=cache_478:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9058; + location / { + proxy_cache cache_478; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_479 levels=1:2 keys_zone=cache_479:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9059; + location / { + proxy_cache cache_479; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_480 levels=1:2 keys_zone=cache_480:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9060; + location / { + proxy_cache cache_480; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_481 levels=1:2 keys_zone=cache_481:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9061; + location / { + proxy_cache cache_481; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_482 levels=1:2 keys_zone=cache_482:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9062; + location / { + proxy_cache cache_482; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_483 levels=1:2 keys_zone=cache_483:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9063; + location / { + proxy_cache cache_483; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_484 levels=1:2 keys_zone=cache_484:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9064; + location / { + proxy_cache cache_484; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_485 levels=1:2 keys_zone=cache_485:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9065; + location / { + proxy_cache cache_485; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_486 levels=1:2 keys_zone=cache_486:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9066; + location / { + proxy_cache cache_486; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_487 levels=1:2 keys_zone=cache_487:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9067; + location / { + proxy_cache cache_487; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_488 levels=1:2 keys_zone=cache_488:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9068; + location / { + proxy_cache cache_488; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_489 levels=1:2 keys_zone=cache_489:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9069; + location / { + proxy_cache cache_489; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_490 levels=1:2 keys_zone=cache_490:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9070; + location / { + proxy_cache cache_490; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_491 levels=1:2 keys_zone=cache_491:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9071; + location / { + proxy_cache cache_491; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_492 levels=1:2 keys_zone=cache_492:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9072; + location / { + proxy_cache cache_492; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_493 levels=1:2 keys_zone=cache_493:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9073; + location / { + proxy_cache cache_493; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_494 levels=1:2 keys_zone=cache_494:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9074; + location / { + proxy_cache cache_494; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_495 levels=1:2 keys_zone=cache_495:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9075; + location / { + proxy_cache cache_495; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_496 levels=1:2 keys_zone=cache_496:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9076; + location / { + proxy_cache cache_496; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_497 levels=1:2 keys_zone=cache_497:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9077; + location / { + proxy_cache cache_497; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_498 levels=1:2 keys_zone=cache_498:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9078; + location / { + proxy_cache cache_498; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_499 levels=1:2 keys_zone=cache_499:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9079; + location / { + proxy_cache cache_499; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + proxy_cache_path /data/nginx/cache_500 levels=1:2 keys_zone=cache_500:10m max_size=10g + inactive=60m use_temp_path=off; + + server { + listen 127.0.0.1:9080; + location / { + proxy_cache cache_500; + proxy_pass http://www.example.com; + add_header X-Cache-Status $upstream_cache_status; + } + } + + include /etc/nginx/conf.d/*.conf; +} + diff --git a/cmd/exchange/testfiles/etc/nginx/conf.d/default.conf b/cmd/exchange/testfiles/etc/nginx/conf.d/default.conf new file mode 100644 index 000000000..1cbdde0c5 --- /dev/null +++ b/cmd/exchange/testfiles/etc/nginx/conf.d/default.conf @@ -0,0 +1,59 @@ +upstream workload { + server devenv-systest-workload-1:6001; + server devenv-systest-workload-1:6002; + server devenv-systest-workload-1:6003; + keepalive 6; + zone workload 64k; +} +upstream workload_down { + server 127.0.0.1:6000 down; + zone workload_down 64k; +} + +server { + listen 8080; + + # - add response header + add_header "x-datapath-instance" "f4016d9c7b61" always; + + default_type text/plain; + + location / { + status_zone systest_loc_200; + return 200 "hello from datapath f4016d9c7b61\n"; + } + + location /2xx { + status_zone systest_loc_2xx; + return 200 "hello from datapath f4016d9c7b61\n"; + } + + location /4xx { + status_zone systest_loc_4xx; + return 400 "fake 400 from datapath f4016d9c7b61\n"; + } + + location /5xx { + status_zone systest_loc_5xx; + return 500 "fake 500 from datapath f4016d9c7b61\n"; + } + + location /workload/ { + status_zone systest_loc_workload; + proxy_pass http://workload/; + } + + location /workload-down/ { + status_zone systest_loc_workload_down; + proxy_pass https://workload_down/; + proxy_ssl_certificate /etc/nginx/client.pem; + proxy_ssl_certificate_key /etc/nginx/client.key; + + # - enable keepalive between nginx and upstreams + proxy_http_version 1.1; + proxy_set_header "Connection" ""; + + # - add request header + proxy_set_header "x-datapath-instance" "f4016d9c7b61"; + } +} diff --git a/cmd/exchange/testfiles/etc/nginx/conf.d/plus_api.conf b/cmd/exchange/testfiles/etc/nginx/conf.d/plus_api.conf new file mode 100644 index 000000000..9361a32ab --- /dev/null +++ b/cmd/exchange/testfiles/etc/nginx/conf.d/plus_api.conf @@ -0,0 +1,8 @@ +server { + listen 127.0.0.1:8090; + location /api/ { + api write=on; + allow 127.0.0.1; + deny all; + } +} diff --git a/cmd/exchange/testfiles/etc/nginx/mime.types b/cmd/exchange/testfiles/etc/nginx/mime.types new file mode 100644 index 000000000..1c00d701a --- /dev/null +++ b/cmd/exchange/testfiles/etc/nginx/mime.types @@ -0,0 +1,99 @@ + +types { + text/html html htm shtml; + text/css css; + text/xml xml; + image/gif gif; + image/jpeg jpeg jpg; + application/javascript js; + application/atom+xml atom; + application/rss+xml rss; + + text/mathml mml; + text/plain txt; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/x-component htc; + + image/avif avif; + image/png png; + image/svg+xml svg svgz; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/webp webp; + image/x-icon ico; + image/x-jng jng; + image/x-ms-bmp bmp; + + font/woff woff; + font/woff2 woff2; + + application/java-archive jar war ear; + application/json json; + application/mac-binhex40 hqx; + application/msword doc; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.apple.mpegurl m3u8; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/vnd.ms-excel xls; + application/vnd.ms-fontobject eot; + application/vnd.ms-powerpoint ppt; + application/vnd.oasis.opendocument.graphics odg; + application/vnd.oasis.opendocument.presentation odp; + application/vnd.oasis.opendocument.spreadsheet ods; + application/vnd.oasis.opendocument.text odt; + application/vnd.openxmlformats-officedocument.presentationml.presentation + pptx; + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + xlsx; + application/vnd.openxmlformats-officedocument.wordprocessingml.document + docx; + application/vnd.wap.wmlc wmlc; + application/wasm wasm; + application/x-7z-compressed 7z; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/xhtml+xml xhtml; + application/xspf+xml xspf; + application/zip zip; + + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream iso img; + application/octet-stream msi msp msm; + + audio/midi mid midi kar; + audio/mpeg mp3; + audio/ogg ogg; + audio/x-m4a m4a; + audio/x-realaudio ra; + + video/3gpp 3gpp 3gp; + video/mp2t ts; + video/mp4 mp4; + video/mpeg mpeg mpg; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-m4v m4v; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; +} diff --git a/cmd/exchange/testfiles/etc/nginx/nginx.conf b/cmd/exchange/testfiles/etc/nginx/nginx.conf new file mode 100644 index 000000000..61604dd4e --- /dev/null +++ b/cmd/exchange/testfiles/etc/nginx/nginx.conf @@ -0,0 +1,28 @@ +# Default nginx.conf for datapath agent instances. +# Ensure there is just 1 worker process for predictable scaling. + +user nginx; +worker_processes 1; + +error_log /var/log/nginx/error.log notice; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + keepalive_timeout 65; + + include /etc/nginx/conf.d/*.conf; +} diff --git a/docs/proto/protos.md b/docs/proto/protos.md index a5e5e3380..2a467a40e 100644 --- a/docs/proto/protos.md +++ b/docs/proto/protos.md @@ -39,7 +39,11 @@ - [CreateConnectionRequest](#mpi-v1-CreateConnectionRequest) - [CreateConnectionResponse](#mpi-v1-CreateConnectionResponse) - [DataPlaneResponse](#mpi-v1-DataPlaneResponse) + - [Exchange](#mpi-v1-Exchange) + - [FileResponse](#mpi-v1-FileResponse) + - [FileResponse.File](#mpi-v1-FileResponse-File) - [FileServer](#mpi-v1-FileServer) + - [FilesRequest](#mpi-v1-FilesRequest) - [HealthRequest](#mpi-v1-HealthRequest) - [HostInfo](#mpi-v1-HostInfo) - [Instance](#mpi-v1-Instance) @@ -53,9 +57,13 @@ - [MetricsServer](#mpi-v1-MetricsServer) - [NGINXPlusRuntimeInfo](#mpi-v1-NGINXPlusRuntimeInfo) - [NGINXRuntimeInfo](#mpi-v1-NGINXRuntimeInfo) + - [OverviewRequest](#mpi-v1-OverviewRequest) - [ReleaseInfo](#mpi-v1-ReleaseInfo) - [Resource](#mpi-v1-Resource) - [StatusRequest](#mpi-v1-StatusRequest) + - [SubscribeExchangeMessage](#mpi-v1-SubscribeExchangeMessage) + - [SubscribeExchangeRequest](#mpi-v1-SubscribeExchangeRequest) + - [SubscribeExchangeResponse](#mpi-v1-SubscribeExchangeResponse) - [UpdateDataPlaneHealthRequest](#mpi-v1-UpdateDataPlaneHealthRequest) - [UpdateDataPlaneHealthResponse](#mpi-v1-UpdateDataPlaneHealthResponse) - [UpdateDataPlaneStatusRequest](#mpi-v1-UpdateDataPlaneStatusRequest) @@ -297,8 +305,10 @@ Represents the update file request | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | +| message_meta | [MessageMeta](#mpi-v1-MessageMeta) | | meta should be the same through out the request | | file | [File](#mpi-v1-File) | | The file requested to be updated | | contents | [FileContents](#mpi-v1-FileContents) | | The contents of a file | +| file_seq | [int32](#int32) | | seq of file base on the outstanding request, counting down, zero indicates no more file to transfer | @@ -339,7 +349,13 @@ Represents a the payload for an overview an update of files for a particular co ### UpdateOverviewResponse -Represents a the response from an UpdateOverviewRequest - intentionally left empty +Represents a the response from an UpdateOverviewRequest. Currently this returns a list of FileMeta in which the +management plane is requesting. It's up to the client to send it to the management plane. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| files | [FileMeta](#mpi-v1-FileMeta) | repeated | | @@ -535,6 +551,58 @@ Reports the status of an associated command. This may be in response to a Manage | ----- | ---- | ----- | ----------- | | message_meta | [MessageMeta](#mpi-v1-MessageMeta) | | Meta-information associated with a message | | command_response | [CommandResponse](#mpi-v1-CommandResponse) | | The command response with the associated request | +| request | [FilesRequest](#mpi-v1-FilesRequest) | | | +| response | [FileResponse](#mpi-v1-FileResponse) | | | + + + + + + + + +### Exchange + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| meta | [MessageMeta](#mpi-v1-MessageMeta) | | Meta-information associated with a message | +| request | [FilesRequest](#mpi-v1-FilesRequest) | | | +| response | [FileResponse](#mpi-v1-FileResponse) | | | +| overview_req | [OverviewRequest](#mpi-v1-OverviewRequest) | | | +| overview | [FileOverview](#mpi-v1-FileOverview) | | | + + + + + + + + +### FileResponse +Represents the response to a get file request + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| file | [FileResponse.File](#mpi-v1-FileResponse-File) | | | + + + + + + + + +### FileResponse.File + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| meta | [FileMeta](#mpi-v1-FileMeta) | | | +| file | [FileContents](#mpi-v1-FileContents) | | | @@ -551,6 +619,21 @@ The file settings associated with file server for configurations + + +### FilesRequest + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| files | [FileMeta](#mpi-v1-FileMeta) | repeated | | + + + + + + ### HealthRequest @@ -760,6 +843,16 @@ A set of runtime NGINX OSS settings + + +### OverviewRequest + + + + + + + ### ReleaseInfo @@ -807,6 +900,56 @@ Additional information associated with a StatusRequest + + +### SubscribeExchangeMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| request | [FilesRequest](#mpi-v1-FilesRequest) | | | +| response | [FileResponse](#mpi-v1-FileResponse) | | | +| config_apply_request | [ConfigApplyRequest](#mpi-v1-ConfigApplyRequest) | | if overview is missing, triggers a rpc GetOverview(ConfigVersion) first | +| config_upload_request | [ConfigUploadRequest](#mpi-v1-ConfigUploadRequest) | | triggers a series of rpc UpdateFile(File) for that instances | + + + + + + + + +### SubscribeExchangeRequest + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| meta | [MessageMeta](#mpi-v1-MessageMeta) | | Meta-information associated with a message | +| message | [SubscribeExchangeMessage](#mpi-v1-SubscribeExchangeMessage) | | | + + + + + + + + +### SubscribeExchangeResponse + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| meta | [MessageMeta](#mpi-v1-MessageMeta) | | Meta-information associated with a message | +| message | [SubscribeExchangeMessage](#mpi-v1-SubscribeExchangeMessage) | | | + + + + + + ### UpdateDataPlaneHealthRequest @@ -913,6 +1056,7 @@ Messages sent but not yet Ack’d must be kept in an “in-flight” buffer as t | UpdateDataPlaneStatus | [UpdateDataPlaneStatusRequest](#mpi-v1-UpdateDataPlaneStatusRequest) | [UpdateDataPlaneStatusResponse](#mpi-v1-UpdateDataPlaneStatusResponse) | Reports on instances and their configurations | | UpdateDataPlaneHealth | [UpdateDataPlaneHealthRequest](#mpi-v1-UpdateDataPlaneHealthRequest) | [UpdateDataPlaneHealthResponse](#mpi-v1-UpdateDataPlaneHealthResponse) | Reports on instance health | | Subscribe | [DataPlaneResponse](#mpi-v1-DataPlaneResponse) stream | [ManagementPlaneRequest](#mpi-v1-ManagementPlaneRequest) stream | A decoupled communication mechanism between the data plane and management plane. buf:lint:ignore RPC_RESPONSE_STANDARD_NAME buf:lint:ignore RPC_REQUEST_STANDARD_NAME | +| FileExchange | [Exchange](#mpi-v1-Exchange) stream | [Exchange](#mpi-v1-Exchange) stream | | diff --git a/internal/grpc/credentials.go b/internal/grpc/credentials.go index d2acec652..ab0ae33c3 100644 --- a/internal/grpc/credentials.go +++ b/internal/grpc/credentials.go @@ -34,5 +34,5 @@ func (t *PerRPCCredentials) GetRequestMetadata(ctx context.Context, uri ...strin // RequireTransportSecurity indicates whether the credentials requires transport security. func (t *PerRPCCredentials) RequireTransportSecurity() bool { - return true + return false } diff --git a/pkg/collections/hash.go b/pkg/collections/hash.go new file mode 100644 index 000000000..3ac0c7c04 --- /dev/null +++ b/pkg/collections/hash.go @@ -0,0 +1,21 @@ +/* + * Copyright 2024 F5, Inc. All rights reserved. + * + * No part of the software may be reproduced or transmitted in any + * form or by any means, electronic or mechanical, for any purpose, + * without express written permission of F5 Networks, Inc. + * + */ + +package collections + +import ( + "crypto/sha512" + "encoding/hex" +) + +// Hash the provided data using sha512. This is a consistent hash. +func Hash(data []byte) string { + b := sha512.Sum512_224(data) + return hex.EncodeToString(b[:]) +} diff --git a/pkg/grpc/messenger/handler.go b/pkg/grpc/messenger/handler.go new file mode 100644 index 000000000..cfafb7c4a --- /dev/null +++ b/pkg/grpc/messenger/handler.go @@ -0,0 +1,164 @@ +/* + * Copyright 2023 F5, Inc. All rights reserved. + * + * No part of the software may be reproduced or transmitted in any + * form or by any means, electronic or mechanical, for any purpose, + * without express written permission of F5 Networks, Inc. + */ + +// Package messenger provides generic message handling abstractions for gRPC streams. +package messenger + +import ( + "context" + "errors" + "fmt" + "sync" +) + +type Message[T any] struct { + Msg *T +} + +// Handler keep track of incoming/outgoing gRPC messages. The wrapper Message can be used by both message going to or +// coming from the handler, outgoing to the remote (nginx-agent) or incoming from the remote (nginx-agent) respectively. +type Handler[In, Out any] struct { + incoming chan *Message[In] // incoming to handler (-> handler) , send using the sender + outgoing chan *Message[Out] // outgoing from handler ( <- handler ), receive from receiver + error chan error // error from receive + send Sender[In] + receiver Receiver[Out] +} + +type Receiver[Out any] interface { + Recv() (*Out, error) +} + +type Sender[In any] interface { + Send(*In) error +} + +type SendReceiver[In, Out any] interface { + Sender[In] + Receiver[Out] +} + +type SendReceiverInt interface { + SendReceiver[int, int] +} + +func New[In, Out any](buffSize int, sr SendReceiver[In, Out]) *Handler[In, Out] { + return &Handler[In, Out]{ + incoming: make(chan *Message[In], buffSize), + outgoing: make(chan *Message[Out], buffSize), + error: make(chan error), + send: sr, + receiver: sr, + } +} + +// Run starts up the handlers. We listen on the receiver, and incoming chan. Assume we are running inside a goroutine. +// Presumably the SendReceiver is a message specific gRPC stream, like: +// - https://github.com/nginx/agent/blob/main/sdk/proto/command_svc.pb.go#L88 +// The provided context should be from the underlying gRPC stream. +// For references: +// - https://pkg.go.dev/google.golang.org/grpc#ClientStream +// - https://pkg.go.dev/google.golang.org/grpc#ServerStream +// +// RecvMsg blocks until it receives a message into m or the stream is +// done. It returns io.EOF when the stream completes successfully. On +// any other error, the stream is aborted and the error contains the RPC +// status. +// SendMsg blocks until: +// - There is sufficient flow control to schedule m with the transport, or +// - The stream is done, or +// - The stream breaks. +// +// SendMsg does not wait until the message is received by the server. An +// untimely stream closure may result in lost messages. To ensure delivery, +// users should ensure the RPC completed successfully using RecvMsg. +// +// It is safe to have a goroutine calling SendMsg and another goroutine +// calling RecvMsg on the same stream at the same time, but it is not safe +// to call SendMsg on the same stream in different goroutines. It is also +// not safe to call CloseSend concurrently with SendMsg. +func (h *Handler[In, Out]) Run(ctx context.Context, wg *sync.WaitGroup) { + defer wg.Done() + + wg.Add(1) + go h.handleRecv(ctx, wg) + h.handleSend(ctx, wg) +} + +// Send a message, will return error if the context is Done. Can block if the incoming chan is full, use context +// for control. +func (h *Handler[In, Out]) Send(ctx context.Context, msg *In) error { + select { + case <-ctx.Done(): + return ctx.Err() + case h.incoming <- &Message[In]{ + Msg: msg, + }: + } + return nil +} + +// handleSend handles outgoing to the sender. +func (h *Handler[In, Out]) handleSend(ctx context.Context, _ *sync.WaitGroup) { + for { + select { + case <-ctx.Done(): + return + case m := <-h.incoming: + err := h.send.Send(m.Msg) + if err != nil { + if errors.Is(err, context.Canceled) || errors.Is(ctx.Err(), context.Canceled) { + return + } + + h.error <- fmt.Errorf("failed to send message: %w", err) + return + } + } + } +} + +// Messages to receive message from the receiver. The Message chan may be closed if receiver is no longer available. +func (h *Handler[In, Out]) Messages() <-chan *Message[Out] { + return h.outgoing +} + +// Errors to receive error from the handler. +func (h *Handler[In, Out]) Errors() <-chan error { + return h.error +} + +// handleRecv handles the incoming from the receiver. +// Blocks until receiver.Recv returns. The result from the Recv is either going to Error or incoming: +func (h *Handler[In, Out]) handleRecv(ctx context.Context, wg *sync.WaitGroup) { + defer wg.Done() + for { + m, err := h.receiver.Recv() + if err != nil { + select { + case <-ctx.Done(): + return + case h.error <- fmt.Errorf("receive message: %w (end of stream)", err): + } + return + } + if m == nil { + // close the outgoing to signal no more message to be sent, caller should check for whether the + // chan is closed or not. + close(h.outgoing) + return + } + select { + case <-ctx.Done(): + return + case h.outgoing <- &Message[Out]{ + Msg: m, + }: + } + } +}