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,
+ }:
+ }
+ }
+}