diff --git a/Makefile.include b/Makefile.include index a1a4296ea22..65b4e17a6f4 100644 --- a/Makefile.include +++ b/Makefile.include @@ -54,9 +54,7 @@ gen-api: ## Generate PMM API api/user/v1 \ api/inventory/v1 \ api/management/v1 \ - api/management/v1/agent \ api/management/v1/service \ - api/management/v1/azure \ api/actions/v1 \ api/advisors/v1 \ api/alerting/v1 \ @@ -109,7 +107,6 @@ gen-api: ## Generate PMM API api/inventory/v1/json/v1.json \ api/management/v1/json/v1.json \ api/management/v1/service/json/service.json \ - api/management/v1/azure/json/azure.json \ api/actions/v1/json/v1.json \ api/alerting/v1/json/v1.json \ api/advisors/v1/json/v1.json \ @@ -151,7 +148,6 @@ clean: clean_swagger ## Remove generated files api/user/v1 \ api/inventory/v1 \ api/management/v1 \ - api/management/v1/azure \ api/management/v1/service \ api/actions/v1 \ api/alerting/v1 \ diff --git a/api/MIGRATION_TO_V3.md b/api/MIGRATION_TO_V3.md index 15094666593..d4cc03584c7 100644 --- a/api/MIGRATION_TO_V3.md +++ b/api/MIGRATION_TO_V3.md @@ -59,6 +59,8 @@ POST /v1/management/MySQL/Add POST /v1/management/services POST /v1/management/PostgreSQL/Add POST /v1/management/services ✅ POST /v1/management/ProxySQL/Add POST /v1/management/services ✅ POST /v1/management/RDS/Add POST /v1/management/services ✅ +POST /v1/management/AzureDatabase/Add POST /v1/management/services/azure ✅ +POST /v1/management/AzureDatabase/Discover POST /v1/management/services:discoverAzure ✅ POST /v1/management/RDS/Discover POST /v1/management/services:discoverRDS ✅ POST /v1/management/Service/Remove DELETE /v1/management/services/{service_id} ✅ NOTE: in addition, it accepts ?service_type= @@ -66,8 +68,8 @@ POST /v1/management/Service/Remove DELETE /v1/management/servic POST /v1/management/Agent/List GET /v1/management/agents POST /v1/management/Node/Get GET /v1/management/nodes/{node_id} ✅ POST /v1/management/Node/List GET /v1/management/nodes ✅ -POST /v1/management/AzureDatabase/Add POST /v1/management/services/azure -POST /v1/management/AzureDatabase/Discover POST /v1/management/services/azure:discover +POST /v1/management/AzureDatabase/Add POST /v1/management/services ✅ +POST /v1/management/AzureDatabase/Discover POST /v1/management/services:discoverAzure ✅ POST /v1/management/Service/List GET /v1/management/services ✅ **ActionsService** **ActionService** @@ -167,7 +169,7 @@ POST /v1/platform/ServerInfo GET /v1/platform/server POST /v1/platform/UserInfo GET /v1/platform/user // TODO: rename `period_start_from` to `start_from` and `period_start_to` to `start_to` - +// TODO: refactor the primitive types in alerting.proto ## The use of custom methods in RESTful API diff --git a/api/alerting/v1/alerting.pb.go b/api/alerting/v1/alerting.pb.go index 0b70a558e70..b4f9e82a1ab 100644 --- a/api/alerting/v1/alerting.pb.go +++ b/api/alerting/v1/alerting.pb.go @@ -347,7 +347,7 @@ type ParamDefinition struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Short human-readable parameter summary. Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` - // Parameter unit. + // Parameter unit. TODO: remove this parameter. Unit ParamUnit `protobuf:"varint,3,opt,name=unit,proto3,enum=alerting.v1.ParamUnit" json:"unit,omitempty"` // Parameter type. Type ParamType `protobuf:"varint,4,opt,name=type,proto3,enum=alerting.v1.ParamType" json:"type,omitempty"` diff --git a/api/alerting/v1/alerting.proto b/api/alerting/v1/alerting.proto index cb7252dcf78..a77bab014df 100644 --- a/api/alerting/v1/alerting.proto +++ b/api/alerting/v1/alerting.proto @@ -45,7 +45,7 @@ message ParamDefinition { string name = 1 [(validate.rules).string.min_len = 1]; // Short human-readable parameter summary. string summary = 2 [(validate.rules).string.min_len = 1]; - // Parameter unit. + // Parameter unit. TODO: remove this parameter. ParamUnit unit = 3; // Parameter type. ParamType type = 4; diff --git a/api/management/v1/azure/azure.pb.go b/api/management/v1/azure.pb.go similarity index 54% rename from api/management/v1/azure/azure.pb.go rename to api/management/v1/azure.pb.go index 8ab9aea4b13..5d17f44bbdf 100644 --- a/api/management/v1/azure/azure.pb.go +++ b/api/management/v1/azure.pb.go @@ -2,9 +2,9 @@ // versions: // protoc-gen-go v1.32.0 // protoc (unknown) -// source: management/v1/azure/azure.proto +// source: management/v1/azure.proto -package azurev1beta1 +package managementv1 import ( reflect "reflect" @@ -58,11 +58,11 @@ func (x DiscoverAzureDatabaseType) String() string { } func (DiscoverAzureDatabaseType) Descriptor() protoreflect.EnumDescriptor { - return file_management_v1_azure_azure_proto_enumTypes[0].Descriptor() + return file_management_v1_azure_proto_enumTypes[0].Descriptor() } func (DiscoverAzureDatabaseType) Type() protoreflect.EnumType { - return &file_management_v1_azure_azure_proto_enumTypes[0] + return &file_management_v1_azure_proto_enumTypes[0] } func (x DiscoverAzureDatabaseType) Number() protoreflect.EnumNumber { @@ -71,7 +71,7 @@ func (x DiscoverAzureDatabaseType) Number() protoreflect.EnumNumber { // Deprecated: Use DiscoverAzureDatabaseType.Descriptor instead. func (DiscoverAzureDatabaseType) EnumDescriptor() ([]byte, []int) { - return file_management_v1_azure_azure_proto_rawDescGZIP(), []int{0} + return file_management_v1_azure_proto_rawDescGZIP(), []int{0} } // DiscoverAzureDatabaseRequest discover azure databases request. @@ -93,7 +93,7 @@ type DiscoverAzureDatabaseRequest struct { func (x *DiscoverAzureDatabaseRequest) Reset() { *x = DiscoverAzureDatabaseRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_v1_azure_azure_proto_msgTypes[0] + mi := &file_management_v1_azure_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -106,7 +106,7 @@ func (x *DiscoverAzureDatabaseRequest) String() string { func (*DiscoverAzureDatabaseRequest) ProtoMessage() {} func (x *DiscoverAzureDatabaseRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_v1_azure_azure_proto_msgTypes[0] + mi := &file_management_v1_azure_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -119,7 +119,7 @@ func (x *DiscoverAzureDatabaseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DiscoverAzureDatabaseRequest.ProtoReflect.Descriptor instead. func (*DiscoverAzureDatabaseRequest) Descriptor() ([]byte, []int) { - return file_management_v1_azure_azure_proto_rawDescGZIP(), []int{0} + return file_management_v1_azure_proto_rawDescGZIP(), []int{0} } func (x *DiscoverAzureDatabaseRequest) GetAzureClientId() string { @@ -171,7 +171,7 @@ type DiscoverAzureDatabaseInstance struct { // Environment tag. Environment string `protobuf:"bytes,7,opt,name=environment,proto3" json:"environment,omitempty"` // Database type. - Type DiscoverAzureDatabaseType `protobuf:"varint,8,opt,name=type,proto3,enum=azure.v1beta1.DiscoverAzureDatabaseType" json:"type,omitempty"` + Type DiscoverAzureDatabaseType `protobuf:"varint,8,opt,name=type,proto3,enum=management.v1.DiscoverAzureDatabaseType" json:"type,omitempty"` // Azure database availability zone. Az string `protobuf:"bytes,9,opt,name=az,proto3" json:"az,omitempty"` // Represents a purchasable Stock Keeping Unit (SKU) under a product. @@ -182,7 +182,7 @@ type DiscoverAzureDatabaseInstance struct { func (x *DiscoverAzureDatabaseInstance) Reset() { *x = DiscoverAzureDatabaseInstance{} if protoimpl.UnsafeEnabled { - mi := &file_management_v1_azure_azure_proto_msgTypes[1] + mi := &file_management_v1_azure_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -195,7 +195,7 @@ func (x *DiscoverAzureDatabaseInstance) String() string { func (*DiscoverAzureDatabaseInstance) ProtoMessage() {} func (x *DiscoverAzureDatabaseInstance) ProtoReflect() protoreflect.Message { - mi := &file_management_v1_azure_azure_proto_msgTypes[1] + mi := &file_management_v1_azure_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -208,7 +208,7 @@ func (x *DiscoverAzureDatabaseInstance) ProtoReflect() protoreflect.Message { // Deprecated: Use DiscoverAzureDatabaseInstance.ProtoReflect.Descriptor instead. func (*DiscoverAzureDatabaseInstance) Descriptor() ([]byte, []int) { - return file_management_v1_azure_azure_proto_rawDescGZIP(), []int{1} + return file_management_v1_azure_proto_rawDescGZIP(), []int{1} } func (x *DiscoverAzureDatabaseInstance) GetInstanceId() string { @@ -293,7 +293,7 @@ type DiscoverAzureDatabaseResponse struct { func (x *DiscoverAzureDatabaseResponse) Reset() { *x = DiscoverAzureDatabaseResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_v1_azure_azure_proto_msgTypes[2] + mi := &file_management_v1_azure_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -306,7 +306,7 @@ func (x *DiscoverAzureDatabaseResponse) String() string { func (*DiscoverAzureDatabaseResponse) ProtoMessage() {} func (x *DiscoverAzureDatabaseResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_v1_azure_azure_proto_msgTypes[2] + mi := &file_management_v1_azure_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -319,7 +319,7 @@ func (x *DiscoverAzureDatabaseResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DiscoverAzureDatabaseResponse.ProtoReflect.Descriptor instead. func (*DiscoverAzureDatabaseResponse) Descriptor() ([]byte, []int) { - return file_management_v1_azure_azure_proto_rawDescGZIP(), []int{2} + return file_management_v1_azure_proto_rawDescGZIP(), []int{2} } func (x *DiscoverAzureDatabaseResponse) GetAzureDatabaseInstance() []*DiscoverAzureDatabaseInstance { @@ -386,13 +386,13 @@ type AddAzureDatabaseRequest struct { // Use negative value to disable them. TablestatsGroupTableLimit int32 `protobuf:"varint,24,opt,name=tablestats_group_table_limit,json=tablestatsGroupTableLimit,proto3" json:"tablestats_group_table_limit,omitempty"` // Azure database resource type (mysql, maria, postgres) - Type DiscoverAzureDatabaseType `protobuf:"varint,25,opt,name=type,proto3,enum=azure.v1beta1.DiscoverAzureDatabaseType" json:"type,omitempty"` + Type DiscoverAzureDatabaseType `protobuf:"varint,25,opt,name=type,proto3,enum=management.v1.DiscoverAzureDatabaseType" json:"type,omitempty"` } func (x *AddAzureDatabaseRequest) Reset() { *x = AddAzureDatabaseRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_v1_azure_azure_proto_msgTypes[3] + mi := &file_management_v1_azure_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -405,7 +405,7 @@ func (x *AddAzureDatabaseRequest) String() string { func (*AddAzureDatabaseRequest) ProtoMessage() {} func (x *AddAzureDatabaseRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_v1_azure_azure_proto_msgTypes[3] + mi := &file_management_v1_azure_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -418,7 +418,7 @@ func (x *AddAzureDatabaseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AddAzureDatabaseRequest.ProtoReflect.Descriptor instead. func (*AddAzureDatabaseRequest) Descriptor() ([]byte, []int) { - return file_management_v1_azure_azure_proto_rawDescGZIP(), []int{3} + return file_management_v1_azure_proto_rawDescGZIP(), []int{3} } func (x *AddAzureDatabaseRequest) GetRegion() string { @@ -605,7 +605,7 @@ type AddAzureDatabaseResponse struct { func (x *AddAzureDatabaseResponse) Reset() { *x = AddAzureDatabaseResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_v1_azure_azure_proto_msgTypes[4] + mi := &file_management_v1_azure_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -618,7 +618,7 @@ func (x *AddAzureDatabaseResponse) String() string { func (*AddAzureDatabaseResponse) ProtoMessage() {} func (x *AddAzureDatabaseResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_v1_azure_azure_proto_msgTypes[4] + mi := &file_management_v1_azure_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -631,195 +631,194 @@ func (x *AddAzureDatabaseResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AddAzureDatabaseResponse.ProtoReflect.Descriptor instead. func (*AddAzureDatabaseResponse) Descriptor() ([]byte, []int) { - return file_management_v1_azure_azure_proto_rawDescGZIP(), []int{4} -} - -var File_management_v1_azure_azure_proto protoreflect.FileDescriptor - -var file_management_v1_azure_azure_proto_rawDesc = []byte{ - 0x0a, 0x1f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, - 0x61, 0x7a, 0x75, 0x72, 0x65, 0x2f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x0d, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf6, 0x01, 0x0a, 0x1c, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x0f, 0x61, 0x7a, - 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x61, 0x7a, - 0x75, 0x72, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x13, 0x61, - 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x11, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x12, 0x2f, 0x0a, 0x0f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, - 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x54, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x15, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x13, 0x61, - 0x7a, 0x75, 0x72, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x22, 0xf2, 0x02, 0x0a, 0x1d, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, - 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 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, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, - 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x61, 0x7a, 0x75, 0x72, 0x65, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x61, 0x7a, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x61, 0x7a, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, - 0x64, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x22, 0x85, 0x01, 0x0a, 0x1d, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x17, 0x61, 0x7a, 0x75, - 0x72, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x7a, 0x75, - 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x15, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, - 0x96, 0x09, 0x0a, 0x17, 0x41, 0x64, 0x64, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, - 0x61, 0x7a, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x61, 0x7a, 0x12, 0x28, 0x0a, 0x0b, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, - 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, - 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x2f, 0x0a, 0x0f, 0x61, 0x7a, 0x75, 0x72, - 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x61, 0x7a, 0x75, 0x72, - 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x13, 0x61, 0x7a, 0x75, - 0x72, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x11, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x12, 0x2f, 0x0a, 0x0f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x15, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x13, 0x61, 0x7a, 0x75, - 0x72, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x39, 0x0a, 0x14, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x12, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x36, 0x0a, 0x17, 0x61, - 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x78, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x7a, - 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x45, 0x78, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x71, 0x61, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x03, 0x71, 0x61, 0x6e, 0x12, 0x5d, 0x0a, 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x61, - 0x7a, 0x75, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, + return file_management_v1_azure_proto_rawDescGZIP(), []int{4} +} + +var File_management_v1_azure_proto protoreflect.FileDescriptor + +var file_management_v1_azure_proto_rawDesc = []byte{ + 0x0a, 0x19, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, + 0x61, 0x7a, 0x75, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0xf6, 0x01, 0x0a, 0x1c, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x14, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x13, 0x73, 0x6b, 0x69, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6c, - 0x73, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x16, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0d, 0x74, 0x6c, 0x73, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x12, 0x34, 0x0a, 0x16, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x17, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x14, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x1c, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x19, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x74, 0x61, 0x74, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x1a, 0x0a, 0x18, 0x41, 0x64, 0x64, 0x41, - 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x9e, 0x01, 0x0a, 0x19, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x41, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x0f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x13, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x11, 0x61, 0x7a, 0x75, + 0x72, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x2f, + 0x0a, 0x0f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x0d, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x3b, 0x0a, 0x15, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x13, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xf2, 0x02, 0x0a, + 0x1d, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 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, + 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x30, 0x0a, 0x14, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, + 0x61, 0x7a, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, 0x75, 0x72, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x61, 0x7a, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x61, 0x7a, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x4d, 0x6f, 0x64, 0x65, + 0x6c, 0x22, 0x85, 0x01, 0x0a, 0x1d, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, + 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x17, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, 0x75, + 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x52, 0x15, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x96, 0x09, 0x0a, 0x17, 0x41, 0x64, + 0x64, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, + 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x61, 0x7a, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x61, 0x7a, 0x12, 0x28, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, + 0x21, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, + 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x12, 0x23, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x12, 0x2f, 0x0a, 0x0f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x13, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x11, 0x61, 0x7a, 0x75, 0x72, 0x65, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x2f, 0x0a, 0x0f, + 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, + 0x61, 0x7a, 0x75, 0x72, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, + 0x15, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x13, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x14, 0x61, 0x7a, + 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x12, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, + 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, + 0x03, 0x71, 0x61, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x71, 0x61, 0x6e, 0x12, + 0x5d, 0x0a, 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x32, + 0x0a, 0x15, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x73, + 0x6b, 0x69, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x03, 0x74, 0x6c, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6c, 0x73, 0x5f, 0x73, 0x6b, 0x69, 0x70, + 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x74, + 0x6c, 0x73, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x34, 0x0a, 0x16, + 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x64, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x1c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x74, 0x61, 0x74, 0x73, + 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x74, 0x61, 0x74, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x28, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x1a, 0x0a, 0x18, 0x41, 0x64, 0x64, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x9e, + 0x01, 0x0a, 0x19, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, 0x75, 0x72, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x28, + 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x5f, 0x44, + 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x44, 0x49, + 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x5f, 0x44, 0x41, 0x54, + 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, + 0x10, 0x01, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x41, 0x5a, 0x55, - 0x52, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x10, 0x01, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, - 0x41, 0x53, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, - 0x53, 0x51, 0x4c, 0x10, 0x02, 0x42, 0xb1, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x7a, - 0x75, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0a, 0x41, 0x7a, 0x75, - 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, - 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x3b, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, - 0x7a, 0x75, 0x72, 0x65, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x0d, 0x41, - 0x7a, 0x75, 0x72, 0x65, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x19, 0x41, - 0x7a, 0x75, 0x72, 0x65, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x41, 0x7a, 0x75, 0x72, 0x65, - 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x50, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x51, 0x4c, 0x10, 0x02, 0x42, + 0xab, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4d, 0x58, 0x58, + 0xaa, 0x02, 0x0d, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x31, + 0xca, 0x02, 0x0d, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5c, 0x56, 0x31, + 0xe2, 0x02, 0x19, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5c, 0x56, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_management_v1_azure_azure_proto_rawDescOnce sync.Once - file_management_v1_azure_azure_proto_rawDescData = file_management_v1_azure_azure_proto_rawDesc + file_management_v1_azure_proto_rawDescOnce sync.Once + file_management_v1_azure_proto_rawDescData = file_management_v1_azure_proto_rawDesc ) -func file_management_v1_azure_azure_proto_rawDescGZIP() []byte { - file_management_v1_azure_azure_proto_rawDescOnce.Do(func() { - file_management_v1_azure_azure_proto_rawDescData = protoimpl.X.CompressGZIP(file_management_v1_azure_azure_proto_rawDescData) +func file_management_v1_azure_proto_rawDescGZIP() []byte { + file_management_v1_azure_proto_rawDescOnce.Do(func() { + file_management_v1_azure_proto_rawDescData = protoimpl.X.CompressGZIP(file_management_v1_azure_proto_rawDescData) }) - return file_management_v1_azure_azure_proto_rawDescData + return file_management_v1_azure_proto_rawDescData } var ( - file_management_v1_azure_azure_proto_enumTypes = make([]protoimpl.EnumInfo, 1) - file_management_v1_azure_azure_proto_msgTypes = make([]protoimpl.MessageInfo, 6) - file_management_v1_azure_azure_proto_goTypes = []interface{}{ - (DiscoverAzureDatabaseType)(0), // 0: azure.v1beta1.DiscoverAzureDatabaseType - (*DiscoverAzureDatabaseRequest)(nil), // 1: azure.v1beta1.DiscoverAzureDatabaseRequest - (*DiscoverAzureDatabaseInstance)(nil), // 2: azure.v1beta1.DiscoverAzureDatabaseInstance - (*DiscoverAzureDatabaseResponse)(nil), // 3: azure.v1beta1.DiscoverAzureDatabaseResponse - (*AddAzureDatabaseRequest)(nil), // 4: azure.v1beta1.AddAzureDatabaseRequest - (*AddAzureDatabaseResponse)(nil), // 5: azure.v1beta1.AddAzureDatabaseResponse - nil, // 6: azure.v1beta1.AddAzureDatabaseRequest.CustomLabelsEntry + file_management_v1_azure_proto_enumTypes = make([]protoimpl.EnumInfo, 1) + file_management_v1_azure_proto_msgTypes = make([]protoimpl.MessageInfo, 6) + file_management_v1_azure_proto_goTypes = []interface{}{ + (DiscoverAzureDatabaseType)(0), // 0: management.v1.DiscoverAzureDatabaseType + (*DiscoverAzureDatabaseRequest)(nil), // 1: management.v1.DiscoverAzureDatabaseRequest + (*DiscoverAzureDatabaseInstance)(nil), // 2: management.v1.DiscoverAzureDatabaseInstance + (*DiscoverAzureDatabaseResponse)(nil), // 3: management.v1.DiscoverAzureDatabaseResponse + (*AddAzureDatabaseRequest)(nil), // 4: management.v1.AddAzureDatabaseRequest + (*AddAzureDatabaseResponse)(nil), // 5: management.v1.AddAzureDatabaseResponse + nil, // 6: management.v1.AddAzureDatabaseRequest.CustomLabelsEntry } ) -var file_management_v1_azure_azure_proto_depIdxs = []int32{ - 0, // 0: azure.v1beta1.DiscoverAzureDatabaseInstance.type:type_name -> azure.v1beta1.DiscoverAzureDatabaseType - 2, // 1: azure.v1beta1.DiscoverAzureDatabaseResponse.azure_database_instance:type_name -> azure.v1beta1.DiscoverAzureDatabaseInstance - 6, // 2: azure.v1beta1.AddAzureDatabaseRequest.custom_labels:type_name -> azure.v1beta1.AddAzureDatabaseRequest.CustomLabelsEntry - 0, // 3: azure.v1beta1.AddAzureDatabaseRequest.type:type_name -> azure.v1beta1.DiscoverAzureDatabaseType +var file_management_v1_azure_proto_depIdxs = []int32{ + 0, // 0: management.v1.DiscoverAzureDatabaseInstance.type:type_name -> management.v1.DiscoverAzureDatabaseType + 2, // 1: management.v1.DiscoverAzureDatabaseResponse.azure_database_instance:type_name -> management.v1.DiscoverAzureDatabaseInstance + 6, // 2: management.v1.AddAzureDatabaseRequest.custom_labels:type_name -> management.v1.AddAzureDatabaseRequest.CustomLabelsEntry + 0, // 3: management.v1.AddAzureDatabaseRequest.type:type_name -> management.v1.DiscoverAzureDatabaseType 4, // [4:4] is the sub-list for method output_type 4, // [4:4] is the sub-list for method input_type 4, // [4:4] is the sub-list for extension type_name @@ -827,13 +826,13 @@ var file_management_v1_azure_azure_proto_depIdxs = []int32{ 0, // [0:4] is the sub-list for field type_name } -func init() { file_management_v1_azure_azure_proto_init() } -func file_management_v1_azure_azure_proto_init() { - if File_management_v1_azure_azure_proto != nil { +func init() { file_management_v1_azure_proto_init() } +func file_management_v1_azure_proto_init() { + if File_management_v1_azure_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_management_v1_azure_azure_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_management_v1_azure_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DiscoverAzureDatabaseRequest); i { case 0: return &v.state @@ -845,7 +844,7 @@ func file_management_v1_azure_azure_proto_init() { return nil } } - file_management_v1_azure_azure_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_management_v1_azure_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DiscoverAzureDatabaseInstance); i { case 0: return &v.state @@ -857,7 +856,7 @@ func file_management_v1_azure_azure_proto_init() { return nil } } - file_management_v1_azure_azure_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_management_v1_azure_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DiscoverAzureDatabaseResponse); i { case 0: return &v.state @@ -869,7 +868,7 @@ func file_management_v1_azure_azure_proto_init() { return nil } } - file_management_v1_azure_azure_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_management_v1_azure_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddAzureDatabaseRequest); i { case 0: return &v.state @@ -881,7 +880,7 @@ func file_management_v1_azure_azure_proto_init() { return nil } } - file_management_v1_azure_azure_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_management_v1_azure_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddAzureDatabaseResponse); i { case 0: return &v.state @@ -898,19 +897,19 @@ func file_management_v1_azure_azure_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_management_v1_azure_azure_proto_rawDesc, + RawDescriptor: file_management_v1_azure_proto_rawDesc, NumEnums: 1, NumMessages: 6, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_management_v1_azure_azure_proto_goTypes, - DependencyIndexes: file_management_v1_azure_azure_proto_depIdxs, - EnumInfos: file_management_v1_azure_azure_proto_enumTypes, - MessageInfos: file_management_v1_azure_azure_proto_msgTypes, + GoTypes: file_management_v1_azure_proto_goTypes, + DependencyIndexes: file_management_v1_azure_proto_depIdxs, + EnumInfos: file_management_v1_azure_proto_enumTypes, + MessageInfos: file_management_v1_azure_proto_msgTypes, }.Build() - File_management_v1_azure_azure_proto = out.File - file_management_v1_azure_azure_proto_rawDesc = nil - file_management_v1_azure_azure_proto_goTypes = nil - file_management_v1_azure_azure_proto_depIdxs = nil + File_management_v1_azure_proto = out.File + file_management_v1_azure_proto_rawDesc = nil + file_management_v1_azure_proto_goTypes = nil + file_management_v1_azure_proto_depIdxs = nil } diff --git a/api/management/v1/azure/azure.pb.validate.go b/api/management/v1/azure.pb.validate.go similarity index 99% rename from api/management/v1/azure/azure.pb.validate.go rename to api/management/v1/azure.pb.validate.go index 0cb23c1c6cb..4e01f41eb7d 100644 --- a/api/management/v1/azure/azure.pb.validate.go +++ b/api/management/v1/azure.pb.validate.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. -// source: management/v1/azure/azure.proto +// source: management/v1/azure.proto -package azurev1beta1 +package managementv1 import ( "bytes" diff --git a/api/management/v1/azure/azure.proto b/api/management/v1/azure.proto similarity index 99% rename from api/management/v1/azure/azure.proto rename to api/management/v1/azure.proto index c1617d1e725..b99503aa2ec 100644 --- a/api/management/v1/azure/azure.proto +++ b/api/management/v1/azure.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -package azure.v1beta1; +package management.v1; import "validate/validate.proto"; diff --git a/api/management/v1/azure/json/azure.json b/api/management/v1/azure/json/azure.json deleted file mode 100644 index 3fbf5fa96c5..00000000000 --- a/api/management/v1/azure/json/azure.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "schemes": [ - "https", - "http" - ], - "swagger": "2.0", - "info": { - "title": "PMM Azure API", - "version": "v1beta1" - }, - "paths": {} -} \ No newline at end of file diff --git a/api/management/v1/azure/json/header.json b/api/management/v1/azure/json/header.json deleted file mode 100644 index 66ecfbdecce..00000000000 --- a/api/management/v1/azure/json/header.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "PMM Azure API", - "version": "v1beta1" - }, - "schemes": [ - "https", - "http" - ] -} diff --git a/api/management/v1/service/json/client/management_v1_beta1_service/add_azure_database_parameters.go b/api/management/v1/json/client/management_service/add_azure_database_parameters.go similarity index 99% rename from api/management/v1/service/json/client/management_v1_beta1_service/add_azure_database_parameters.go rename to api/management/v1/json/client/management_service/add_azure_database_parameters.go index 6217ea49d42..b9e1d96ff02 100644 --- a/api/management/v1/service/json/client/management_v1_beta1_service/add_azure_database_parameters.go +++ b/api/management/v1/json/client/management_service/add_azure_database_parameters.go @@ -1,6 +1,6 @@ // Code generated by go-swagger; DO NOT EDIT. -package management_v1_beta1_service +package management_service // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command diff --git a/api/management/v1/service/json/client/management_v1_beta1_service/add_azure_database_responses.go b/api/management/v1/json/client/management_service/add_azure_database_responses.go similarity index 97% rename from api/management/v1/service/json/client/management_v1_beta1_service/add_azure_database_responses.go rename to api/management/v1/json/client/management_service/add_azure_database_responses.go index 4cac66a7e17..3d9e615c834 100644 --- a/api/management/v1/service/json/client/management_v1_beta1_service/add_azure_database_responses.go +++ b/api/management/v1/json/client/management_service/add_azure_database_responses.go @@ -1,6 +1,6 @@ // Code generated by go-swagger; DO NOT EDIT. -package management_v1_beta1_service +package management_service // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command @@ -60,7 +60,7 @@ type AddAzureDatabaseOK struct { } func (o *AddAzureDatabaseOK) Error() string { - return fmt.Sprintf("[POST /v1/management/AzureDatabase/Add][%d] addAzureDatabaseOk %+v", 200, o.Payload) + return fmt.Sprintf("[POST /v1/management/services/azure][%d] addAzureDatabaseOk %+v", 200, o.Payload) } func (o *AddAzureDatabaseOK) GetPayload() interface{} { @@ -100,7 +100,7 @@ func (o *AddAzureDatabaseDefault) Code() int { } func (o *AddAzureDatabaseDefault) Error() string { - return fmt.Sprintf("[POST /v1/management/AzureDatabase/Add][%d] AddAzureDatabase default %+v", o._statusCode, o.Payload) + return fmt.Sprintf("[POST /v1/management/services/azure][%d] AddAzureDatabase default %+v", o._statusCode, o.Payload) } func (o *AddAzureDatabaseDefault) GetPayload() *AddAzureDatabaseDefaultBody { diff --git a/api/management/v1/service/json/client/management_v1_beta1_service/discover_azure_database_parameters.go b/api/management/v1/json/client/management_service/discover_azure_database_parameters.go similarity index 99% rename from api/management/v1/service/json/client/management_v1_beta1_service/discover_azure_database_parameters.go rename to api/management/v1/json/client/management_service/discover_azure_database_parameters.go index a42ee90603f..f5f9f75a926 100644 --- a/api/management/v1/service/json/client/management_v1_beta1_service/discover_azure_database_parameters.go +++ b/api/management/v1/json/client/management_service/discover_azure_database_parameters.go @@ -1,6 +1,6 @@ // Code generated by go-swagger; DO NOT EDIT. -package management_v1_beta1_service +package management_service // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command diff --git a/api/management/v1/service/json/client/management_v1_beta1_service/discover_azure_database_responses.go b/api/management/v1/json/client/management_service/discover_azure_database_responses.go similarity index 99% rename from api/management/v1/service/json/client/management_v1_beta1_service/discover_azure_database_responses.go rename to api/management/v1/json/client/management_service/discover_azure_database_responses.go index a09bfb842a7..fe848189ea2 100644 --- a/api/management/v1/service/json/client/management_v1_beta1_service/discover_azure_database_responses.go +++ b/api/management/v1/json/client/management_service/discover_azure_database_responses.go @@ -1,6 +1,6 @@ // Code generated by go-swagger; DO NOT EDIT. -package management_v1_beta1_service +package management_service // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command @@ -60,7 +60,7 @@ type DiscoverAzureDatabaseOK struct { } func (o *DiscoverAzureDatabaseOK) Error() string { - return fmt.Sprintf("[POST /v1/management/AzureDatabase/Discover][%d] discoverAzureDatabaseOk %+v", 200, o.Payload) + return fmt.Sprintf("[POST /v1/management/services:discoverAzure][%d] discoverAzureDatabaseOk %+v", 200, o.Payload) } func (o *DiscoverAzureDatabaseOK) GetPayload() *DiscoverAzureDatabaseOKBody { @@ -102,7 +102,7 @@ func (o *DiscoverAzureDatabaseDefault) Code() int { } func (o *DiscoverAzureDatabaseDefault) Error() string { - return fmt.Sprintf("[POST /v1/management/AzureDatabase/Discover][%d] DiscoverAzureDatabase default %+v", o._statusCode, o.Payload) + return fmt.Sprintf("[POST /v1/management/services:discoverAzure][%d] DiscoverAzureDatabase default %+v", o._statusCode, o.Payload) } func (o *DiscoverAzureDatabaseDefault) GetPayload() *DiscoverAzureDatabaseDefaultBody { diff --git a/api/management/v1/json/client/management_service/list_services_parameters.go b/api/management/v1/json/client/management_service/list_services_parameters.go index fdaf9d0cb47..80363638efa 100644 --- a/api/management/v1/json/client/management_service/list_services_parameters.go +++ b/api/management/v1/json/client/management_service/list_services_parameters.go @@ -60,8 +60,25 @@ ListServicesParams contains all the parameters to send to the API endpoint Typically these are written to a http.Request. */ type ListServicesParams struct { - // Body. - Body ListServicesBody + /* ExternalGroup. + + Return only services in this external group. + */ + ExternalGroup *string + + /* NodeID. + + Return only Services running on that Node. + */ + NodeID *string + + /* ServiceType. + + Return only services filtered by service type. + + Default: "SERVICE_TYPE_UNSPECIFIED" + */ + ServiceType *string timeout time.Duration Context context.Context @@ -80,7 +97,16 @@ func (o *ListServicesParams) WithDefaults() *ListServicesParams { // // All values with no default are reset to their zero value. func (o *ListServicesParams) SetDefaults() { - // no default values defined for this parameter + serviceTypeDefault := string("SERVICE_TYPE_UNSPECIFIED") + + val := ListServicesParams{ + ServiceType: &serviceTypeDefault, + } + + val.timeout = o.timeout + val.Context = o.Context + val.HTTPClient = o.HTTPClient + *o = val } // WithTimeout adds the timeout to the list services params @@ -116,15 +142,37 @@ func (o *ListServicesParams) SetHTTPClient(client *http.Client) { o.HTTPClient = client } -// WithBody adds the body to the list services params -func (o *ListServicesParams) WithBody(body ListServicesBody) *ListServicesParams { - o.SetBody(body) +// WithExternalGroup adds the externalGroup to the list services params +func (o *ListServicesParams) WithExternalGroup(externalGroup *string) *ListServicesParams { + o.SetExternalGroup(externalGroup) + return o +} + +// SetExternalGroup adds the externalGroup to the list services params +func (o *ListServicesParams) SetExternalGroup(externalGroup *string) { + o.ExternalGroup = externalGroup +} + +// WithNodeID adds the nodeID to the list services params +func (o *ListServicesParams) WithNodeID(nodeID *string) *ListServicesParams { + o.SetNodeID(nodeID) return o } -// SetBody adds the body to the list services params -func (o *ListServicesParams) SetBody(body ListServicesBody) { - o.Body = body +// SetNodeID adds the nodeId to the list services params +func (o *ListServicesParams) SetNodeID(nodeID *string) { + o.NodeID = nodeID +} + +// WithServiceType adds the serviceType to the list services params +func (o *ListServicesParams) WithServiceType(serviceType *string) *ListServicesParams { + o.SetServiceType(serviceType) + return o +} + +// SetServiceType adds the serviceType to the list services params +func (o *ListServicesParams) SetServiceType(serviceType *string) { + o.ServiceType = serviceType } // WriteToRequest writes these params to a swagger request @@ -133,8 +181,53 @@ func (o *ListServicesParams) WriteToRequest(r runtime.ClientRequest, reg strfmt. return err } var res []error - if err := r.SetBodyParam(o.Body); err != nil { - return err + + if o.ExternalGroup != nil { + + // query param external_group + var qrExternalGroup string + + if o.ExternalGroup != nil { + qrExternalGroup = *o.ExternalGroup + } + qExternalGroup := qrExternalGroup + if qExternalGroup != "" { + if err := r.SetQueryParam("external_group", qExternalGroup); err != nil { + return err + } + } + } + + if o.NodeID != nil { + + // query param node_id + var qrNodeID string + + if o.NodeID != nil { + qrNodeID = *o.NodeID + } + qNodeID := qrNodeID + if qNodeID != "" { + if err := r.SetQueryParam("node_id", qNodeID); err != nil { + return err + } + } + } + + if o.ServiceType != nil { + + // query param service_type + var qrServiceType string + + if o.ServiceType != nil { + qrServiceType = *o.ServiceType + } + qServiceType := qrServiceType + if qServiceType != "" { + if err := r.SetQueryParam("service_type", qServiceType); err != nil { + return err + } + } } if len(res) > 0 { diff --git a/api/management/v1/json/client/management_service/list_services_responses.go b/api/management/v1/json/client/management_service/list_services_responses.go index 9e8d4937704..cbd59839665 100644 --- a/api/management/v1/json/client/management_service/list_services_responses.go +++ b/api/management/v1/json/client/management_service/list_services_responses.go @@ -60,7 +60,7 @@ type ListServicesOK struct { } func (o *ListServicesOK) Error() string { - return fmt.Sprintf("[POST /v1/management/Service/List][%d] listServicesOk %+v", 200, o.Payload) + return fmt.Sprintf("[GET /v1/management/services][%d] listServicesOk %+v", 200, o.Payload) } func (o *ListServicesOK) GetPayload() *ListServicesOKBody { @@ -102,7 +102,7 @@ func (o *ListServicesDefault) Code() int { } func (o *ListServicesDefault) Error() string { - return fmt.Sprintf("[POST /v1/management/Service/List][%d] ListServices default %+v", o._statusCode, o.Payload) + return fmt.Sprintf("[GET /v1/management/services][%d] ListServices default %+v", o._statusCode, o.Payload) } func (o *ListServicesDefault) GetPayload() *ListServicesDefaultBody { @@ -120,116 +120,6 @@ func (o *ListServicesDefault) readResponse(response runtime.ClientResponse, cons return nil } -/* -ListServicesBody list services body -swagger:model ListServicesBody -*/ -type ListServicesBody struct { - // Return only Services running on that Node. - NodeID string `json:"node_id,omitempty"` - - // ServiceType describes supported Service types. - // Enum: [SERVICE_TYPE_UNSPECIFIED SERVICE_TYPE_MYSQL_SERVICE SERVICE_TYPE_MONGODB_SERVICE SERVICE_TYPE_POSTGRESQL_SERVICE SERVICE_TYPE_PROXYSQL_SERVICE SERVICE_TYPE_HAPROXY_SERVICE SERVICE_TYPE_EXTERNAL_SERVICE] - ServiceType *string `json:"service_type,omitempty"` - - // Return only services in this external group. - ExternalGroup string `json:"external_group,omitempty"` -} - -// Validate validates this list services body -func (o *ListServicesBody) Validate(formats strfmt.Registry) error { - var res []error - - if err := o.validateServiceType(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -var listServicesBodyTypeServiceTypePropEnum []interface{} - -func init() { - var res []string - if err := json.Unmarshal([]byte(`["SERVICE_TYPE_UNSPECIFIED","SERVICE_TYPE_MYSQL_SERVICE","SERVICE_TYPE_MONGODB_SERVICE","SERVICE_TYPE_POSTGRESQL_SERVICE","SERVICE_TYPE_PROXYSQL_SERVICE","SERVICE_TYPE_HAPROXY_SERVICE","SERVICE_TYPE_EXTERNAL_SERVICE"]`), &res); err != nil { - panic(err) - } - for _, v := range res { - listServicesBodyTypeServiceTypePropEnum = append(listServicesBodyTypeServiceTypePropEnum, v) - } -} - -const ( - - // ListServicesBodyServiceTypeSERVICETYPEUNSPECIFIED captures enum value "SERVICE_TYPE_UNSPECIFIED" - ListServicesBodyServiceTypeSERVICETYPEUNSPECIFIED string = "SERVICE_TYPE_UNSPECIFIED" - - // ListServicesBodyServiceTypeSERVICETYPEMYSQLSERVICE captures enum value "SERVICE_TYPE_MYSQL_SERVICE" - ListServicesBodyServiceTypeSERVICETYPEMYSQLSERVICE string = "SERVICE_TYPE_MYSQL_SERVICE" - - // ListServicesBodyServiceTypeSERVICETYPEMONGODBSERVICE captures enum value "SERVICE_TYPE_MONGODB_SERVICE" - ListServicesBodyServiceTypeSERVICETYPEMONGODBSERVICE string = "SERVICE_TYPE_MONGODB_SERVICE" - - // ListServicesBodyServiceTypeSERVICETYPEPOSTGRESQLSERVICE captures enum value "SERVICE_TYPE_POSTGRESQL_SERVICE" - ListServicesBodyServiceTypeSERVICETYPEPOSTGRESQLSERVICE string = "SERVICE_TYPE_POSTGRESQL_SERVICE" - - // ListServicesBodyServiceTypeSERVICETYPEPROXYSQLSERVICE captures enum value "SERVICE_TYPE_PROXYSQL_SERVICE" - ListServicesBodyServiceTypeSERVICETYPEPROXYSQLSERVICE string = "SERVICE_TYPE_PROXYSQL_SERVICE" - - // ListServicesBodyServiceTypeSERVICETYPEHAPROXYSERVICE captures enum value "SERVICE_TYPE_HAPROXY_SERVICE" - ListServicesBodyServiceTypeSERVICETYPEHAPROXYSERVICE string = "SERVICE_TYPE_HAPROXY_SERVICE" - - // ListServicesBodyServiceTypeSERVICETYPEEXTERNALSERVICE captures enum value "SERVICE_TYPE_EXTERNAL_SERVICE" - ListServicesBodyServiceTypeSERVICETYPEEXTERNALSERVICE string = "SERVICE_TYPE_EXTERNAL_SERVICE" -) - -// prop value enum -func (o *ListServicesBody) validateServiceTypeEnum(path, location string, value string) error { - if err := validate.EnumCase(path, location, value, listServicesBodyTypeServiceTypePropEnum, true); err != nil { - return err - } - return nil -} - -func (o *ListServicesBody) validateServiceType(formats strfmt.Registry) error { - if swag.IsZero(o.ServiceType) { // not required - return nil - } - - // value enum - if err := o.validateServiceTypeEnum("body"+"."+"service_type", "body", *o.ServiceType); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this list services body based on context it is used -func (o *ListServicesBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (o *ListServicesBody) MarshalBinary() ([]byte, error) { - if o == nil { - return nil, nil - } - return swag.WriteJSON(o) -} - -// UnmarshalBinary interface implementation -func (o *ListServicesBody) UnmarshalBinary(b []byte) error { - var res ListServicesBody - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *o = res - return nil -} - /* ListServicesDefaultBody list services default body swagger:model ListServicesDefaultBody diff --git a/api/management/v1/json/client/management_service/management_service_client.go b/api/management/v1/json/client/management_service/management_service_client.go index f99a0cef713..8158a564ea9 100644 --- a/api/management/v1/json/client/management_service/management_service_client.go +++ b/api/management/v1/json/client/management_service/management_service_client.go @@ -30,8 +30,12 @@ type ClientOption func(*runtime.ClientOperation) type ClientService interface { AddAnnotation(params *AddAnnotationParams, opts ...ClientOption) (*AddAnnotationOK, error) + AddAzureDatabase(params *AddAzureDatabaseParams, opts ...ClientOption) (*AddAzureDatabaseOK, error) + AddService(params *AddServiceParams, opts ...ClientOption) (*AddServiceOK, error) + DiscoverAzureDatabase(params *DiscoverAzureDatabaseParams, opts ...ClientOption) (*DiscoverAzureDatabaseOK, error) + DiscoverRDS(params *DiscoverRDSParams, opts ...ClientOption) (*DiscoverRDSOK, error) GetNode(params *GetNodeParams, opts ...ClientOption) (*GetNodeOK, error) @@ -88,6 +92,45 @@ func (a *Client) AddAnnotation(params *AddAnnotationParams, opts ...ClientOption return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) } +/* +AddAzureDatabase adds azure database + +Adds an Azure Database instance. +*/ +func (a *Client) AddAzureDatabase(params *AddAzureDatabaseParams, opts ...ClientOption) (*AddAzureDatabaseOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewAddAzureDatabaseParams() + } + op := &runtime.ClientOperation{ + ID: "AddAzureDatabase", + Method: "POST", + PathPattern: "/v1/management/services/azure", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http", "https"}, + Params: params, + Reader: &AddAzureDatabaseReader{formats: a.formats}, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*AddAzureDatabaseOK) + if ok { + return success, nil + } + // unexpected success response + unexpectedSuccess := result.(*AddAzureDatabaseDefault) + return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) +} + /* AddService adds a service @@ -127,6 +170,45 @@ func (a *Client) AddService(params *AddServiceParams, opts ...ClientOption) (*Ad return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) } +/* +DiscoverAzureDatabase discovers azure database + +Discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances. +*/ +func (a *Client) DiscoverAzureDatabase(params *DiscoverAzureDatabaseParams, opts ...ClientOption) (*DiscoverAzureDatabaseOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewDiscoverAzureDatabaseParams() + } + op := &runtime.ClientOperation{ + ID: "DiscoverAzureDatabase", + Method: "POST", + PathPattern: "/v1/management/services:discoverAzure", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http", "https"}, + Params: params, + Reader: &DiscoverAzureDatabaseReader{formats: a.formats}, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*DiscoverAzureDatabaseOK) + if ok { + return success, nil + } + // unexpected success response + unexpectedSuccess := result.(*DiscoverAzureDatabaseDefault) + return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) +} + /* DiscoverRDS discovers RDS @@ -256,8 +338,8 @@ func (a *Client) ListServices(params *ListServicesParams, opts ...ClientOption) } op := &runtime.ClientOperation{ ID: "ListServices", - Method: "POST", - PathPattern: "/v1/management/Service/List", + Method: "GET", + PathPattern: "/v1/management/services", ProducesMediaTypes: []string{"application/json"}, ConsumesMediaTypes: []string{"application/json"}, Schemes: []string{"http", "https"}, diff --git a/api/management/v1/json/v1.json b/api/management/v1/json/v1.json index c60ed329a11..df6a7f2431b 100644 --- a/api/management/v1/json/v1.json +++ b/api/management/v1/json/v1.json @@ -15,50 +15,119 @@ "version": "v1" }, "paths": { - "/v1/management/Service/List": { + "/v1/management/annotations": { "post": { - "description": "Returns a filtered list of Services.", + "description": "Adds an annotation.", "tags": [ "ManagementService" ], - "summary": "List Services", - "operationId": "ListServices", + "summary": "Add an Annotation", + "operationId": "AddAnnotation", "parameters": [ { + "description": "AddAnnotationRequest is a params to add new annotation.", "name": "body", "in": "body", "required": true, "schema": { + "description": "AddAnnotationRequest is a params to add new annotation.", "type": "object", "properties": { - "external_group": { - "description": "Return only services in this external group.", + "node_name": { + "description": "Used for annotating a node.", "type": "string", "x-order": 2 }, - "node_id": { - "description": "Return only Services running on that Node.", + "service_names": { + "description": "Used for annotating services.", + "type": "array", + "items": { + "type": "string" + }, + "x-order": 3 + }, + "tags": { + "description": "Tags are used to filter annotations.", + "type": "array", + "items": { + "type": "string" + }, + "x-order": 1 + }, + "text": { + "description": "An annotation description. Required.", "type": "string", "x-order": 0 + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 }, - "service_type": { - "description": "ServiceType describes supported Service types.", + "message": { "type": "string", - "default": "SERVICE_TYPE_UNSPECIFIED", - "enum": [ - "SERVICE_TYPE_UNSPECIFIED", - "SERVICE_TYPE_MYSQL_SERVICE", - "SERVICE_TYPE_MONGODB_SERVICE", - "SERVICE_TYPE_POSTGRESQL_SERVICE", - "SERVICE_TYPE_PROXYSQL_SERVICE", - "SERVICE_TYPE_HAPROXY_SERVICE", - "SERVICE_TYPE_EXTERNAL_SERVICE" - ], "x-order": 1 } } } } + } + } + }, + "/v1/management/nodes": { + "get": { + "description": "Returns a filtered list of Nodes.", + "tags": [ + "ManagementService" + ], + "summary": "List Nodes", + "operationId": "ListNodes", + "parameters": [ + { + "enum": [ + "NODE_TYPE_UNSPECIFIED", + "NODE_TYPE_GENERIC_NODE", + "NODE_TYPE_CONTAINER_NODE", + "NODE_TYPE_REMOTE_NODE", + "NODE_TYPE_REMOTE_RDS_NODE", + "NODE_TYPE_REMOTE_AZURE_DATABASE_NODE" + ], + "type": "string", + "default": "NODE_TYPE_UNSPECIFIED", + "description": "Node type to be filtered out.", + "name": "node_type", + "in": "query" + } ], "responses": { "200": { @@ -66,332 +135,58 @@ "schema": { "type": "object", "properties": { - "services": { - "description": "List of Services.", + "nodes": { "type": "array", "items": { "type": "object", "properties": { "address": { - "description": "Access address (DNS name or IP).\nAddress (and port) or socket is required.", + "description": "Node address (DNS name or IP).", "type": "string", - "x-order": 11 + "x-order": 8 }, "agents": { - "description": "List of agents related to this service.", + "description": "List of agents related to this node.", "type": "array", "items": { "type": "object", "properties": { "agent_id": { - "description": "Unique agent identifier.", + "description": "Unique Agent identifier.", "type": "string", "x-order": 0 }, "agent_type": { "description": "Agent type.", "type": "string", - "x-order": 2 - }, - "aws_access_key": { - "description": "AWS Access Key.", - "type": "string", - "x-order": 3 - }, - "azure_options": { - "type": "object", - "properties": { - "client_id": { - "description": "Azure client ID.", - "type": "string", - "x-order": 0 - }, - "is_client_secret_set": { - "description": "True if Azure client secret is set.", - "type": "boolean", - "x-order": 1 - }, - "resource_group": { - "description": "Azure resource group.", - "type": "string", - "x-order": 2 - }, - "subscription_id": { - "description": "Azure subscription ID.", - "type": "string", - "x-order": 3 - }, - "tenant_id": { - "description": "Azure tenant ID.", - "type": "string", - "x-order": 4 - } - }, - "x-order": 5 - }, - "comments_parsing_disabled": { - "description": "True if query comments parsing is disabled.", - "type": "boolean", - "x-order": 25 - }, - "created_at": { - "description": "Creation timestamp.", - "type": "string", - "format": "date-time", - "x-order": 6 - }, - "custom_labels": { - "description": "Custom user-assigned labels.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 7 - }, - "disabled": { - "description": "Desired Agent status: enabled (false) or disabled (true).", - "type": "boolean", - "x-order": 8 - }, - "disabled_collectors": { - "description": "List of disabled collector names.", - "type": "array", - "items": { - "type": "string" - }, - "x-order": 9 - }, - "expose_exporter": { - "description": "True if an exporter agent is exposed on all host addresses.", - "type": "boolean", - "x-order": 39 - }, - "is_agent_password_set": { - "description": "True if the agent password is set.", - "type": "boolean", "x-order": 1 }, - "is_aws_secret_key_set": { - "description": "True if AWS Secret Key is set.", - "type": "boolean", - "x-order": 4 - }, "is_connected": { "description": "True if Agent is running and connected to pmm-managed.", "type": "boolean", - "x-order": 38 - }, - "is_password_set": { - "description": "True if password for connecting the agent to the database is set.", - "type": "boolean", - "x-order": 19 - }, - "listen_port": { - "description": "Listen port for scraping metrics.", - "type": "integer", - "format": "int64", - "x-order": 10 - }, - "log_level": { - "description": "Log level for exporter.", - "type": "string", - "x-order": 11 - }, - "max_query_length": { - "description": "Limit query length in QAN.", - "type": "integer", - "format": "int32", - "x-order": 12 - }, - "max_query_log_size": { - "description": "Limit query log size in QAN.", - "type": "string", - "format": "int64", - "x-order": 13 - }, - "metrics_path": { - "description": "Path under which metrics are exposed, used to generate URI.", - "type": "string", - "x-order": 14 + "x-order": 3 }, - "metrics_scheme": { - "description": "Scheme to generate URI to exporter metrics endpoints.", + "status": { + "description": "Actual Agent status.", "type": "string", - "x-order": 15 - }, - "mongo_db_options": { - "type": "object", - "properties": { - "authentication_database": { - "description": "MongoDB auth database.", - "type": "string", - "x-order": 3 - }, - "authentication_mechanism": { - "description": "MongoDB auth mechanism.", - "type": "string", - "x-order": 2 - }, - "collections_limit": { - "description": "MongoDB collections limit.", - "type": "integer", - "format": "int32", - "x-order": 5 - }, - "enable_all_collectors": { - "description": "True if all collectors are enabled.", - "type": "boolean", - "x-order": 6 - }, - "is_tls_certificate_key_file_password_set": { - "description": "True if TLS certificate file password is set.", - "type": "boolean", - "x-order": 1 - }, - "is_tls_certificate_key_set": { - "description": "True if TLS certificate is set.", - "type": "boolean", - "x-order": 0 - }, - "stats_collections": { - "description": "MongoDB stats collections.", - "type": "array", - "items": { - "type": "string" - }, - "x-order": 4 - } - }, - "x-order": 16 - }, - "mysql_options": { - "type": "object", - "properties": { - "is_tls_key_set": { - "description": "True if TLS key is set.", - "type": "boolean", - "x-order": 0 - } - }, - "x-order": 17 - }, - "node_id": { - "description": "A unique node identifier.", - "type": "string", - "x-order": 18 - }, - "pmm_agent_id": { - "description": "The pmm-agent identifier.", - "type": "string", - "x-order": 20 - }, - "postgresql_options": { - "type": "object", - "properties": { - "auto_discovery_limit": { - "description": "Limit of databases for auto-discovery.", - "type": "integer", - "format": "int32", - "x-order": 1 - }, - "is_ssl_key_set": { - "description": "True if TLS key is set.", - "type": "boolean", - "x-order": 0 - }, - "max_exporter_connections": { - "description": "Maximum number of connections from exporter to PostgreSQL instance.", - "type": "integer", - "format": "int32", - "x-order": 2 - } - }, - "x-order": 21 - }, - "process_exec_path": { - "description": "Path to exec process.", - "type": "string", - "x-order": 22 - }, - "push_metrics": { - "description": "True if exporter uses push metrics mode.", - "type": "boolean", - "x-order": 23 - }, - "query_examples_disabled": { - "description": "True if query examples are disabled.", - "type": "boolean", - "x-order": 24 - }, - "rds_basic_metrics_disabled": { - "description": "True if RDS basic metrics are disdabled.", - "type": "boolean", - "x-order": 26 - }, - "rds_enhanced_metrics_disabled": { - "description": "True if RDS enhanced metrics are disdabled.", - "type": "boolean", - "x-order": 27 - }, - "runs_on_node_id": { - "description": "Node identifier where this instance runs.", - "type": "string", - "x-order": 28 - }, - "service_id": { - "description": "Service identifier.", - "type": "string", - "x-order": 29 - }, - "status": { - "description": "Actual Agent status.", - "type": "string", - "x-order": 30 - }, - "table_count": { - "description": "Last known table count.", - "type": "integer", - "format": "int32", - "x-order": 31 - }, - "table_count_tablestats_group_limit": { - "description": "Tablestats group collectors are disabled if there are more than that number of tables.\n0 means tablestats group collectors are always enabled (no limit).\nNegative value means tablestats group collectors are always disabled.", - "type": "integer", - "format": "int32", - "x-order": 32 - }, - "tls": { - "description": "Use TLS for database connections.", - "type": "boolean", - "x-order": 33 - }, - "tls_skip_verify": { - "description": "Skip TLS certificate and hostname validation.", - "type": "boolean", - "x-order": 34 - }, - "updated_at": { - "description": "Last update timestamp.", - "type": "string", - "format": "date-time", - "x-order": 36 - }, - "username": { - "description": "HTTP basic auth username for collecting metrics.", - "type": "string", - "x-order": 35 - }, - "version": { - "description": "Agent version.", - "type": "string", - "x-order": 37 + "x-order": 2 } } }, - "x-order": 16 + "x-order": 15 }, - "cluster": { - "description": "Cluster name.", + "az": { + "description": "Node availability zone.", + "type": "string", + "x-order": 10 + }, + "container_id": { + "description": "A node's unique docker container identifier.", + "type": "string", + "x-order": 6 + }, + "container_name": { + "description": "Container name.", "type": "string", "x-order": 7 }, @@ -399,74 +194,79 @@ "description": "Creation timestamp.", "type": "string", "format": "date-time", - "x-order": 14 + "x-order": 12 }, "custom_labels": { - "description": "Custom user-assigned labels for Service.", + "description": "Custom user-assigned labels for Node.", "type": "object", "additionalProperties": { "type": "string" }, - "x-order": 9 - }, - "database_name": { - "description": "Database name.", - "type": "string", - "x-order": 3 + "x-order": 11 }, - "environment": { - "description": "Environment name.", + "distro": { + "description": "Linux distribution name and version.", "type": "string", - "x-order": 6 + "x-order": 4 }, - "external_group": { - "description": "External group name.", + "machine_id": { + "description": "Linux machine-id.", "type": "string", - "x-order": 10 + "x-order": 3 }, "node_id": { - "description": "Node identifier where this instance runs.", + "description": "Unique Node identifier.", "type": "string", - "x-order": 4 + "x-order": 0 }, - "node_name": { - "description": "Node name where this instance runs.", + "node_model": { + "description": "Node model.", "type": "string", "x-order": 5 }, - "port": { - "description": "Access port.\nPort is required when the address present.", - "type": "integer", - "format": "int64", - "x-order": 12 - }, - "replication_set": { - "description": "Replication set name.", - "type": "string", - "x-order": 8 - }, - "service_id": { - "description": "Unique service identifier.", - "type": "string", - "x-order": 0 - }, - "service_name": { - "description": "User-defined name unique across all Services.", + "node_name": { + "description": "User-defined node name.", "type": "string", "x-order": 2 }, - "service_type": { - "description": "Service type.", + "node_type": { + "description": "Node type.", "type": "string", "x-order": 1 }, - "socket": { - "description": "Access unix socket.\nAddress (and port) or socket is required.", + "region": { + "description": "Node region.", "type": "string", - "x-order": 13 + "x-order": 9 + }, + "services": { + "description": "List of services running on this node.", + "type": "array", + "items": { + "description": "Service represents a service running on a node.", + "type": "object", + "properties": { + "service_id": { + "description": "Unique Service identifier.", + "type": "string", + "x-order": 0 + }, + "service_name": { + "description": "Service name.", + "type": "string", + "x-order": 2 + }, + "service_type": { + "description": "Service type.", + "type": "string", + "x-order": 1 + } + } + }, + "x-order": 16 }, "status": { - "description": "Service status.\n\n - STATUS_UNSPECIFIED: In case we don't support the db vendor yet.\n - STATUS_UP: The service is up.\n - STATUS_DOWN: The service is down.\n - STATUS_UNKNOWN: The service's status cannot be known (e.g. there are no metrics yet).", + "description": "Node status.\n\n - STATUS_UNSPECIFIED: Invalid status.\n - STATUS_UP: The node is up.\n - STATUS_DOWN: The node is down.\n - STATUS_UNKNOWN: The node's status cannot be known (e.g. there are no metrics yet).", "type": "string", "default": "STATUS_UNSPECIFIED", "enum": [ @@ -475,18 +275,13 @@ "STATUS_DOWN", "STATUS_UNKNOWN" ], - "x-order": 17 + "x-order": 14 }, "updated_at": { "description": "Last update timestamp.", "type": "string", "format": "date-time", - "x-order": 15 - }, - "version": { - "description": "The service/database version.", - "type": "string", - "x-order": 18 + "x-order": 13 } } }, @@ -527,51 +322,122 @@ } } } - } - }, - "/v1/management/annotations": { + }, "post": { - "description": "Adds an annotation.", + "description": "Registers a new Node and a pmm-agent.", "tags": [ "ManagementService" ], - "summary": "Add an Annotation", - "operationId": "AddAnnotation", + "summary": "Register a Node", + "operationId": "RegisterNode", "parameters": [ { - "description": "AddAnnotationRequest is a params to add new annotation.", "name": "body", "in": "body", "required": true, "schema": { - "description": "AddAnnotationRequest is a params to add new annotation.", "type": "object", "properties": { - "node_name": { - "description": "Used for annotating a node.", + "address": { + "description": "Node address (DNS name or IP).", "type": "string", "x-order": 2 }, - "service_names": { - "description": "Used for annotating services.", - "type": "array", - "items": { + "agent_password": { + "description": "Custom password for exporter endpoint /metrics.", + "type": "string", + "x-order": 14 + }, + "az": { + "description": "Node availability zone.", + "type": "string", + "x-order": 9 + }, + "container_id": { + "description": "Container identifier. If specified, must be a unique Docker container identifier.", + "type": "string", + "x-order": 5 + }, + "container_name": { + "description": "Container name.", + "type": "string", + "x-order": 6 + }, + "custom_labels": { + "description": "Custom user-assigned labels for Node.", + "type": "object", + "additionalProperties": { "type": "string" }, - "x-order": 3 + "x-order": 10 }, - "tags": { - "description": "Tags are used to filter annotations.", + "disable_collectors": { + "description": "List of collector names to disable in this exporter.", "type": "array", "items": { "type": "string" }, + "x-order": 13 + }, + "distro": { + "description": "Linux distribution name and version.", + "type": "string", + "x-order": 4 + }, + "expose_exporter": { + "type": "boolean", + "title": "Optionally expose the exporter process on all public interfaces", + "x-order": 15 + }, + "machine_id": { + "description": "Linux machine-id.", + "type": "string", + "x-order": 3 + }, + "metrics_mode": { + "description": "MetricsMode defines desired metrics mode for agent,\nit can be pull, push or auto mode chosen by server.\n\n - METRICS_MODE_UNSPECIFIED: Auto", + "type": "string", + "default": "METRICS_MODE_UNSPECIFIED", + "enum": [ + "METRICS_MODE_UNSPECIFIED", + "METRICS_MODE_PULL", + "METRICS_MODE_PUSH" + ], + "x-order": 12 + }, + "node_model": { + "description": "Node model.", + "type": "string", + "x-order": 7 + }, + "node_name": { + "description": "A user-defined name unique across all Nodes.", + "type": "string", "x-order": 1 }, - "text": { - "description": "An annotation description. Required.", + "node_type": { + "description": "NodeType describes supported Node types.", "type": "string", + "default": "NODE_TYPE_UNSPECIFIED", + "enum": [ + "NODE_TYPE_UNSPECIFIED", + "NODE_TYPE_GENERIC_NODE", + "NODE_TYPE_CONTAINER_NODE", + "NODE_TYPE_REMOTE_NODE", + "NODE_TYPE_REMOTE_RDS_NODE", + "NODE_TYPE_REMOTE_AZURE_DATABASE_NODE" + ], "x-order": 0 + }, + "region": { + "description": "Node region.", + "type": "string", + "x-order": 8 + }, + "reregister": { + "description": "If true, and Node with that name already exist, it will be removed with all dependent Services and Agents.", + "type": "boolean", + "x-order": 11 } } } @@ -580,226 +446,168 @@ "responses": { "200": { "description": "A successful response.", - "schema": { - "type": "object" - } - }, - "default": { - "description": "An unexpected error response.", "schema": { "type": "object", "properties": { - "code": { - "type": "integer", - "format": "int32", - "x-order": 0 - }, - "details": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@type": { - "type": "string", - "x-order": 0 - } + "container_node": { + "description": "ContainerNode represents a Docker container.", + "type": "object", + "properties": { + "address": { + "description": "Node address (DNS name or IP).", + "type": "string", + "x-order": 2 }, - "additionalProperties": false + "az": { + "description": "Node availability zone.", + "type": "string", + "x-order": 8 + }, + "container_id": { + "description": "Container identifier. If specified, must be a unique Docker container identifier.", + "type": "string", + "x-order": 4 + }, + "container_name": { + "description": "Container name.", + "type": "string", + "x-order": 5 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 9 + }, + "machine_id": { + "description": "Linux machine-id of the Generic Node where this Container Node runs.", + "type": "string", + "x-order": 3 + }, + "node_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "node_model": { + "description": "Node model.", + "type": "string", + "x-order": 6 + }, + "node_name": { + "description": "Unique across all Nodes user-defined name.", + "type": "string", + "x-order": 1 + }, + "region": { + "description": "Node region.", + "type": "string", + "x-order": 7 + } }, - "x-order": 2 - }, - "message": { - "type": "string", "x-order": 1 - } - } - } - } - } - } - }, - "/v1/management/nodes": { - "get": { - "description": "Returns a filtered list of Nodes.", - "tags": [ - "ManagementService" - ], - "summary": "List Nodes", - "operationId": "ListNodes", - "parameters": [ - { - "enum": [ - "NODE_TYPE_UNSPECIFIED", - "NODE_TYPE_GENERIC_NODE", - "NODE_TYPE_CONTAINER_NODE", - "NODE_TYPE_REMOTE_NODE", - "NODE_TYPE_REMOTE_RDS_NODE", - "NODE_TYPE_REMOTE_AZURE_DATABASE_NODE" - ], - "type": "string", - "default": "NODE_TYPE_UNSPECIFIED", - "description": "Node type to be filtered out.", - "name": "node_type", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object", - "properties": { - "nodes": { - "type": "array", - "items": { - "type": "object", - "properties": { - "address": { - "description": "Node address (DNS name or IP).", - "type": "string", - "x-order": 8 + }, + "generic_node": { + "description": "GenericNode represents a bare metal server or virtual machine.", + "type": "object", + "properties": { + "address": { + "description": "Node address (DNS name or IP).", + "type": "string", + "x-order": 2 + }, + "az": { + "description": "Node availability zone.", + "type": "string", + "x-order": 7 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" }, - "agents": { - "description": "List of agents related to this node.", - "type": "array", - "items": { - "type": "object", - "properties": { - "agent_id": { - "description": "Unique Agent identifier.", - "type": "string", - "x-order": 0 - }, - "agent_type": { - "description": "Agent type.", - "type": "string", - "x-order": 1 - }, - "is_connected": { - "description": "True if Agent is running and connected to pmm-managed.", - "type": "boolean", - "x-order": 3 - }, - "status": { - "description": "Actual Agent status.", - "type": "string", - "x-order": 2 - } - } - }, - "x-order": 15 - }, - "az": { - "description": "Node availability zone.", - "type": "string", - "x-order": 10 - }, - "container_id": { - "description": "A node's unique docker container identifier.", - "type": "string", - "x-order": 6 - }, - "container_name": { - "description": "Container name.", - "type": "string", - "x-order": 7 - }, - "created_at": { - "description": "Creation timestamp.", - "type": "string", - "format": "date-time", - "x-order": 12 - }, - "custom_labels": { - "description": "Custom user-assigned labels for Node.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 11 - }, - "distro": { - "description": "Linux distribution name and version.", - "type": "string", - "x-order": 4 - }, - "machine_id": { - "description": "Linux machine-id.", - "type": "string", - "x-order": 3 - }, - "node_id": { - "description": "Unique Node identifier.", - "type": "string", - "x-order": 0 - }, - "node_model": { - "description": "Node model.", - "type": "string", - "x-order": 5 - }, - "node_name": { - "description": "User-defined node name.", - "type": "string", - "x-order": 2 - }, - "node_type": { - "description": "Node type.", - "type": "string", - "x-order": 1 - }, - "region": { - "description": "Node region.", - "type": "string", - "x-order": 9 - }, - "services": { - "description": "List of services running on this node.", - "type": "array", - "items": { - "description": "Service represents a service running on a node.", - "type": "object", - "properties": { - "service_id": { - "description": "Unique Service identifier.", - "type": "string", - "x-order": 0 - }, - "service_name": { - "description": "Service name.", - "type": "string", - "x-order": 2 - }, - "service_type": { - "description": "Service type.", - "type": "string", - "x-order": 1 - } - } - }, - "x-order": 16 - }, - "status": { - "description": "Node status.\n\n - STATUS_UNSPECIFIED: Invalid status.\n - STATUS_UP: The node is up.\n - STATUS_DOWN: The node is down.\n - STATUS_UNKNOWN: The node's status cannot be known (e.g. there are no metrics yet).", - "type": "string", - "default": "STATUS_UNSPECIFIED", - "enum": [ - "STATUS_UNSPECIFIED", - "STATUS_UP", - "STATUS_DOWN", - "STATUS_UNKNOWN" - ], - "x-order": 14 - }, - "updated_at": { - "description": "Last update timestamp.", - "type": "string", - "format": "date-time", - "x-order": 13 - } + "x-order": 8 + }, + "distro": { + "description": "Linux distribution name and version.", + "type": "string", + "x-order": 4 + }, + "machine_id": { + "description": "Linux machine-id.", + "type": "string", + "x-order": 3 + }, + "node_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "node_model": { + "description": "Node model.", + "type": "string", + "x-order": 5 + }, + "node_name": { + "description": "Unique across all Nodes user-defined name.", + "type": "string", + "x-order": 1 + }, + "region": { + "description": "Node region.", + "type": "string", + "x-order": 6 } }, "x-order": 0 + }, + "pmm_agent": { + "description": "PMMAgent runs on Generic or Container Node.", + "type": "object", + "properties": { + "agent_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "connected": { + "description": "True if Agent is running and connected to pmm-managed.", + "type": "boolean", + "x-order": 3 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 2 + }, + "process_exec_path": { + "description": "Path to exec process.", + "type": "string", + "x-order": 4 + }, + "runs_on_node_id": { + "description": "Node identifier where this instance runs.", + "type": "string", + "x-order": 1 + } + }, + "x-order": 2 + }, + "token": { + "description": "Token represents token for vmagent auth config.", + "type": "string", + "x-order": 3 + }, + "warning": { + "description": "Warning message.", + "type": "string", + "x-order": 4 } } } @@ -836,214 +644,97 @@ } } } - }, - "post": { - "description": "Registers a new Node and a pmm-agent.", + } + }, + "/v1/management/nodes/{node_id}": { + "get": { + "description": "Returns a single Node by ID.", "tags": [ "ManagementService" ], - "summary": "Register a Node", - "operationId": "RegisterNode", + "summary": "Get Node", + "operationId": "GetNode", "parameters": [ { - "name": "body", - "in": "body", - "required": true, + "type": "string", + "description": "Unique Node identifier.", + "name": "node_id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", "schema": { "type": "object", "properties": { - "address": { - "description": "Node address (DNS name or IP).", - "type": "string", - "x-order": 2 - }, - "agent_password": { - "description": "Custom password for exporter endpoint /metrics.", - "type": "string", - "x-order": 14 - }, - "az": { - "description": "Node availability zone.", - "type": "string", - "x-order": 9 - }, - "container_id": { - "description": "Container identifier. If specified, must be a unique Docker container identifier.", - "type": "string", - "x-order": 5 - }, - "container_name": { - "description": "Container name.", - "type": "string", - "x-order": 6 - }, - "custom_labels": { - "description": "Custom user-assigned labels for Node.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 10 - }, - "disable_collectors": { - "description": "List of collector names to disable in this exporter.", - "type": "array", - "items": { - "type": "string" - }, - "x-order": 13 - }, - "distro": { - "description": "Linux distribution name and version.", - "type": "string", - "x-order": 4 - }, - "expose_exporter": { - "type": "boolean", - "title": "Optionally expose the exporter process on all public interfaces", - "x-order": 15 - }, - "machine_id": { - "description": "Linux machine-id.", - "type": "string", - "x-order": 3 - }, - "metrics_mode": { - "description": "MetricsMode defines desired metrics mode for agent,\nit can be pull, push or auto mode chosen by server.\n\n - METRICS_MODE_UNSPECIFIED: Auto", - "type": "string", - "default": "METRICS_MODE_UNSPECIFIED", - "enum": [ - "METRICS_MODE_UNSPECIFIED", - "METRICS_MODE_PULL", - "METRICS_MODE_PUSH" - ], - "x-order": 12 - }, - "node_model": { - "description": "Node model.", - "type": "string", - "x-order": 7 - }, - "node_name": { - "description": "A user-defined name unique across all Nodes.", - "type": "string", - "x-order": 1 - }, - "node_type": { - "description": "NodeType describes supported Node types.", - "type": "string", - "default": "NODE_TYPE_UNSPECIFIED", - "enum": [ - "NODE_TYPE_UNSPECIFIED", - "NODE_TYPE_GENERIC_NODE", - "NODE_TYPE_CONTAINER_NODE", - "NODE_TYPE_REMOTE_NODE", - "NODE_TYPE_REMOTE_RDS_NODE", - "NODE_TYPE_REMOTE_AZURE_DATABASE_NODE" - ], - "x-order": 0 - }, - "region": { - "description": "Node region.", - "type": "string", - "x-order": 8 - }, - "reregister": { - "description": "If true, and Node with that name already exist, it will be removed with all dependent Services and Agents.", - "type": "boolean", - "x-order": 11 - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object", - "properties": { - "container_node": { - "description": "ContainerNode represents a Docker container.", + "node": { "type": "object", "properties": { "address": { "description": "Node address (DNS name or IP).", "type": "string", - "x-order": 2 + "x-order": 8 + }, + "agents": { + "description": "List of agents related to this node.", + "type": "array", + "items": { + "type": "object", + "properties": { + "agent_id": { + "description": "Unique Agent identifier.", + "type": "string", + "x-order": 0 + }, + "agent_type": { + "description": "Agent type.", + "type": "string", + "x-order": 1 + }, + "is_connected": { + "description": "True if Agent is running and connected to pmm-managed.", + "type": "boolean", + "x-order": 3 + }, + "status": { + "description": "Actual Agent status.", + "type": "string", + "x-order": 2 + } + } + }, + "x-order": 15 }, "az": { "description": "Node availability zone.", "type": "string", - "x-order": 8 + "x-order": 10 }, "container_id": { - "description": "Container identifier. If specified, must be a unique Docker container identifier.", + "description": "A node's unique docker container identifier.", "type": "string", - "x-order": 4 + "x-order": 6 }, "container_name": { "description": "Container name.", "type": "string", - "x-order": 5 - }, - "custom_labels": { - "description": "Custom user-assigned labels.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 9 - }, - "machine_id": { - "description": "Linux machine-id of the Generic Node where this Container Node runs.", - "type": "string", - "x-order": 3 - }, - "node_id": { - "description": "Unique randomly generated instance identifier.", - "type": "string", - "x-order": 0 - }, - "node_model": { - "description": "Node model.", - "type": "string", - "x-order": 6 - }, - "node_name": { - "description": "Unique across all Nodes user-defined name.", - "type": "string", - "x-order": 1 - }, - "region": { - "description": "Node region.", - "type": "string", "x-order": 7 - } - }, - "x-order": 1 - }, - "generic_node": { - "description": "GenericNode represents a bare metal server or virtual machine.", - "type": "object", - "properties": { - "address": { - "description": "Node address (DNS name or IP).", - "type": "string", - "x-order": 2 }, - "az": { - "description": "Node availability zone.", + "created_at": { + "description": "Creation timestamp.", "type": "string", - "x-order": 7 + "format": "date-time", + "x-order": 12 }, "custom_labels": { - "description": "Custom user-assigned labels.", + "description": "Custom user-assigned labels for Node.", "type": "object", "additionalProperties": { "type": "string" }, - "x-order": 8 + "x-order": 11 }, "distro": { "description": "Linux distribution name and version.", @@ -1056,7 +747,7 @@ "x-order": 3 }, "node_id": { - "description": "Unique randomly generated instance identifier.", + "description": "Unique Node identifier.", "type": "string", "x-order": 0 }, @@ -1066,62 +757,135 @@ "x-order": 5 }, "node_name": { - "description": "Unique across all Nodes user-defined name.", + "description": "User-defined node name.", + "type": "string", + "x-order": 2 + }, + "node_type": { + "description": "Node type.", "type": "string", "x-order": 1 }, "region": { "description": "Node region.", "type": "string", - "x-order": 6 - } - }, - "x-order": 0 - }, - "pmm_agent": { - "description": "PMMAgent runs on Generic or Container Node.", - "type": "object", - "properties": { - "agent_id": { - "description": "Unique randomly generated instance identifier.", - "type": "string", - "x-order": 0 - }, - "connected": { - "description": "True if Agent is running and connected to pmm-managed.", - "type": "boolean", - "x-order": 3 + "x-order": 9 }, - "custom_labels": { - "description": "Custom user-assigned labels.", - "type": "object", - "additionalProperties": { - "type": "string" + "services": { + "description": "List of services running on this node.", + "type": "array", + "items": { + "description": "Service represents a service running on a node.", + "type": "object", + "properties": { + "service_id": { + "description": "Unique Service identifier.", + "type": "string", + "x-order": 0 + }, + "service_name": { + "description": "Service name.", + "type": "string", + "x-order": 2 + }, + "service_type": { + "description": "Service type.", + "type": "string", + "x-order": 1 + } + } }, - "x-order": 2 + "x-order": 16 }, - "process_exec_path": { - "description": "Path to exec process.", + "status": { + "description": "Node status.\n\n - STATUS_UNSPECIFIED: Invalid status.\n - STATUS_UP: The node is up.\n - STATUS_DOWN: The node is down.\n - STATUS_UNKNOWN: The node's status cannot be known (e.g. there are no metrics yet).", "type": "string", - "x-order": 4 - }, - "runs_on_node_id": { - "description": "Node identifier where this instance runs.", + "default": "STATUS_UNSPECIFIED", + "enum": [ + "STATUS_UNSPECIFIED", + "STATUS_UP", + "STATUS_DOWN", + "STATUS_UNKNOWN" + ], + "x-order": 14 + }, + "updated_at": { + "description": "Last update timestamp.", "type": "string", - "x-order": 1 + "format": "date-time", + "x-order": 13 } }, + "x-order": 0 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, "x-order": 2 }, - "token": { - "description": "Token represents token for vmagent auth config.", + "message": { "type": "string", - "x-order": 3 - }, + "x-order": 1 + } + } + } + } + } + }, + "delete": { + "description": "Unregisters a Node and pmm-agent", + "tags": [ + "ManagementService" + ], + "summary": "Unregister a Node", + "operationId": "UnregisterNode", + "parameters": [ + { + "type": "string", + "description": "Node_id to be unregistered.", + "name": "node_id", + "in": "path", + "required": true + }, + { + "type": "boolean", + "description": "Force delete node, related service account, even if it has more service tokens attached.", + "name": "force", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { "warning": { - "description": "Warning message.", + "description": "Warning message if there are more service tokens attached to service account.", "type": "string", - "x-order": 4 + "x-order": 0 } } } @@ -1160,21 +924,42 @@ } } }, - "/v1/management/nodes/{node_id}": { + "/v1/management/services": { "get": { - "description": "Returns a single Node by ID.", + "description": "Returns a filtered list of Services.", "tags": [ "ManagementService" ], - "summary": "Get Node", - "operationId": "GetNode", + "summary": "List Services", + "operationId": "ListServices", "parameters": [ { "type": "string", - "description": "Unique Node identifier.", + "description": "Return only Services running on that Node.", "name": "node_id", - "in": "path", - "required": true + "in": "query" + }, + { + "enum": [ + "SERVICE_TYPE_UNSPECIFIED", + "SERVICE_TYPE_MYSQL_SERVICE", + "SERVICE_TYPE_MONGODB_SERVICE", + "SERVICE_TYPE_POSTGRESQL_SERVICE", + "SERVICE_TYPE_PROXYSQL_SERVICE", + "SERVICE_TYPE_HAPROXY_SERVICE", + "SERVICE_TYPE_EXTERNAL_SERVICE" + ], + "type": "string", + "default": "SERVICE_TYPE_UNSPECIFIED", + "description": "Return only services filtered by service type.", + "name": "service_type", + "in": "query" + }, + { + "type": "string", + "description": "Return only services in this external group.", + "name": "external_group", + "in": "query" } ], "responses": { @@ -1183,222 +968,430 @@ "schema": { "type": "object", "properties": { - "node": { - "type": "object", - "properties": { - "address": { - "description": "Node address (DNS name or IP).", - "type": "string", - "x-order": 8 - }, - "agents": { - "description": "List of agents related to this node.", - "type": "array", - "items": { - "type": "object", - "properties": { - "agent_id": { - "description": "Unique Agent identifier.", - "type": "string", - "x-order": 0 - }, - "agent_type": { - "description": "Agent type.", - "type": "string", - "x-order": 1 - }, - "is_connected": { - "description": "True if Agent is running and connected to pmm-managed.", - "type": "boolean", - "x-order": 3 - }, - "status": { - "description": "Actual Agent status.", - "type": "string", - "x-order": 2 - } - } + "services": { + "description": "List of Services.", + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "description": "Access address (DNS name or IP).\nAddress (and port) or socket is required.", + "type": "string", + "x-order": 11 }, - "x-order": 15 - }, - "az": { - "description": "Node availability zone.", - "type": "string", - "x-order": 10 - }, - "container_id": { - "description": "A node's unique docker container identifier.", - "type": "string", - "x-order": 6 - }, - "container_name": { - "description": "Container name.", - "type": "string", - "x-order": 7 - }, - "created_at": { - "description": "Creation timestamp.", - "type": "string", - "format": "date-time", - "x-order": 12 - }, - "custom_labels": { - "description": "Custom user-assigned labels for Node.", - "type": "object", - "additionalProperties": { - "type": "string" + "agents": { + "description": "List of agents related to this service.", + "type": "array", + "items": { + "type": "object", + "properties": { + "agent_id": { + "description": "Unique agent identifier.", + "type": "string", + "x-order": 0 + }, + "agent_type": { + "description": "Agent type.", + "type": "string", + "x-order": 2 + }, + "aws_access_key": { + "description": "AWS Access Key.", + "type": "string", + "x-order": 3 + }, + "azure_options": { + "type": "object", + "properties": { + "client_id": { + "description": "Azure client ID.", + "type": "string", + "x-order": 0 + }, + "is_client_secret_set": { + "description": "True if Azure client secret is set.", + "type": "boolean", + "x-order": 1 + }, + "resource_group": { + "description": "Azure resource group.", + "type": "string", + "x-order": 2 + }, + "subscription_id": { + "description": "Azure subscription ID.", + "type": "string", + "x-order": 3 + }, + "tenant_id": { + "description": "Azure tenant ID.", + "type": "string", + "x-order": 4 + } + }, + "x-order": 5 + }, + "comments_parsing_disabled": { + "description": "True if query comments parsing is disabled.", + "type": "boolean", + "x-order": 25 + }, + "created_at": { + "description": "Creation timestamp.", + "type": "string", + "format": "date-time", + "x-order": 6 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 7 + }, + "disabled": { + "description": "Desired Agent status: enabled (false) or disabled (true).", + "type": "boolean", + "x-order": 8 + }, + "disabled_collectors": { + "description": "List of disabled collector names.", + "type": "array", + "items": { + "type": "string" + }, + "x-order": 9 + }, + "expose_exporter": { + "description": "True if an exporter agent is exposed on all host addresses.", + "type": "boolean", + "x-order": 39 + }, + "is_agent_password_set": { + "description": "True if the agent password is set.", + "type": "boolean", + "x-order": 1 + }, + "is_aws_secret_key_set": { + "description": "True if AWS Secret Key is set.", + "type": "boolean", + "x-order": 4 + }, + "is_connected": { + "description": "True if Agent is running and connected to pmm-managed.", + "type": "boolean", + "x-order": 38 + }, + "is_password_set": { + "description": "True if password for connecting the agent to the database is set.", + "type": "boolean", + "x-order": 19 + }, + "listen_port": { + "description": "Listen port for scraping metrics.", + "type": "integer", + "format": "int64", + "x-order": 10 + }, + "log_level": { + "description": "Log level for exporter.", + "type": "string", + "x-order": 11 + }, + "max_query_length": { + "description": "Limit query length in QAN.", + "type": "integer", + "format": "int32", + "x-order": 12 + }, + "max_query_log_size": { + "description": "Limit query log size in QAN.", + "type": "string", + "format": "int64", + "x-order": 13 + }, + "metrics_path": { + "description": "Path under which metrics are exposed, used to generate URI.", + "type": "string", + "x-order": 14 + }, + "metrics_scheme": { + "description": "Scheme to generate URI to exporter metrics endpoints.", + "type": "string", + "x-order": 15 + }, + "mongo_db_options": { + "type": "object", + "properties": { + "authentication_database": { + "description": "MongoDB auth database.", + "type": "string", + "x-order": 3 + }, + "authentication_mechanism": { + "description": "MongoDB auth mechanism.", + "type": "string", + "x-order": 2 + }, + "collections_limit": { + "description": "MongoDB collections limit.", + "type": "integer", + "format": "int32", + "x-order": 5 + }, + "enable_all_collectors": { + "description": "True if all collectors are enabled.", + "type": "boolean", + "x-order": 6 + }, + "is_tls_certificate_key_file_password_set": { + "description": "True if TLS certificate file password is set.", + "type": "boolean", + "x-order": 1 + }, + "is_tls_certificate_key_set": { + "description": "True if TLS certificate is set.", + "type": "boolean", + "x-order": 0 + }, + "stats_collections": { + "description": "MongoDB stats collections.", + "type": "array", + "items": { + "type": "string" + }, + "x-order": 4 + } + }, + "x-order": 16 + }, + "mysql_options": { + "type": "object", + "properties": { + "is_tls_key_set": { + "description": "True if TLS key is set.", + "type": "boolean", + "x-order": 0 + } + }, + "x-order": 17 + }, + "node_id": { + "description": "A unique node identifier.", + "type": "string", + "x-order": 18 + }, + "pmm_agent_id": { + "description": "The pmm-agent identifier.", + "type": "string", + "x-order": 20 + }, + "postgresql_options": { + "type": "object", + "properties": { + "auto_discovery_limit": { + "description": "Limit of databases for auto-discovery.", + "type": "integer", + "format": "int32", + "x-order": 1 + }, + "is_ssl_key_set": { + "description": "True if TLS key is set.", + "type": "boolean", + "x-order": 0 + }, + "max_exporter_connections": { + "description": "Maximum number of connections from exporter to PostgreSQL instance.", + "type": "integer", + "format": "int32", + "x-order": 2 + } + }, + "x-order": 21 + }, + "process_exec_path": { + "description": "Path to exec process.", + "type": "string", + "x-order": 22 + }, + "push_metrics": { + "description": "True if exporter uses push metrics mode.", + "type": "boolean", + "x-order": 23 + }, + "query_examples_disabled": { + "description": "True if query examples are disabled.", + "type": "boolean", + "x-order": 24 + }, + "rds_basic_metrics_disabled": { + "description": "True if RDS basic metrics are disdabled.", + "type": "boolean", + "x-order": 26 + }, + "rds_enhanced_metrics_disabled": { + "description": "True if RDS enhanced metrics are disdabled.", + "type": "boolean", + "x-order": 27 + }, + "runs_on_node_id": { + "description": "Node identifier where this instance runs.", + "type": "string", + "x-order": 28 + }, + "service_id": { + "description": "Service identifier.", + "type": "string", + "x-order": 29 + }, + "status": { + "description": "Actual Agent status.", + "type": "string", + "x-order": 30 + }, + "table_count": { + "description": "Last known table count.", + "type": "integer", + "format": "int32", + "x-order": 31 + }, + "table_count_tablestats_group_limit": { + "description": "Tablestats group collectors are disabled if there are more than that number of tables.\n0 means tablestats group collectors are always enabled (no limit).\nNegative value means tablestats group collectors are always disabled.", + "type": "integer", + "format": "int32", + "x-order": 32 + }, + "tls": { + "description": "Use TLS for database connections.", + "type": "boolean", + "x-order": 33 + }, + "tls_skip_verify": { + "description": "Skip TLS certificate and hostname validation.", + "type": "boolean", + "x-order": 34 + }, + "updated_at": { + "description": "Last update timestamp.", + "type": "string", + "format": "date-time", + "x-order": 36 + }, + "username": { + "description": "HTTP basic auth username for collecting metrics.", + "type": "string", + "x-order": 35 + }, + "version": { + "description": "Agent version.", + "type": "string", + "x-order": 37 + } + } + }, + "x-order": 16 }, - "x-order": 11 - }, - "distro": { - "description": "Linux distribution name and version.", - "type": "string", - "x-order": 4 - }, - "machine_id": { - "description": "Linux machine-id.", - "type": "string", - "x-order": 3 - }, - "node_id": { - "description": "Unique Node identifier.", - "type": "string", - "x-order": 0 - }, - "node_model": { - "description": "Node model.", - "type": "string", - "x-order": 5 - }, - "node_name": { - "description": "User-defined node name.", - "type": "string", - "x-order": 2 - }, - "node_type": { - "description": "Node type.", - "type": "string", - "x-order": 1 - }, - "region": { - "description": "Node region.", - "type": "string", - "x-order": 9 - }, - "services": { - "description": "List of services running on this node.", - "type": "array", - "items": { - "description": "Service represents a service running on a node.", + "cluster": { + "description": "Cluster name.", + "type": "string", + "x-order": 7 + }, + "created_at": { + "description": "Creation timestamp.", + "type": "string", + "format": "date-time", + "x-order": 14 + }, + "custom_labels": { + "description": "Custom user-assigned labels for Service.", "type": "object", - "properties": { - "service_id": { - "description": "Unique Service identifier.", - "type": "string", - "x-order": 0 - }, - "service_name": { - "description": "Service name.", - "type": "string", - "x-order": 2 - }, - "service_type": { - "description": "Service type.", - "type": "string", - "x-order": 1 - } - } + "additionalProperties": { + "type": "string" + }, + "x-order": 9 }, - "x-order": 16 - }, - "status": { - "description": "Node status.\n\n - STATUS_UNSPECIFIED: Invalid status.\n - STATUS_UP: The node is up.\n - STATUS_DOWN: The node is down.\n - STATUS_UNKNOWN: The node's status cannot be known (e.g. there are no metrics yet).", - "type": "string", - "default": "STATUS_UNSPECIFIED", - "enum": [ - "STATUS_UNSPECIFIED", - "STATUS_UP", - "STATUS_DOWN", - "STATUS_UNKNOWN" - ], - "x-order": 14 - }, - "updated_at": { - "description": "Last update timestamp.", - "type": "string", - "format": "date-time", - "x-order": 13 - } - }, - "x-order": 0 - } - } - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32", - "x-order": 0 - }, - "details": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@type": { + "database_name": { + "description": "Database name.", + "type": "string", + "x-order": 3 + }, + "environment": { + "description": "Environment name.", + "type": "string", + "x-order": 6 + }, + "external_group": { + "description": "External group name.", + "type": "string", + "x-order": 10 + }, + "node_id": { + "description": "Node identifier where this instance runs.", + "type": "string", + "x-order": 4 + }, + "node_name": { + "description": "Node name where this instance runs.", + "type": "string", + "x-order": 5 + }, + "port": { + "description": "Access port.\nPort is required when the address present.", + "type": "integer", + "format": "int64", + "x-order": 12 + }, + "replication_set": { + "description": "Replication set name.", + "type": "string", + "x-order": 8 + }, + "service_id": { + "description": "Unique service identifier.", "type": "string", "x-order": 0 + }, + "service_name": { + "description": "User-defined name unique across all Services.", + "type": "string", + "x-order": 2 + }, + "service_type": { + "description": "Service type.", + "type": "string", + "x-order": 1 + }, + "socket": { + "description": "Access unix socket.\nAddress (and port) or socket is required.", + "type": "string", + "x-order": 13 + }, + "status": { + "description": "Service status.\n\n - STATUS_UNSPECIFIED: In case we don't support the db vendor yet.\n - STATUS_UP: The service is up.\n - STATUS_DOWN: The service is down.\n - STATUS_UNKNOWN: The service's status cannot be known (e.g. there are no metrics yet).", + "type": "string", + "default": "STATUS_UNSPECIFIED", + "enum": [ + "STATUS_UNSPECIFIED", + "STATUS_UP", + "STATUS_DOWN", + "STATUS_UNKNOWN" + ], + "x-order": 17 + }, + "updated_at": { + "description": "Last update timestamp.", + "type": "string", + "format": "date-time", + "x-order": 15 + }, + "version": { + "description": "The service/database version.", + "type": "string", + "x-order": 18 } - }, - "additionalProperties": false + } }, - "x-order": 2 - }, - "message": { - "type": "string", - "x-order": 1 - } - } - } - } - } - }, - "delete": { - "description": "Unregisters a Node and pmm-agent", - "tags": [ - "ManagementService" - ], - "summary": "Unregister a Node", - "operationId": "UnregisterNode", - "parameters": [ - { - "type": "string", - "description": "Node_id to be unregistered.", - "name": "node_id", - "in": "path", - "required": true - }, - { - "type": "boolean", - "description": "Force delete node, related service account, even if it has more service tokens attached.", - "name": "force", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object", - "properties": { - "warning": { - "description": "Warning message if there are more service tokens attached to service account.", - "type": "string", "x-order": 0 } } @@ -1435,10 +1428,8 @@ } } } - } - } - }, - "/v1/management/services": { + } + }, "post": { "description": "Adds a service and starts several agents.", "tags": [ @@ -5343,6 +5334,203 @@ } } }, + "/v1/management/services/azure": { + "post": { + "description": "Adds an Azure Database instance.", + "tags": [ + "ManagementService" + ], + "summary": "Add Azure Database", + "operationId": "AddAzureDatabase", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "address": { + "description": "Address used to connect to it.", + "type": "string", + "x-order": 4 + }, + "az": { + "description": "Azure database availability zone.", + "type": "string", + "x-order": 1 + }, + "azure_client_id": { + "description": "Azure client ID.", + "type": "string", + "x-order": 11 + }, + "azure_client_secret": { + "description": "Azure client secret.", + "type": "string", + "x-order": 12 + }, + "azure_database_exporter": { + "description": "If true, adds azure_database_exporter.", + "type": "boolean", + "x-order": 16 + }, + "azure_resource_group": { + "description": "Azure resource group.", + "type": "string", + "x-order": 15 + }, + "azure_subscription_id": { + "description": "Azure subscription ID.", + "type": "string", + "x-order": 14 + }, + "azure_tenant_id": { + "description": "Azure tanant ID.", + "type": "string", + "x-order": 13 + }, + "custom_labels": { + "description": "Custom user-assigned labels for Node and Service.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 18 + }, + "disable_query_examples": { + "description": "Disable query examples.", + "type": "boolean", + "x-order": 22 + }, + "environment": { + "description": "Environment name.", + "type": "string", + "x-order": 8 + }, + "instance_id": { + "description": "Azure database instance ID.", + "type": "string", + "x-order": 2 + }, + "node_model": { + "description": "Represents a purchasable Stock Keeping Unit (SKU) under a product.\nhttps://docs.microsoft.com/en-us/partner-center/develop/product-resources#sku.", + "type": "string", + "x-order": 3 + }, + "node_name": { + "description": "Unique across all Nodes user-defined name. Defaults to Azure Database instance ID.", + "type": "string", + "x-order": 6 + }, + "password": { + "description": "Password for scraping metrics.", + "type": "string", + "x-order": 10 + }, + "port": { + "description": "Access port.", + "type": "integer", + "format": "int64", + "x-order": 5 + }, + "qan": { + "description": "If true, adds qan-mysql-perfschema-agent or qan-postgresql-pgstatements-agent.", + "type": "boolean", + "x-order": 17 + }, + "region": { + "description": "Azure database location.", + "type": "string", + "x-order": 0 + }, + "service_name": { + "description": "Unique across all Services user-defined name. Defaults to Azure Database instance ID.", + "type": "string", + "x-order": 7 + }, + "skip_connection_check": { + "description": "Skip connection check.", + "type": "boolean", + "x-order": 19 + }, + "tablestats_group_table_limit": { + "description": "Tablestats group collectors will be disabled if there are more than that number of tables.\nIf zero, server's default value is used.\nUse negative value to disable them.", + "type": "integer", + "format": "int32", + "x-order": 23 + }, + "tls": { + "description": "Use TLS for database connections.", + "type": "boolean", + "x-order": 20 + }, + "tls_skip_verify": { + "description": "Skip TLS certificate and hostname validation.", + "type": "boolean", + "x-order": 21 + }, + "type": { + "description": "DiscoverAzureDatabaseType describes supported Azure Database instance engines.\n\n - DISCOVER_AZURE_DATABASE_TYPE_MYSQL: MySQL type: microsoft.dbformysql or MariaDB type: microsoft.dbformariadb\n - DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL: PostgreSQL type: microsoft.dbformysql", + "type": "string", + "default": "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", + "enum": [ + "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", + "DISCOVER_AZURE_DATABASE_TYPE_MYSQL", + "DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL" + ], + "x-order": 24 + }, + "username": { + "description": "Username for scraping metrics.", + "type": "string", + "x-order": 9 + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + }, + "message": { + "type": "string", + "x-order": 1 + } + } + } + } + } + } + }, "/v1/management/services/{service_id}": { "delete": { "description": "Removes a Service along with its Agents.", @@ -5417,6 +5605,158 @@ } } }, + "/v1/management/services:discoverAzure": { + "post": { + "description": "Discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances.", + "tags": [ + "ManagementService" + ], + "summary": "Discover Azure Database", + "operationId": "DiscoverAzureDatabase", + "parameters": [ + { + "description": "DiscoverAzureDatabaseRequest discover azure databases request.", + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "DiscoverAzureDatabaseRequest discover azure databases request.", + "type": "object", + "properties": { + "azure_client_id": { + "description": "Azure client ID.", + "type": "string", + "x-order": 0 + }, + "azure_client_secret": { + "description": "Azure client secret.", + "type": "string", + "x-order": 1 + }, + "azure_subscription_id": { + "description": "Azure subscription ID.", + "type": "string", + "x-order": 3 + }, + "azure_tenant_id": { + "description": "Azure tanant ID.", + "type": "string", + "x-order": 2 + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "description": "DiscoverAzureDatabaseResponse discover azure databases response.", + "type": "object", + "properties": { + "azure_database_instance": { + "type": "array", + "items": { + "description": "DiscoverAzureDatabaseInstance models an unique Azure Database instance for the list of instances returned by Discovery.", + "type": "object", + "properties": { + "address": { + "description": "Address used to connect to it.", + "type": "string", + "x-order": 4 + }, + "az": { + "description": "Azure database availability zone.", + "type": "string", + "x-order": 8 + }, + "azure_resource_group": { + "description": "Azure Resource group.", + "type": "string", + "x-order": 5 + }, + "environment": { + "description": "Environment tag.", + "type": "string", + "x-order": 6 + }, + "instance_id": { + "description": "Azure database instance ID.", + "type": "string", + "x-order": 0 + }, + "node_model": { + "description": "Represents a purchasable Stock Keeping Unit (SKU) under a product.\nhttps://docs.microsoft.com/en-us/partner-center/develop/product-resources#sku.", + "type": "string", + "x-order": 9 + }, + "region": { + "description": "Azure database location.", + "type": "string", + "x-order": 1 + }, + "service_name": { + "description": "Azure database server name.", + "type": "string", + "x-order": 2 + }, + "type": { + "description": "DiscoverAzureDatabaseType describes supported Azure Database instance engines.\n\n - DISCOVER_AZURE_DATABASE_TYPE_MYSQL: MySQL type: microsoft.dbformysql or MariaDB type: microsoft.dbformariadb\n - DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL: PostgreSQL type: microsoft.dbformysql", + "type": "string", + "default": "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", + "enum": [ + "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", + "DISCOVER_AZURE_DATABASE_TYPE_MYSQL", + "DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL" + ], + "x-order": 7 + }, + "username": { + "description": "Database username.", + "type": "string", + "x-order": 3 + } + } + }, + "x-order": 0 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + }, + "message": { + "type": "string", + "x-order": 1 + } + } + } + } + } + } + }, "/v1/management/services:discoverRDS": { "post": { "description": "Discovers RDS instances.", diff --git a/api/management/v1/service.pb.go b/api/management/v1/service.pb.go index 597861b24ad..aac79c764b7 100644 --- a/api/management/v1/service.pb.go +++ b/api/management/v1/service.pb.go @@ -824,283 +824,314 @@ var file_management_v1_service_proto_rawDesc = []byte{ 0x74, 0x6f, 0x1a, 0x19, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x68, 0x61, 0x70, 0x72, 0x6f, - 0x78, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x18, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, - 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, - 0x65, 0x73, 0x71, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, - 0x71, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x64, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, - 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf7, 0x03, 0x0a, 0x11, 0x41, - 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3c, 0x0a, 0x05, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x64, 0x64, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x05, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x12, 0x42, - 0x0a, 0x07, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x64, 0x64, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, - 0x64, 0x62, 0x12, 0x4b, 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x71, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, - 0x65, 0x53, 0x51, 0x4c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x71, 0x6c, 0x12, - 0x45, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x71, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, - 0x6f, 0x78, 0x79, 0x73, 0x71, 0x6c, 0x12, 0x42, 0x0a, 0x07, 0x68, 0x61, 0x70, 0x72, 0x6f, 0x78, - 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x48, 0x41, 0x50, 0x72, 0x6f, - 0x78, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, - 0x00, 0x52, 0x07, 0x68, 0x61, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x45, 0x0a, 0x08, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6d, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x7a, 0x75, + 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x68, 0x61, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, + 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x19, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, + 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x71, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x71, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, + 0x76, 0x31, 0x2f, 0x72, 0x64, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, + 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf7, 0x03, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x05, 0x6d, + 0x79, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x79, + 0x53, 0x51, 0x4c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x48, 0x00, 0x52, 0x05, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x12, 0x42, 0x0a, 0x07, 0x6d, 0x6f, 0x6e, + 0x67, 0x6f, 0x64, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x6f, + 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x12, 0x4b, 0x0a, + 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x71, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x0a, + 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x71, 0x6c, 0x12, 0x45, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x78, 0x79, 0x73, 0x71, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, - 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x12, 0x36, 0x0a, 0x03, 0x72, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x52, 0x44, 0x53, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x48, 0x00, 0x52, 0x03, 0x72, 0x64, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x22, 0xe3, 0x03, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x6d, - 0x79, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x79, 0x53, 0x51, 0x4c, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, - 0x05, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x12, 0x3f, 0x0a, 0x07, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x64, - 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x07, - 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x12, 0x48, 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x67, - 0x72, 0x65, 0x73, 0x71, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, - 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x71, - 0x6c, 0x12, 0x42, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x71, 0x6c, 0x18, 0x04, 0x20, + 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x71, + 0x6c, 0x12, 0x42, 0x0a, 0x07, 0x68, 0x61, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x48, 0x41, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x07, 0x68, 0x61, + 0x70, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x45, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x45, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x48, 0x00, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x36, 0x0a, 0x03, + 0x72, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x44, 0x53, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, + 0x03, 0x72, 0x64, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, + 0xe3, 0x03, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x05, 0x6d, 0x79, 0x73, 0x71, + 0x6c, 0x12, 0x3f, 0x0a, 0x07, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, + 0x64, 0x62, 0x12, 0x48, 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x71, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, + 0x4c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, + 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x71, 0x6c, 0x12, 0x42, 0x0a, 0x08, + 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x71, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x78, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x73, 0x71, 0x6c, + 0x12, 0x3f, 0x0a, 0x07, 0x68, 0x61, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x48, 0x41, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x07, 0x68, 0x61, 0x70, 0x72, 0x6f, 0x78, + 0x79, 0x12, 0x42, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x78, 0x79, 0x73, 0x71, 0x6c, 0x12, 0x3f, 0x0a, 0x07, 0x68, 0x61, 0x70, 0x72, 0x6f, 0x78, 0x79, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x41, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x07, 0x68, - 0x61, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x42, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, - 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x33, 0x0a, 0x03, 0x72, 0x64, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x44, 0x53, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x03, 0x72, 0x64, 0x73, 0x42, - 0x09, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x73, 0x0a, 0x14, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x3c, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, - 0x6f, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, - 0x17, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9a, 0x07, 0x0a, 0x10, 0x55, 0x6e, 0x69, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1d, 0x0a, + 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x08, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x33, 0x0a, 0x03, 0x72, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x44, 0x53, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x03, 0x72, 0x64, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x73, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, + 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x65, 0x74, 0x12, 0x56, 0x0a, 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0f, 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, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x10, 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, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x35, 0x0a, - 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, - 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x12, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x9a, 0x07, 0x0a, 0x10, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x56, 0x0a, + 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0a, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x3f, - 0x0a, 0x11, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x54, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x10, 0x01, - 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, - 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x22, 0x93, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, - 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x69, - 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x53, 0x0a, 0x14, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x32, 0xe2, 0x0c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xac, 0x01, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, + 0x63, 0x6b, 0x65, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x63, 0x6b, + 0x65, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0x0f, 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, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, + 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x10, 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, 0x52, 0x09, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x6c, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x3e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x26, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x54, 0x0a, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x03, + 0x22, 0x93, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, + 0x64, 0x12, 0x3c, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, + 0x6f, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x53, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, + 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x32, 0xb6, 0x10, 0x0a, 0x11, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0xac, 0x01, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, - 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x50, 0x92, 0x41, 0x28, 0x12, 0x11, 0x41, 0x64, 0x64, 0x20, 0x61, 0x6e, - 0x20, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x13, 0x41, 0x64, 0x64, - 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb3, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x5a, 0x92, 0x41, 0x38, 0x12, 0x0f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x61, - 0x20, 0x4e, 0x6f, 0x64, 0x65, 0x1a, 0x25, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x4e, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x61, 0x20, 0x70, 0x6d, 0x6d, 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0xbd, 0x01, 0x0a, 0x0e, - 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x24, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x92, 0x41, 0x35, - 0x12, 0x11, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x61, 0x20, 0x4e, - 0x6f, 0x64, 0x65, 0x1a, 0x20, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x20, 0x61, 0x20, 0x4e, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x6d, 0x6d, 0x2d, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x76, 0x31, - 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x09, - 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, - 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92, 0x41, - 0x2f, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x1a, 0x21, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, - 0x64, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x2e, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x9b, 0x01, 0x0a, - 0x07, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x92, 0x41, 0x28, 0x12, 0x08, 0x47, 0x65, - 0x74, 0x20, 0x4e, 0x6f, 0x64, 0x65, 0x1a, 0x1c, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, - 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x4e, 0x6f, 0x64, 0x65, 0x20, 0x62, 0x79, - 0x20, 0x49, 0x44, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x76, 0x31, 0x2f, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, - 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb2, 0x01, 0x0a, 0x0a, 0x41, - 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, - 0x92, 0x41, 0x3a, 0x12, 0x0d, 0x41, 0x64, 0x64, 0x20, 0x61, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x1a, 0x29, 0x41, 0x64, 0x64, 0x73, 0x20, 0x61, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x73, 0x65, - 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, - 0xb7, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x12, 0x22, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x92, 0x41, 0x35, 0x12, 0x0d, - 0x4c, 0x69, 0x73, 0x74, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x24, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, - 0x64, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, - 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0xaf, 0x01, 0x0a, 0x0b, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x44, 0x53, 0x12, 0x21, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, + 0x92, 0x41, 0x28, 0x12, 0x11, 0x41, 0x64, 0x64, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x13, 0x41, 0x64, 0x64, 0x73, 0x20, 0x61, 0x6e, 0x20, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0xb3, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, + 0x65, 0x12, 0x22, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, + 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x92, 0x41, 0x38, 0x12, + 0x0f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x61, 0x20, 0x4e, 0x6f, 0x64, 0x65, + 0x1a, 0x25, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x20, 0x61, 0x20, 0x6e, 0x65, + 0x77, 0x20, 0x4e, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x70, 0x6d, 0x6d, + 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, + 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0xbd, 0x01, 0x0a, 0x0e, 0x55, 0x6e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x25, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x92, 0x41, 0x35, 0x12, 0x11, 0x55, 0x6e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x61, 0x20, 0x4e, 0x6f, 0x64, 0x65, 0x1a, 0x20, + 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x20, 0x61, 0x20, 0x4e, 0x6f, + 0x64, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x6d, 0x6d, 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x4e, + 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92, 0x41, 0x2f, 0x12, 0x0a, 0x4c, 0x69, + 0x73, 0x74, 0x20, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x1a, 0x21, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x73, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x73, + 0x74, 0x20, 0x6f, 0x66, 0x20, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x9b, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4e, + 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x51, 0x92, 0x41, 0x28, 0x12, 0x08, 0x47, 0x65, 0x74, 0x20, 0x4e, 0x6f, 0x64, + 0x65, 0x1a, 0x1c, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, + 0x67, 0x6c, 0x65, 0x20, 0x4e, 0x6f, 0x64, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x2e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb2, 0x01, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x92, 0x41, 0x3a, 0x12, 0x0d, + 0x41, 0x64, 0x64, 0x20, 0x61, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x29, 0x41, + 0x64, 0x64, 0x73, 0x20, 0x61, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x61, 0x6e, + 0x64, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, + 0x20, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, + 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0xb0, 0x01, 0x0a, 0x0c, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x23, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x92, 0x41, 0x35, 0x12, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x20, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x24, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x73, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x73, + 0x74, 0x20, 0x6f, 0x66, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0xaf, 0x01, + 0x0a, 0x0b, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x44, 0x53, 0x12, 0x21, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x44, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x22, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x44, 0x53, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0x92, 0x41, 0x28, 0x12, 0x0c, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x20, 0x52, 0x44, 0x53, 0x1a, 0x18, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x73, 0x20, 0x52, 0x44, 0x53, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x3a, 0x01, 0x2a, 0x22, 0x23, 0x2f, 0x76, 0x31, 0x2f, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x3a, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x44, 0x53, 0x12, + 0x8f, 0x02, 0x0a, 0x15, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, 0x75, 0x72, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x2b, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x52, 0x44, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x44, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x59, 0x92, 0x41, 0x28, 0x12, 0x0c, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, - 0x52, 0x44, 0x53, 0x1a, 0x18, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x20, 0x52, - 0x44, 0x53, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x28, 0x3a, 0x01, 0x2a, 0x22, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x3a, - 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x44, 0x53, 0x12, 0xc7, 0x01, 0x0a, 0x0d, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x23, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6b, 0x92, 0x41, 0x3c, 0x12, 0x10, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x61, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, - 0x28, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x20, 0x61, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x69, 0x74, - 0x73, 0x20, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x2a, - 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x42, 0xad, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, - 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4d, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x4d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0d, 0x4d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x19, 0x4d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x72, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, + 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9a, 0x01, 0x92, 0x41, 0x67, 0x12, 0x17, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x20, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x20, 0x44, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x1a, 0x4c, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x20, 0x41, + 0x7a, 0x75, 0x72, 0x65, 0x20, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x2c, 0x20, 0x4d, 0x61, 0x72, 0x69, 0x61, 0x44, 0x42, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x20, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x3a, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, 0x75, 0x72, + 0x65, 0x12, 0xc6, 0x01, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x26, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x64, 0x64, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x92, 0x41, 0x36, 0x12, 0x12, 0x41, 0x64, + 0x64, 0x20, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x20, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x1a, 0x20, 0x41, 0x64, 0x64, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x20, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x76, 0x31, + 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x12, 0xc7, 0x01, 0x0a, 0x0d, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x23, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6b, 0x92, 0x41, 0x3c, 0x12, 0x10, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x61, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x28, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x20, 0x61, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x69, 0x74, 0x73, + 0x20, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x2a, 0x24, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x7d, 0x42, 0xad, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, + 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x76, + 0x31, 0xa2, 0x02, 0x03, 0x4d, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0d, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x19, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1119,44 +1150,48 @@ var ( file_management_v1_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) file_management_v1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 8) file_management_v1_service_proto_goTypes = []interface{}{ - (UniversalService_Status)(0), // 0: management.v1.UniversalService.Status - (*AddServiceRequest)(nil), // 1: management.v1.AddServiceRequest - (*AddServiceResponse)(nil), // 2: management.v1.AddServiceResponse - (*RemoveServiceRequest)(nil), // 3: management.v1.RemoveServiceRequest - (*RemoveServiceResponse)(nil), // 4: management.v1.RemoveServiceResponse - (*UniversalService)(nil), // 5: management.v1.UniversalService - (*ListServicesRequest)(nil), // 6: management.v1.ListServicesRequest - (*ListServicesResponse)(nil), // 7: management.v1.ListServicesResponse - nil, // 8: management.v1.UniversalService.CustomLabelsEntry - (*AddMySQLServiceParams)(nil), // 9: management.v1.AddMySQLServiceParams - (*AddMongoDBServiceParams)(nil), // 10: management.v1.AddMongoDBServiceParams - (*AddPostgreSQLServiceParams)(nil), // 11: management.v1.AddPostgreSQLServiceParams - (*AddProxySQLServiceParams)(nil), // 12: management.v1.AddProxySQLServiceParams - (*AddHAProxyServiceParams)(nil), // 13: management.v1.AddHAProxyServiceParams - (*AddExternalServiceParams)(nil), // 14: management.v1.AddExternalServiceParams - (*AddRDSServiceParams)(nil), // 15: management.v1.AddRDSServiceParams - (*MySQLServiceResult)(nil), // 16: management.v1.MySQLServiceResult - (*MongoDBServiceResult)(nil), // 17: management.v1.MongoDBServiceResult - (*PostgreSQLServiceResult)(nil), // 18: management.v1.PostgreSQLServiceResult - (*ProxySQLServiceResult)(nil), // 19: management.v1.ProxySQLServiceResult - (*HAProxyServiceResult)(nil), // 20: management.v1.HAProxyServiceResult - (*ExternalServiceResult)(nil), // 21: management.v1.ExternalServiceResult - (*RDSServiceResult)(nil), // 22: management.v1.RDSServiceResult - (v1.ServiceType)(0), // 23: inventory.v1.ServiceType - (*timestamppb.Timestamp)(nil), // 24: google.protobuf.Timestamp - (*UniversalAgent)(nil), // 25: management.v1.UniversalAgent - (*AddAnnotationRequest)(nil), // 26: management.v1.AddAnnotationRequest - (*RegisterNodeRequest)(nil), // 27: management.v1.RegisterNodeRequest - (*UnregisterNodeRequest)(nil), // 28: management.v1.UnregisterNodeRequest - (*ListNodesRequest)(nil), // 29: management.v1.ListNodesRequest - (*GetNodeRequest)(nil), // 30: management.v1.GetNodeRequest - (*DiscoverRDSRequest)(nil), // 31: management.v1.DiscoverRDSRequest - (*AddAnnotationResponse)(nil), // 32: management.v1.AddAnnotationResponse - (*RegisterNodeResponse)(nil), // 33: management.v1.RegisterNodeResponse - (*UnregisterNodeResponse)(nil), // 34: management.v1.UnregisterNodeResponse - (*ListNodesResponse)(nil), // 35: management.v1.ListNodesResponse - (*GetNodeResponse)(nil), // 36: management.v1.GetNodeResponse - (*DiscoverRDSResponse)(nil), // 37: management.v1.DiscoverRDSResponse + (UniversalService_Status)(0), // 0: management.v1.UniversalService.Status + (*AddServiceRequest)(nil), // 1: management.v1.AddServiceRequest + (*AddServiceResponse)(nil), // 2: management.v1.AddServiceResponse + (*RemoveServiceRequest)(nil), // 3: management.v1.RemoveServiceRequest + (*RemoveServiceResponse)(nil), // 4: management.v1.RemoveServiceResponse + (*UniversalService)(nil), // 5: management.v1.UniversalService + (*ListServicesRequest)(nil), // 6: management.v1.ListServicesRequest + (*ListServicesResponse)(nil), // 7: management.v1.ListServicesResponse + nil, // 8: management.v1.UniversalService.CustomLabelsEntry + (*AddMySQLServiceParams)(nil), // 9: management.v1.AddMySQLServiceParams + (*AddMongoDBServiceParams)(nil), // 10: management.v1.AddMongoDBServiceParams + (*AddPostgreSQLServiceParams)(nil), // 11: management.v1.AddPostgreSQLServiceParams + (*AddProxySQLServiceParams)(nil), // 12: management.v1.AddProxySQLServiceParams + (*AddHAProxyServiceParams)(nil), // 13: management.v1.AddHAProxyServiceParams + (*AddExternalServiceParams)(nil), // 14: management.v1.AddExternalServiceParams + (*AddRDSServiceParams)(nil), // 15: management.v1.AddRDSServiceParams + (*MySQLServiceResult)(nil), // 16: management.v1.MySQLServiceResult + (*MongoDBServiceResult)(nil), // 17: management.v1.MongoDBServiceResult + (*PostgreSQLServiceResult)(nil), // 18: management.v1.PostgreSQLServiceResult + (*ProxySQLServiceResult)(nil), // 19: management.v1.ProxySQLServiceResult + (*HAProxyServiceResult)(nil), // 20: management.v1.HAProxyServiceResult + (*ExternalServiceResult)(nil), // 21: management.v1.ExternalServiceResult + (*RDSServiceResult)(nil), // 22: management.v1.RDSServiceResult + (v1.ServiceType)(0), // 23: inventory.v1.ServiceType + (*timestamppb.Timestamp)(nil), // 24: google.protobuf.Timestamp + (*UniversalAgent)(nil), // 25: management.v1.UniversalAgent + (*AddAnnotationRequest)(nil), // 26: management.v1.AddAnnotationRequest + (*RegisterNodeRequest)(nil), // 27: management.v1.RegisterNodeRequest + (*UnregisterNodeRequest)(nil), // 28: management.v1.UnregisterNodeRequest + (*ListNodesRequest)(nil), // 29: management.v1.ListNodesRequest + (*GetNodeRequest)(nil), // 30: management.v1.GetNodeRequest + (*DiscoverRDSRequest)(nil), // 31: management.v1.DiscoverRDSRequest + (*DiscoverAzureDatabaseRequest)(nil), // 32: management.v1.DiscoverAzureDatabaseRequest + (*AddAzureDatabaseRequest)(nil), // 33: management.v1.AddAzureDatabaseRequest + (*AddAnnotationResponse)(nil), // 34: management.v1.AddAnnotationResponse + (*RegisterNodeResponse)(nil), // 35: management.v1.RegisterNodeResponse + (*UnregisterNodeResponse)(nil), // 36: management.v1.UnregisterNodeResponse + (*ListNodesResponse)(nil), // 37: management.v1.ListNodesResponse + (*GetNodeResponse)(nil), // 38: management.v1.GetNodeResponse + (*DiscoverRDSResponse)(nil), // 39: management.v1.DiscoverRDSResponse + (*DiscoverAzureDatabaseResponse)(nil), // 40: management.v1.DiscoverAzureDatabaseResponse + (*AddAzureDatabaseResponse)(nil), // 41: management.v1.AddAzureDatabaseResponse } ) @@ -1191,18 +1226,22 @@ var file_management_v1_service_proto_depIdxs = []int32{ 1, // 27: management.v1.ManagementService.AddService:input_type -> management.v1.AddServiceRequest 6, // 28: management.v1.ManagementService.ListServices:input_type -> management.v1.ListServicesRequest 31, // 29: management.v1.ManagementService.DiscoverRDS:input_type -> management.v1.DiscoverRDSRequest - 3, // 30: management.v1.ManagementService.RemoveService:input_type -> management.v1.RemoveServiceRequest - 32, // 31: management.v1.ManagementService.AddAnnotation:output_type -> management.v1.AddAnnotationResponse - 33, // 32: management.v1.ManagementService.RegisterNode:output_type -> management.v1.RegisterNodeResponse - 34, // 33: management.v1.ManagementService.UnregisterNode:output_type -> management.v1.UnregisterNodeResponse - 35, // 34: management.v1.ManagementService.ListNodes:output_type -> management.v1.ListNodesResponse - 36, // 35: management.v1.ManagementService.GetNode:output_type -> management.v1.GetNodeResponse - 2, // 36: management.v1.ManagementService.AddService:output_type -> management.v1.AddServiceResponse - 7, // 37: management.v1.ManagementService.ListServices:output_type -> management.v1.ListServicesResponse - 37, // 38: management.v1.ManagementService.DiscoverRDS:output_type -> management.v1.DiscoverRDSResponse - 4, // 39: management.v1.ManagementService.RemoveService:output_type -> management.v1.RemoveServiceResponse - 31, // [31:40] is the sub-list for method output_type - 22, // [22:31] is the sub-list for method input_type + 32, // 30: management.v1.ManagementService.DiscoverAzureDatabase:input_type -> management.v1.DiscoverAzureDatabaseRequest + 33, // 31: management.v1.ManagementService.AddAzureDatabase:input_type -> management.v1.AddAzureDatabaseRequest + 3, // 32: management.v1.ManagementService.RemoveService:input_type -> management.v1.RemoveServiceRequest + 34, // 33: management.v1.ManagementService.AddAnnotation:output_type -> management.v1.AddAnnotationResponse + 35, // 34: management.v1.ManagementService.RegisterNode:output_type -> management.v1.RegisterNodeResponse + 36, // 35: management.v1.ManagementService.UnregisterNode:output_type -> management.v1.UnregisterNodeResponse + 37, // 36: management.v1.ManagementService.ListNodes:output_type -> management.v1.ListNodesResponse + 38, // 37: management.v1.ManagementService.GetNode:output_type -> management.v1.GetNodeResponse + 2, // 38: management.v1.ManagementService.AddService:output_type -> management.v1.AddServiceResponse + 7, // 39: management.v1.ManagementService.ListServices:output_type -> management.v1.ListServicesResponse + 39, // 40: management.v1.ManagementService.DiscoverRDS:output_type -> management.v1.DiscoverRDSResponse + 40, // 41: management.v1.ManagementService.DiscoverAzureDatabase:output_type -> management.v1.DiscoverAzureDatabaseResponse + 41, // 42: management.v1.ManagementService.AddAzureDatabase:output_type -> management.v1.AddAzureDatabaseResponse + 4, // 43: management.v1.ManagementService.RemoveService:output_type -> management.v1.RemoveServiceResponse + 33, // [33:44] is the sub-list for method output_type + 22, // [22:33] is the sub-list for method input_type 22, // [22:22] is the sub-list for extension type_name 22, // [22:22] is the sub-list for extension extendee 0, // [0:22] is the sub-list for field type_name @@ -1215,6 +1254,7 @@ func file_management_v1_service_proto_init() { } file_management_v1_agent_proto_init() file_management_v1_annotation_proto_init() + file_management_v1_azure_proto_init() file_management_v1_external_proto_init() file_management_v1_haproxy_proto_init() file_management_v1_mongodb_proto_init() diff --git a/api/management/v1/service.pb.gw.go b/api/management/v1/service.pb.gw.go index 74793bacf2f..7e8b22c0f3d 100644 --- a/api/management/v1/service.pb.gw.go +++ b/api/management/v1/service.pb.gw.go @@ -253,11 +253,16 @@ func local_request_ManagementService_AddService_0(ctx context.Context, marshaler return msg, metadata, err } +var filter_ManagementService_ListServices_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + func request_ManagementService_ListServices_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ListServicesRequest var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ManagementService_ListServices_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -269,7 +274,10 @@ func local_request_ManagementService_ListServices_0(ctx context.Context, marshal var protoReq ListServicesRequest var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ManagementService_ListServices_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -301,6 +309,54 @@ func local_request_ManagementService_DiscoverRDS_0(ctx context.Context, marshale return msg, metadata, err } +func request_ManagementService_DiscoverAzureDatabase_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DiscoverAzureDatabaseRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.DiscoverAzureDatabase(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_ManagementService_DiscoverAzureDatabase_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DiscoverAzureDatabaseRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.DiscoverAzureDatabase(ctx, &protoReq) + return msg, metadata, err +} + +func request_ManagementService_AddAzureDatabase_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AddAzureDatabaseRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AddAzureDatabase(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_ManagementService_AddAzureDatabase_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AddAzureDatabaseRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.AddAzureDatabase(ctx, &protoReq) + return msg, metadata, err +} + var filter_ManagementService_RemoveService_0 = &utilities.DoubleArray{Encoding: map[string]int{"service_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} func request_ManagementService_RemoveService_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -516,7 +572,7 @@ func RegisterManagementServiceHandlerServer(ctx context.Context, mux *runtime.Se forward_ManagementService_AddService_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_ManagementService_ListServices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_ManagementService_ListServices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -524,7 +580,7 @@ func RegisterManagementServiceHandlerServer(ctx context.Context, mux *runtime.Se inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/management.v1.ManagementService/ListServices", runtime.WithHTTPPathPattern("/v1/management/Service/List")) + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/management.v1.ManagementService/ListServices", runtime.WithHTTPPathPattern("/v1/management/services")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -564,6 +620,54 @@ func RegisterManagementServiceHandlerServer(ctx context.Context, mux *runtime.Se forward_ManagementService_DiscoverRDS_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle("POST", pattern_ManagementService_DiscoverAzureDatabase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/management.v1.ManagementService/DiscoverAzureDatabase", runtime.WithHTTPPathPattern("/v1/management/services:discoverAzure")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_DiscoverAzureDatabase_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_DiscoverAzureDatabase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + + mux.Handle("POST", pattern_ManagementService_AddAzureDatabase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/management.v1.ManagementService/AddAzureDatabase", runtime.WithHTTPPathPattern("/v1/management/services/azure")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_AddAzureDatabase_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_AddAzureDatabase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle("DELETE", pattern_ManagementService_RemoveService_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -754,13 +858,13 @@ func RegisterManagementServiceHandlerClient(ctx context.Context, mux *runtime.Se forward_ManagementService_AddService_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_ManagementService_ListServices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_ManagementService_ListServices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/management.v1.ManagementService/ListServices", runtime.WithHTTPPathPattern("/v1/management/Service/List")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/management.v1.ManagementService/ListServices", runtime.WithHTTPPathPattern("/v1/management/services")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -796,6 +900,48 @@ func RegisterManagementServiceHandlerClient(ctx context.Context, mux *runtime.Se forward_ManagementService_DiscoverRDS_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle("POST", pattern_ManagementService_DiscoverAzureDatabase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/management.v1.ManagementService/DiscoverAzureDatabase", runtime.WithHTTPPathPattern("/v1/management/services:discoverAzure")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_DiscoverAzureDatabase_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_DiscoverAzureDatabase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + + mux.Handle("POST", pattern_ManagementService_AddAzureDatabase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/management.v1.ManagementService/AddAzureDatabase", runtime.WithHTTPPathPattern("/v1/management/services/azure")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_AddAzureDatabase_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_AddAzureDatabase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle("DELETE", pattern_ManagementService_RemoveService_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -833,10 +979,14 @@ var ( pattern_ManagementService_AddService_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "management", "services"}, "")) - pattern_ManagementService_ListServices_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "management", "Service", "List"}, "")) + pattern_ManagementService_ListServices_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "management", "services"}, "")) pattern_ManagementService_DiscoverRDS_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "management", "services"}, "discoverRDS")) + pattern_ManagementService_DiscoverAzureDatabase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "management", "services"}, "discoverAzure")) + + pattern_ManagementService_AddAzureDatabase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "management", "services", "azure"}, "")) + pattern_ManagementService_RemoveService_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "management", "services", "service_id"}, "")) ) @@ -857,5 +1007,9 @@ var ( forward_ManagementService_DiscoverRDS_0 = runtime.ForwardResponseMessage + forward_ManagementService_DiscoverAzureDatabase_0 = runtime.ForwardResponseMessage + + forward_ManagementService_AddAzureDatabase_0 = runtime.ForwardResponseMessage + forward_ManagementService_RemoveService_0 = runtime.ForwardResponseMessage ) diff --git a/api/management/v1/service.proto b/api/management/v1/service.proto index 2e0f53caea8..66c7608d7b7 100644 --- a/api/management/v1/service.proto +++ b/api/management/v1/service.proto @@ -8,6 +8,7 @@ import "inventory/v1/nodes.proto"; import "inventory/v1/services.proto"; import "management/v1/agent.proto"; import "management/v1/annotation.proto"; +import "management/v1/azure.proto"; import "management/v1/external.proto"; import "management/v1/haproxy.proto"; import "management/v1/mongodb.proto"; @@ -209,10 +210,7 @@ service ManagementService { } // ListServices returns a list of Services with a rich set of properties. rpc ListServices(ListServicesRequest) returns (ListServicesResponse) { - option (google.api.http) = { - post: "/v1/management/Service/List" - body: "*" - }; + option (google.api.http) = {get: "/v1/management/services"}; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { summary: "List Services" description: "Returns a filtered list of Services." @@ -229,6 +227,28 @@ service ManagementService { description: "Discovers RDS instances." }; } + // DiscoverAzureDatabase discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances. + rpc DiscoverAzureDatabase(DiscoverAzureDatabaseRequest) returns (DiscoverAzureDatabaseResponse) { + option (google.api.http) = { + post: "/v1/management/services:discoverAzure" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "Discover Azure Database" + description: "Discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances." + }; + } + // AddAzureDatabase adds Azure Database instance. + rpc AddAzureDatabase(AddAzureDatabaseRequest) returns (AddAzureDatabaseResponse) { + option (google.api.http) = { + post: "/v1/management/services/azure" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "Add Azure Database" + description: "Adds an Azure Database instance." + }; + } // RemoveService removes a Service along with its Agents. rpc RemoveService(RemoveServiceRequest) returns (RemoveServiceResponse) { option (google.api.http) = {delete: "/v1/management/services/{service_id}"}; diff --git a/api/management/v1/service/json/client/management_v1_beta1_service/management_v1_beta1_service_client.go b/api/management/v1/service/json/client/management_v1_beta1_service/management_v1_beta1_service_client.go index 3a52da399e7..496ced0dc09 100644 --- a/api/management/v1/service/json/client/management_v1_beta1_service/management_v1_beta1_service_client.go +++ b/api/management/v1/service/json/client/management_v1_beta1_service/management_v1_beta1_service_client.go @@ -28,93 +28,11 @@ type ClientOption func(*runtime.ClientOperation) // ClientService is the interface for Client methods type ClientService interface { - AddAzureDatabase(params *AddAzureDatabaseParams, opts ...ClientOption) (*AddAzureDatabaseOK, error) - - DiscoverAzureDatabase(params *DiscoverAzureDatabaseParams, opts ...ClientOption) (*DiscoverAzureDatabaseOK, error) - ListAgents(params *ListAgentsParams, opts ...ClientOption) (*ListAgentsOK, error) SetTransport(transport runtime.ClientTransport) } -/* -AddAzureDatabase adds azure database - -Adds an Azure Database instance. -*/ -func (a *Client) AddAzureDatabase(params *AddAzureDatabaseParams, opts ...ClientOption) (*AddAzureDatabaseOK, error) { - // TODO: Validate the params before sending - if params == nil { - params = NewAddAzureDatabaseParams() - } - op := &runtime.ClientOperation{ - ID: "AddAzureDatabase", - Method: "POST", - PathPattern: "/v1/management/AzureDatabase/Add", - ProducesMediaTypes: []string{"application/json"}, - ConsumesMediaTypes: []string{"application/json"}, - Schemes: []string{"http", "https"}, - Params: params, - Reader: &AddAzureDatabaseReader{formats: a.formats}, - Context: params.Context, - Client: params.HTTPClient, - } - for _, opt := range opts { - opt(op) - } - - result, err := a.transport.Submit(op) - if err != nil { - return nil, err - } - success, ok := result.(*AddAzureDatabaseOK) - if ok { - return success, nil - } - // unexpected success response - unexpectedSuccess := result.(*AddAzureDatabaseDefault) - return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) -} - -/* -DiscoverAzureDatabase discovers azure database - -Discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances. -*/ -func (a *Client) DiscoverAzureDatabase(params *DiscoverAzureDatabaseParams, opts ...ClientOption) (*DiscoverAzureDatabaseOK, error) { - // TODO: Validate the params before sending - if params == nil { - params = NewDiscoverAzureDatabaseParams() - } - op := &runtime.ClientOperation{ - ID: "DiscoverAzureDatabase", - Method: "POST", - PathPattern: "/v1/management/AzureDatabase/Discover", - ProducesMediaTypes: []string{"application/json"}, - ConsumesMediaTypes: []string{"application/json"}, - Schemes: []string{"http", "https"}, - Params: params, - Reader: &DiscoverAzureDatabaseReader{formats: a.formats}, - Context: params.Context, - Client: params.HTTPClient, - } - for _, opt := range opts { - opt(op) - } - - result, err := a.transport.Submit(op) - if err != nil { - return nil, err - } - success, ok := result.(*DiscoverAzureDatabaseOK) - if ok { - return success, nil - } - // unexpected success response - unexpectedSuccess := result.(*DiscoverAzureDatabaseDefault) - return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) -} - /* ListAgents lists agents diff --git a/api/management/v1/service/json/service.json b/api/management/v1/service/json/service.json index d91f20c5090..045bdbde690 100644 --- a/api/management/v1/service/json/service.json +++ b/api/management/v1/service/json/service.json @@ -402,355 +402,6 @@ } } } - }, - "/v1/management/AzureDatabase/Add": { - "post": { - "description": "Adds an Azure Database instance.", - "tags": [ - "ManagementV1Beta1Service" - ], - "summary": "Add Azure Database", - "operationId": "AddAzureDatabase", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "address": { - "description": "Address used to connect to it.", - "type": "string", - "x-order": 4 - }, - "az": { - "description": "Azure database availability zone.", - "type": "string", - "x-order": 1 - }, - "azure_client_id": { - "description": "Azure client ID.", - "type": "string", - "x-order": 11 - }, - "azure_client_secret": { - "description": "Azure client secret.", - "type": "string", - "x-order": 12 - }, - "azure_database_exporter": { - "description": "If true, adds azure_database_exporter.", - "type": "boolean", - "x-order": 16 - }, - "azure_resource_group": { - "description": "Azure resource group.", - "type": "string", - "x-order": 15 - }, - "azure_subscription_id": { - "description": "Azure subscription ID.", - "type": "string", - "x-order": 14 - }, - "azure_tenant_id": { - "description": "Azure tanant ID.", - "type": "string", - "x-order": 13 - }, - "custom_labels": { - "description": "Custom user-assigned labels for Node and Service.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 18 - }, - "disable_query_examples": { - "description": "Disable query examples.", - "type": "boolean", - "x-order": 22 - }, - "environment": { - "description": "Environment name.", - "type": "string", - "x-order": 8 - }, - "instance_id": { - "description": "Azure database instance ID.", - "type": "string", - "x-order": 2 - }, - "node_model": { - "description": "Represents a purchasable Stock Keeping Unit (SKU) under a product.\nhttps://docs.microsoft.com/en-us/partner-center/develop/product-resources#sku.", - "type": "string", - "x-order": 3 - }, - "node_name": { - "description": "Unique across all Nodes user-defined name. Defaults to Azure Database instance ID.", - "type": "string", - "x-order": 6 - }, - "password": { - "description": "Password for scraping metrics.", - "type": "string", - "x-order": 10 - }, - "port": { - "description": "Access port.", - "type": "integer", - "format": "int64", - "x-order": 5 - }, - "qan": { - "description": "If true, adds qan-mysql-perfschema-agent or qan-postgresql-pgstatements-agent.", - "type": "boolean", - "x-order": 17 - }, - "region": { - "description": "Azure database location.", - "type": "string", - "x-order": 0 - }, - "service_name": { - "description": "Unique across all Services user-defined name. Defaults to Azure Database instance ID.", - "type": "string", - "x-order": 7 - }, - "skip_connection_check": { - "description": "Skip connection check.", - "type": "boolean", - "x-order": 19 - }, - "tablestats_group_table_limit": { - "description": "Tablestats group collectors will be disabled if there are more than that number of tables.\nIf zero, server's default value is used.\nUse negative value to disable them.", - "type": "integer", - "format": "int32", - "x-order": 23 - }, - "tls": { - "description": "Use TLS for database connections.", - "type": "boolean", - "x-order": 20 - }, - "tls_skip_verify": { - "description": "Skip TLS certificate and hostname validation.", - "type": "boolean", - "x-order": 21 - }, - "type": { - "description": "DiscoverAzureDatabaseType describes supported Azure Database instance engines.\n\n - DISCOVER_AZURE_DATABASE_TYPE_MYSQL: MySQL type: microsoft.dbformysql or MariaDB type: microsoft.dbformariadb\n - DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL: PostgreSQL type: microsoft.dbformysql", - "type": "string", - "default": "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", - "enum": [ - "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", - "DISCOVER_AZURE_DATABASE_TYPE_MYSQL", - "DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL" - ], - "x-order": 24 - }, - "username": { - "description": "Username for scraping metrics.", - "type": "string", - "x-order": 9 - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32", - "x-order": 0 - }, - "details": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@type": { - "type": "string", - "x-order": 0 - } - }, - "additionalProperties": false - }, - "x-order": 2 - }, - "message": { - "type": "string", - "x-order": 1 - } - } - } - } - } - } - }, - "/v1/management/AzureDatabase/Discover": { - "post": { - "description": "Discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances.", - "tags": [ - "ManagementV1Beta1Service" - ], - "summary": "Discover Azure Database", - "operationId": "DiscoverAzureDatabase", - "parameters": [ - { - "description": "DiscoverAzureDatabaseRequest discover azure databases request.", - "name": "body", - "in": "body", - "required": true, - "schema": { - "description": "DiscoverAzureDatabaseRequest discover azure databases request.", - "type": "object", - "properties": { - "azure_client_id": { - "description": "Azure client ID.", - "type": "string", - "x-order": 0 - }, - "azure_client_secret": { - "description": "Azure client secret.", - "type": "string", - "x-order": 1 - }, - "azure_subscription_id": { - "description": "Azure subscription ID.", - "type": "string", - "x-order": 3 - }, - "azure_tenant_id": { - "description": "Azure tanant ID.", - "type": "string", - "x-order": 2 - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "description": "DiscoverAzureDatabaseResponse discover azure databases response.", - "type": "object", - "properties": { - "azure_database_instance": { - "type": "array", - "items": { - "description": "DiscoverAzureDatabaseInstance models an unique Azure Database instance for the list of instances returned by Discovery.", - "type": "object", - "properties": { - "address": { - "description": "Address used to connect to it.", - "type": "string", - "x-order": 4 - }, - "az": { - "description": "Azure database availability zone.", - "type": "string", - "x-order": 8 - }, - "azure_resource_group": { - "description": "Azure Resource group.", - "type": "string", - "x-order": 5 - }, - "environment": { - "description": "Environment tag.", - "type": "string", - "x-order": 6 - }, - "instance_id": { - "description": "Azure database instance ID.", - "type": "string", - "x-order": 0 - }, - "node_model": { - "description": "Represents a purchasable Stock Keeping Unit (SKU) under a product.\nhttps://docs.microsoft.com/en-us/partner-center/develop/product-resources#sku.", - "type": "string", - "x-order": 9 - }, - "region": { - "description": "Azure database location.", - "type": "string", - "x-order": 1 - }, - "service_name": { - "description": "Azure database server name.", - "type": "string", - "x-order": 2 - }, - "type": { - "description": "DiscoverAzureDatabaseType describes supported Azure Database instance engines.\n\n - DISCOVER_AZURE_DATABASE_TYPE_MYSQL: MySQL type: microsoft.dbformysql or MariaDB type: microsoft.dbformariadb\n - DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL: PostgreSQL type: microsoft.dbformysql", - "type": "string", - "default": "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", - "enum": [ - "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", - "DISCOVER_AZURE_DATABASE_TYPE_MYSQL", - "DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL" - ], - "x-order": 7 - }, - "username": { - "description": "Database username.", - "type": "string", - "x-order": 3 - } - } - }, - "x-order": 0 - } - } - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32", - "x-order": 0 - }, - "details": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@type": { - "type": "string", - "x-order": 0 - } - }, - "additionalProperties": false - }, - "x-order": 2 - }, - "message": { - "type": "string", - "x-order": 1 - } - } - } - } - } - } } }, "tags": [ diff --git a/api/management/v1/service/service.pb.go b/api/management/v1/service/service.pb.go index 55860a1f6e0..0558bb587fe 100644 --- a/api/management/v1/service/service.pb.go +++ b/api/management/v1/service/service.pb.go @@ -15,7 +15,6 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" v1 "github.com/percona/pmm/api/management/v1" - azure "github.com/percona/pmm/api/management/v1/azure" ) const ( @@ -35,87 +34,47 @@ var file_management_v1_service_service_proto_rawDesc = []byte{ 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x61, - 0x7a, 0x75, 0x72, 0x65, 0x2f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, - 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x32, 0xa6, 0x05, 0x0a, 0x18, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, - 0x31, 0x42, 0x65, 0x74, 0x61, 0x31, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xab, 0x01, - 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x58, 0x92, 0x41, 0x31, 0x12, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x73, 0x1a, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x41, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, - 0x22, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2f, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x8f, 0x02, 0x0a, 0x15, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x2b, 0x2e, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, - 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x7a, 0x75, 0x72, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x9a, 0x01, 0x92, 0x41, 0x67, 0x12, 0x17, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x20, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x20, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x1a, - 0x4c, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x20, 0x41, 0x7a, 0x75, 0x72, 0x65, - 0x20, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x4d, 0x79, - 0x53, 0x51, 0x4c, 0x2c, 0x20, 0x4d, 0x61, 0x72, 0x69, 0x61, 0x44, 0x42, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x2f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0xc9, 0x01, - 0x0a, 0x10, 0x41, 0x64, 0x64, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x12, 0x26, 0x2e, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x61, 0x7a, 0x75, - 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x7a, - 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x64, 0x92, 0x41, 0x36, 0x12, 0x12, 0x41, 0x64, 0x64, 0x20, 0x41, 0x7a, - 0x75, 0x72, 0x65, 0x20, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x1a, 0x20, 0x41, 0x64, - 0x64, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x20, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x41, 0x64, 0x64, 0x42, 0xc1, 0x01, 0x0a, 0x13, 0x63, 0x6f, - 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x42, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, - 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x3b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0xa2, 0x02, 0x03, 0x53, 0x58, 0x58, 0xaa, 0x02, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x0f, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x1b, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, - 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x10, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, + 0xc8, 0x01, 0x0a, 0x18, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x31, + 0x42, 0x65, 0x74, 0x61, 0x31, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xab, 0x01, 0x0a, + 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x58, 0x92, 0x41, 0x31, 0x12, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x41, 0x67, 0x65, 0x6e, + 0x74, 0x73, 0x1a, 0x22, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, + 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x42, 0xc1, 0x01, 0x0a, 0x13, 0x63, + 0x6f, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x42, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, + 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x3b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x53, 0x58, 0x58, 0xaa, 0x02, 0x0f, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x0f, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x1b, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x10, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var file_management_v1_service_service_proto_goTypes = []interface{}{ - (*v1.ListAgentsRequest)(nil), // 0: management.v1.ListAgentsRequest - (*azure.DiscoverAzureDatabaseRequest)(nil), // 1: azure.v1beta1.DiscoverAzureDatabaseRequest - (*azure.AddAzureDatabaseRequest)(nil), // 2: azure.v1beta1.AddAzureDatabaseRequest - (*v1.ListAgentsResponse)(nil), // 3: management.v1.ListAgentsResponse - (*azure.DiscoverAzureDatabaseResponse)(nil), // 4: azure.v1beta1.DiscoverAzureDatabaseResponse - (*azure.AddAzureDatabaseResponse)(nil), // 5: azure.v1beta1.AddAzureDatabaseResponse + (*v1.ListAgentsRequest)(nil), // 0: management.v1.ListAgentsRequest + (*v1.ListAgentsResponse)(nil), // 1: management.v1.ListAgentsResponse } var file_management_v1_service_service_proto_depIdxs = []int32{ 0, // 0: service.v1beta1.ManagementV1Beta1Service.ListAgents:input_type -> management.v1.ListAgentsRequest - 1, // 1: service.v1beta1.ManagementV1Beta1Service.DiscoverAzureDatabase:input_type -> azure.v1beta1.DiscoverAzureDatabaseRequest - 2, // 2: service.v1beta1.ManagementV1Beta1Service.AddAzureDatabase:input_type -> azure.v1beta1.AddAzureDatabaseRequest - 3, // 3: service.v1beta1.ManagementV1Beta1Service.ListAgents:output_type -> management.v1.ListAgentsResponse - 4, // 4: service.v1beta1.ManagementV1Beta1Service.DiscoverAzureDatabase:output_type -> azure.v1beta1.DiscoverAzureDatabaseResponse - 5, // 5: service.v1beta1.ManagementV1Beta1Service.AddAzureDatabase:output_type -> azure.v1beta1.AddAzureDatabaseResponse - 3, // [3:6] is the sub-list for method output_type - 0, // [0:3] is the sub-list for method input_type + 1, // 1: service.v1beta1.ManagementV1Beta1Service.ListAgents:output_type -> management.v1.ListAgentsResponse + 1, // [1:2] is the sub-list for method output_type + 0, // [0:1] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name diff --git a/api/management/v1/service/service.pb.gw.go b/api/management/v1/service/service.pb.gw.go index d4164fdc6c1..710ca29ca13 100644 --- a/api/management/v1/service/service.pb.gw.go +++ b/api/management/v1/service/service.pb.gw.go @@ -23,7 +23,6 @@ import ( "google.golang.org/protobuf/proto" managementv1 "github.com/percona/pmm/api/management/v1" - azurev1beta1 "github.com/percona/pmm/api/management/v1/azure" ) // Suppress "imported and not used" errors @@ -60,54 +59,6 @@ func local_request_ManagementV1Beta1Service_ListAgents_0(ctx context.Context, ma return msg, metadata, err } -func request_ManagementV1Beta1Service_DiscoverAzureDatabase_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementV1Beta1ServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq azurev1beta1.DiscoverAzureDatabaseRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.DiscoverAzureDatabase(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err -} - -func local_request_ManagementV1Beta1Service_DiscoverAzureDatabase_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementV1Beta1ServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq azurev1beta1.DiscoverAzureDatabaseRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.DiscoverAzureDatabase(ctx, &protoReq) - return msg, metadata, err -} - -func request_ManagementV1Beta1Service_AddAzureDatabase_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementV1Beta1ServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq azurev1beta1.AddAzureDatabaseRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.AddAzureDatabase(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err -} - -func local_request_ManagementV1Beta1Service_AddAzureDatabase_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementV1Beta1ServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq azurev1beta1.AddAzureDatabaseRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.AddAzureDatabase(ctx, &protoReq) - return msg, metadata, err -} - // RegisterManagementV1Beta1ServiceHandlerServer registers the http handlers for service ManagementV1Beta1Service to "mux". // UnaryRPC :call ManagementV1Beta1ServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -137,54 +88,6 @@ func RegisterManagementV1Beta1ServiceHandlerServer(ctx context.Context, mux *run forward_ManagementV1Beta1Service_ListAgents_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_ManagementV1Beta1Service_DiscoverAzureDatabase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/service.v1beta1.ManagementV1Beta1Service/DiscoverAzureDatabase", runtime.WithHTTPPathPattern("/v1/management/AzureDatabase/Discover")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementV1Beta1Service_DiscoverAzureDatabase_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementV1Beta1Service_DiscoverAzureDatabase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_ManagementV1Beta1Service_AddAzureDatabase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/service.v1beta1.ManagementV1Beta1Service/AddAzureDatabase", runtime.WithHTTPPathPattern("/v1/management/AzureDatabase/Add")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementV1Beta1Service_AddAzureDatabase_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementV1Beta1Service_AddAzureDatabase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } @@ -246,63 +149,9 @@ func RegisterManagementV1Beta1ServiceHandlerClient(ctx context.Context, mux *run forward_ManagementV1Beta1Service_ListAgents_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_ManagementV1Beta1Service_DiscoverAzureDatabase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/service.v1beta1.ManagementV1Beta1Service/DiscoverAzureDatabase", runtime.WithHTTPPathPattern("/v1/management/AzureDatabase/Discover")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementV1Beta1Service_DiscoverAzureDatabase_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementV1Beta1Service_DiscoverAzureDatabase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_ManagementV1Beta1Service_AddAzureDatabase_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/service.v1beta1.ManagementV1Beta1Service/AddAzureDatabase", runtime.WithHTTPPathPattern("/v1/management/AzureDatabase/Add")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementV1Beta1Service_AddAzureDatabase_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementV1Beta1Service_AddAzureDatabase_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } -var ( - pattern_ManagementV1Beta1Service_ListAgents_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "management", "Agent", "List"}, "")) - - pattern_ManagementV1Beta1Service_DiscoverAzureDatabase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "management", "AzureDatabase", "Discover"}, "")) - - pattern_ManagementV1Beta1Service_AddAzureDatabase_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "management", "AzureDatabase", "Add"}, "")) -) +var pattern_ManagementV1Beta1Service_ListAgents_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "management", "Agent", "List"}, "")) -var ( - forward_ManagementV1Beta1Service_ListAgents_0 = runtime.ForwardResponseMessage - - forward_ManagementV1Beta1Service_DiscoverAzureDatabase_0 = runtime.ForwardResponseMessage - - forward_ManagementV1Beta1Service_AddAzureDatabase_0 = runtime.ForwardResponseMessage -) +var forward_ManagementV1Beta1Service_ListAgents_0 = runtime.ForwardResponseMessage diff --git a/api/management/v1/service/service.proto b/api/management/v1/service/service.proto index d734a9f9ece..f8812b0d09c 100644 --- a/api/management/v1/service/service.proto +++ b/api/management/v1/service/service.proto @@ -4,7 +4,6 @@ package service.v1beta1; import "google/api/annotations.proto"; import "management/v1/agent.proto"; -import "management/v1/azure/azure.proto"; import "protoc-gen-openapiv2/options/annotations.proto"; // NOTE: the GA version of /agents will be integrated into management/v1/agent.proto. @@ -22,26 +21,4 @@ service ManagementV1Beta1Service { description: "Returns a filtered list of Agents." }; } - // DiscoverAzureDatabase discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances. - rpc DiscoverAzureDatabase(azure.v1beta1.DiscoverAzureDatabaseRequest) returns (azure.v1beta1.DiscoverAzureDatabaseResponse) { - option (google.api.http) = { - post: "/v1/management/AzureDatabase/Discover" - body: "*" - }; - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { - summary: "Discover Azure Database" - description: "Discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances." - }; - } - // AddAzureDatabase adds Azure Database instance. - rpc AddAzureDatabase(azure.v1beta1.AddAzureDatabaseRequest) returns (azure.v1beta1.AddAzureDatabaseResponse) { - option (google.api.http) = { - post: "/v1/management/AzureDatabase/Add" - body: "*" - }; - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { - summary: "Add Azure Database" - description: "Adds an Azure Database instance." - }; - } } diff --git a/api/management/v1/service/service_grpc.pb.go b/api/management/v1/service/service_grpc.pb.go index 1a4f6b93b6a..aa48867d07a 100644 --- a/api/management/v1/service/service_grpc.pb.go +++ b/api/management/v1/service/service_grpc.pb.go @@ -14,7 +14,6 @@ import ( status "google.golang.org/grpc/status" v1 "github.com/percona/pmm/api/management/v1" - azure "github.com/percona/pmm/api/management/v1/azure" ) // This is a compile-time assertion to ensure that this generated file @@ -23,9 +22,7 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - ManagementV1Beta1Service_ListAgents_FullMethodName = "/service.v1beta1.ManagementV1Beta1Service/ListAgents" - ManagementV1Beta1Service_DiscoverAzureDatabase_FullMethodName = "/service.v1beta1.ManagementV1Beta1Service/DiscoverAzureDatabase" - ManagementV1Beta1Service_AddAzureDatabase_FullMethodName = "/service.v1beta1.ManagementV1Beta1Service/AddAzureDatabase" + ManagementV1Beta1Service_ListAgents_FullMethodName = "/service.v1beta1.ManagementV1Beta1Service/ListAgents" ) // ManagementV1Beta1ServiceClient is the client API for ManagementV1Beta1Service service. @@ -34,10 +31,6 @@ const ( type ManagementV1Beta1ServiceClient interface { // ListAgents returns a list of Agents filtered by service_id. ListAgents(ctx context.Context, in *v1.ListAgentsRequest, opts ...grpc.CallOption) (*v1.ListAgentsResponse, error) - // DiscoverAzureDatabase discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances. - DiscoverAzureDatabase(ctx context.Context, in *azure.DiscoverAzureDatabaseRequest, opts ...grpc.CallOption) (*azure.DiscoverAzureDatabaseResponse, error) - // AddAzureDatabase adds Azure Database instance. - AddAzureDatabase(ctx context.Context, in *azure.AddAzureDatabaseRequest, opts ...grpc.CallOption) (*azure.AddAzureDatabaseResponse, error) } type managementV1Beta1ServiceClient struct { @@ -57,34 +50,12 @@ func (c *managementV1Beta1ServiceClient) ListAgents(ctx context.Context, in *v1. return out, nil } -func (c *managementV1Beta1ServiceClient) DiscoverAzureDatabase(ctx context.Context, in *azure.DiscoverAzureDatabaseRequest, opts ...grpc.CallOption) (*azure.DiscoverAzureDatabaseResponse, error) { - out := new(azure.DiscoverAzureDatabaseResponse) - err := c.cc.Invoke(ctx, ManagementV1Beta1Service_DiscoverAzureDatabase_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *managementV1Beta1ServiceClient) AddAzureDatabase(ctx context.Context, in *azure.AddAzureDatabaseRequest, opts ...grpc.CallOption) (*azure.AddAzureDatabaseResponse, error) { - out := new(azure.AddAzureDatabaseResponse) - err := c.cc.Invoke(ctx, ManagementV1Beta1Service_AddAzureDatabase_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - // ManagementV1Beta1ServiceServer is the server API for ManagementV1Beta1Service service. // All implementations must embed UnimplementedManagementV1Beta1ServiceServer // for forward compatibility type ManagementV1Beta1ServiceServer interface { // ListAgents returns a list of Agents filtered by service_id. ListAgents(context.Context, *v1.ListAgentsRequest) (*v1.ListAgentsResponse, error) - // DiscoverAzureDatabase discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances. - DiscoverAzureDatabase(context.Context, *azure.DiscoverAzureDatabaseRequest) (*azure.DiscoverAzureDatabaseResponse, error) - // AddAzureDatabase adds Azure Database instance. - AddAzureDatabase(context.Context, *azure.AddAzureDatabaseRequest) (*azure.AddAzureDatabaseResponse, error) mustEmbedUnimplementedManagementV1Beta1ServiceServer() } @@ -95,14 +66,6 @@ func (UnimplementedManagementV1Beta1ServiceServer) ListAgents(context.Context, * return nil, status.Errorf(codes.Unimplemented, "method ListAgents not implemented") } -func (UnimplementedManagementV1Beta1ServiceServer) DiscoverAzureDatabase(context.Context, *azure.DiscoverAzureDatabaseRequest) (*azure.DiscoverAzureDatabaseResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DiscoverAzureDatabase not implemented") -} - -func (UnimplementedManagementV1Beta1ServiceServer) AddAzureDatabase(context.Context, *azure.AddAzureDatabaseRequest) (*azure.AddAzureDatabaseResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AddAzureDatabase not implemented") -} - func (UnimplementedManagementV1Beta1ServiceServer) mustEmbedUnimplementedManagementV1Beta1ServiceServer() { } @@ -135,42 +98,6 @@ func _ManagementV1Beta1Service_ListAgents_Handler(srv interface{}, ctx context.C return interceptor(ctx, in, info, handler) } -func _ManagementV1Beta1Service_DiscoverAzureDatabase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(azure.DiscoverAzureDatabaseRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementV1Beta1ServiceServer).DiscoverAzureDatabase(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: ManagementV1Beta1Service_DiscoverAzureDatabase_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementV1Beta1ServiceServer).DiscoverAzureDatabase(ctx, req.(*azure.DiscoverAzureDatabaseRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ManagementV1Beta1Service_AddAzureDatabase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(azure.AddAzureDatabaseRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementV1Beta1ServiceServer).AddAzureDatabase(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: ManagementV1Beta1Service_AddAzureDatabase_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementV1Beta1ServiceServer).AddAzureDatabase(ctx, req.(*azure.AddAzureDatabaseRequest)) - } - return interceptor(ctx, in, info, handler) -} - // ManagementV1Beta1Service_ServiceDesc is the grpc.ServiceDesc for ManagementV1Beta1Service service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -182,14 +109,6 @@ var ManagementV1Beta1Service_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListAgents", Handler: _ManagementV1Beta1Service_ListAgents_Handler, }, - { - MethodName: "DiscoverAzureDatabase", - Handler: _ManagementV1Beta1Service_DiscoverAzureDatabase_Handler, - }, - { - MethodName: "AddAzureDatabase", - Handler: _ManagementV1Beta1Service_AddAzureDatabase_Handler, - }, }, Streams: []grpc.StreamDesc{}, Metadata: "management/v1/service/service.proto", diff --git a/api/management/v1/service_grpc.pb.go b/api/management/v1/service_grpc.pb.go index 24c4e743637..a40dd9c22b4 100644 --- a/api/management/v1/service_grpc.pb.go +++ b/api/management/v1/service_grpc.pb.go @@ -20,15 +20,17 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - ManagementService_AddAnnotation_FullMethodName = "/management.v1.ManagementService/AddAnnotation" - ManagementService_RegisterNode_FullMethodName = "/management.v1.ManagementService/RegisterNode" - ManagementService_UnregisterNode_FullMethodName = "/management.v1.ManagementService/UnregisterNode" - ManagementService_ListNodes_FullMethodName = "/management.v1.ManagementService/ListNodes" - ManagementService_GetNode_FullMethodName = "/management.v1.ManagementService/GetNode" - ManagementService_AddService_FullMethodName = "/management.v1.ManagementService/AddService" - ManagementService_ListServices_FullMethodName = "/management.v1.ManagementService/ListServices" - ManagementService_DiscoverRDS_FullMethodName = "/management.v1.ManagementService/DiscoverRDS" - ManagementService_RemoveService_FullMethodName = "/management.v1.ManagementService/RemoveService" + ManagementService_AddAnnotation_FullMethodName = "/management.v1.ManagementService/AddAnnotation" + ManagementService_RegisterNode_FullMethodName = "/management.v1.ManagementService/RegisterNode" + ManagementService_UnregisterNode_FullMethodName = "/management.v1.ManagementService/UnregisterNode" + ManagementService_ListNodes_FullMethodName = "/management.v1.ManagementService/ListNodes" + ManagementService_GetNode_FullMethodName = "/management.v1.ManagementService/GetNode" + ManagementService_AddService_FullMethodName = "/management.v1.ManagementService/AddService" + ManagementService_ListServices_FullMethodName = "/management.v1.ManagementService/ListServices" + ManagementService_DiscoverRDS_FullMethodName = "/management.v1.ManagementService/DiscoverRDS" + ManagementService_DiscoverAzureDatabase_FullMethodName = "/management.v1.ManagementService/DiscoverAzureDatabase" + ManagementService_AddAzureDatabase_FullMethodName = "/management.v1.ManagementService/AddAzureDatabase" + ManagementService_RemoveService_FullMethodName = "/management.v1.ManagementService/RemoveService" ) // ManagementServiceClient is the client API for ManagementService service. @@ -51,6 +53,10 @@ type ManagementServiceClient interface { ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) // DiscoverRDS discovers RDS instances. DiscoverRDS(ctx context.Context, in *DiscoverRDSRequest, opts ...grpc.CallOption) (*DiscoverRDSResponse, error) + // DiscoverAzureDatabase discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances. + DiscoverAzureDatabase(ctx context.Context, in *DiscoverAzureDatabaseRequest, opts ...grpc.CallOption) (*DiscoverAzureDatabaseResponse, error) + // AddAzureDatabase adds Azure Database instance. + AddAzureDatabase(ctx context.Context, in *AddAzureDatabaseRequest, opts ...grpc.CallOption) (*AddAzureDatabaseResponse, error) // RemoveService removes a Service along with its Agents. RemoveService(ctx context.Context, in *RemoveServiceRequest, opts ...grpc.CallOption) (*RemoveServiceResponse, error) } @@ -135,6 +141,24 @@ func (c *managementServiceClient) DiscoverRDS(ctx context.Context, in *DiscoverR return out, nil } +func (c *managementServiceClient) DiscoverAzureDatabase(ctx context.Context, in *DiscoverAzureDatabaseRequest, opts ...grpc.CallOption) (*DiscoverAzureDatabaseResponse, error) { + out := new(DiscoverAzureDatabaseResponse) + err := c.cc.Invoke(ctx, ManagementService_DiscoverAzureDatabase_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) AddAzureDatabase(ctx context.Context, in *AddAzureDatabaseRequest, opts ...grpc.CallOption) (*AddAzureDatabaseResponse, error) { + out := new(AddAzureDatabaseResponse) + err := c.cc.Invoke(ctx, ManagementService_AddAzureDatabase_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *managementServiceClient) RemoveService(ctx context.Context, in *RemoveServiceRequest, opts ...grpc.CallOption) (*RemoveServiceResponse, error) { out := new(RemoveServiceResponse) err := c.cc.Invoke(ctx, ManagementService_RemoveService_FullMethodName, in, out, opts...) @@ -164,6 +188,10 @@ type ManagementServiceServer interface { ListServices(context.Context, *ListServicesRequest) (*ListServicesResponse, error) // DiscoverRDS discovers RDS instances. DiscoverRDS(context.Context, *DiscoverRDSRequest) (*DiscoverRDSResponse, error) + // DiscoverAzureDatabase discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances. + DiscoverAzureDatabase(context.Context, *DiscoverAzureDatabaseRequest) (*DiscoverAzureDatabaseResponse, error) + // AddAzureDatabase adds Azure Database instance. + AddAzureDatabase(context.Context, *AddAzureDatabaseRequest) (*AddAzureDatabaseResponse, error) // RemoveService removes a Service along with its Agents. RemoveService(context.Context, *RemoveServiceRequest) (*RemoveServiceResponse, error) mustEmbedUnimplementedManagementServiceServer() @@ -204,6 +232,14 @@ func (UnimplementedManagementServiceServer) DiscoverRDS(context.Context, *Discov return nil, status.Errorf(codes.Unimplemented, "method DiscoverRDS not implemented") } +func (UnimplementedManagementServiceServer) DiscoverAzureDatabase(context.Context, *DiscoverAzureDatabaseRequest) (*DiscoverAzureDatabaseResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DiscoverAzureDatabase not implemented") +} + +func (UnimplementedManagementServiceServer) AddAzureDatabase(context.Context, *AddAzureDatabaseRequest) (*AddAzureDatabaseResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AddAzureDatabase not implemented") +} + func (UnimplementedManagementServiceServer) RemoveService(context.Context, *RemoveServiceRequest) (*RemoveServiceResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RemoveService not implemented") } @@ -364,6 +400,42 @@ func _ManagementService_DiscoverRDS_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } +func _ManagementService_DiscoverAzureDatabase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DiscoverAzureDatabaseRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).DiscoverAzureDatabase(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ManagementService_DiscoverAzureDatabase_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).DiscoverAzureDatabase(ctx, req.(*DiscoverAzureDatabaseRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_AddAzureDatabase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddAzureDatabaseRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).AddAzureDatabase(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ManagementService_AddAzureDatabase_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).AddAzureDatabase(ctx, req.(*AddAzureDatabaseRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ManagementService_RemoveService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(RemoveServiceRequest) if err := dec(in); err != nil { @@ -421,6 +493,14 @@ var ManagementService_ServiceDesc = grpc.ServiceDesc{ MethodName: "DiscoverRDS", Handler: _ManagementService_DiscoverRDS_Handler, }, + { + MethodName: "DiscoverAzureDatabase", + Handler: _ManagementService_DiscoverAzureDatabase_Handler, + }, + { + MethodName: "AddAzureDatabase", + Handler: _ManagementService_AddAzureDatabase_Handler, + }, { MethodName: "RemoveService", Handler: _ManagementService_RemoveService_Handler, diff --git a/api/swagger/swagger-dev.json b/api/swagger/swagger-dev.json index b1bf5872452..e3ff40baea9 100644 --- a/api/swagger/swagger-dev.json +++ b/api/swagger/swagger-dev.json @@ -16724,157 +16724,49 @@ } } }, - "/v1/management/AzureDatabase/Add": { + "/v1/management/annotations": { "post": { - "description": "Adds an Azure Database instance.", + "description": "Adds an annotation.", "tags": [ - "ManagementV1Beta1Service" + "ManagementService" ], - "summary": "Add Azure Database", - "operationId": "AddAzureDatabase", + "summary": "Add an Annotation", + "operationId": "AddAnnotation", "parameters": [ { + "description": "AddAnnotationRequest is a params to add new annotation.", "name": "body", "in": "body", "required": true, "schema": { + "description": "AddAnnotationRequest is a params to add new annotation.", "type": "object", "properties": { - "region": { - "description": "Azure database location.", + "text": { + "description": "An annotation description. Required.", "type": "string", "x-order": 0 }, - "az": { - "description": "Azure database availability zone.", - "type": "string", + "tags": { + "description": "Tags are used to filter annotations.", + "type": "array", + "items": { + "type": "string" + }, "x-order": 1 }, - "instance_id": { - "description": "Azure database instance ID.", - "type": "string", - "x-order": 2 - }, - "node_model": { - "description": "Represents a purchasable Stock Keeping Unit (SKU) under a product.\nhttps://docs.microsoft.com/en-us/partner-center/develop/product-resources#sku.", - "type": "string", - "x-order": 3 - }, - "address": { - "description": "Address used to connect to it.", - "type": "string", - "x-order": 4 - }, - "port": { - "description": "Access port.", - "type": "integer", - "format": "int64", - "x-order": 5 - }, "node_name": { - "description": "Unique across all Nodes user-defined name. Defaults to Azure Database instance ID.", - "type": "string", - "x-order": 6 - }, - "service_name": { - "description": "Unique across all Services user-defined name. Defaults to Azure Database instance ID.", - "type": "string", - "x-order": 7 - }, - "environment": { - "description": "Environment name.", - "type": "string", - "x-order": 8 - }, - "username": { - "description": "Username for scraping metrics.", - "type": "string", - "x-order": 9 - }, - "password": { - "description": "Password for scraping metrics.", - "type": "string", - "x-order": 10 - }, - "azure_client_id": { - "description": "Azure client ID.", - "type": "string", - "x-order": 11 - }, - "azure_client_secret": { - "description": "Azure client secret.", - "type": "string", - "x-order": 12 - }, - "azure_tenant_id": { - "description": "Azure tanant ID.", - "type": "string", - "x-order": 13 - }, - "azure_subscription_id": { - "description": "Azure subscription ID.", - "type": "string", - "x-order": 14 - }, - "azure_resource_group": { - "description": "Azure resource group.", + "description": "Used for annotating a node.", "type": "string", - "x-order": 15 - }, - "azure_database_exporter": { - "description": "If true, adds azure_database_exporter.", - "type": "boolean", - "x-order": 16 - }, - "qan": { - "description": "If true, adds qan-mysql-perfschema-agent or qan-postgresql-pgstatements-agent.", - "type": "boolean", - "x-order": 17 + "x-order": 2 }, - "custom_labels": { - "description": "Custom user-assigned labels for Node and Service.", - "type": "object", - "additionalProperties": { + "service_names": { + "description": "Used for annotating services.", + "type": "array", + "items": { "type": "string" }, - "x-order": 18 - }, - "skip_connection_check": { - "description": "Skip connection check.", - "type": "boolean", - "x-order": 19 - }, - "tls": { - "description": "Use TLS for database connections.", - "type": "boolean", - "x-order": 20 - }, - "tls_skip_verify": { - "description": "Skip TLS certificate and hostname validation.", - "type": "boolean", - "x-order": 21 - }, - "disable_query_examples": { - "description": "Disable query examples.", - "type": "boolean", - "x-order": 22 - }, - "tablestats_group_table_limit": { - "description": "Tablestats group collectors will be disabled if there are more than that number of tables.\nIf zero, server's default value is used.\nUse negative value to disable them.", - "type": "integer", - "format": "int32", - "x-order": 23 - }, - "type": { - "description": "DiscoverAzureDatabaseType describes supported Azure Database instance engines.\n\n - DISCOVER_AZURE_DATABASE_TYPE_MYSQL: MySQL type: microsoft.dbformysql or MariaDB type: microsoft.dbformariadb\n - DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL: PostgreSQL type: microsoft.dbformysql", - "type": "string", - "default": "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", - "enum": [ - "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", - "DISCOVER_AZURE_DATABASE_TYPE_MYSQL", - "DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL" - ], - "x-order": 24 + "x-order": 3 } } } @@ -16921,117 +16813,185 @@ } } }, - "/v1/management/AzureDatabase/Discover": { - "post": { - "description": "Discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances.", + "/v1/management/nodes": { + "get": { + "description": "Returns a filtered list of Nodes.", "tags": [ - "ManagementV1Beta1Service" + "ManagementService" ], - "summary": "Discover Azure Database", - "operationId": "DiscoverAzureDatabase", + "summary": "List Nodes", + "operationId": "ListNodesMixin3", "parameters": [ { - "description": "DiscoverAzureDatabaseRequest discover azure databases request.", - "name": "body", - "in": "body", - "required": true, - "schema": { - "description": "DiscoverAzureDatabaseRequest discover azure databases request.", - "type": "object", - "properties": { - "azure_client_id": { - "description": "Azure client ID.", - "type": "string", - "x-order": 0 - }, - "azure_client_secret": { - "description": "Azure client secret.", - "type": "string", - "x-order": 1 - }, - "azure_tenant_id": { - "description": "Azure tanant ID.", - "type": "string", - "x-order": 2 - }, - "azure_subscription_id": { - "description": "Azure subscription ID.", - "type": "string", - "x-order": 3 - } - } - } + "enum": [ + "NODE_TYPE_UNSPECIFIED", + "NODE_TYPE_GENERIC_NODE", + "NODE_TYPE_CONTAINER_NODE", + "NODE_TYPE_REMOTE_NODE", + "NODE_TYPE_REMOTE_RDS_NODE", + "NODE_TYPE_REMOTE_AZURE_DATABASE_NODE" + ], + "type": "string", + "default": "NODE_TYPE_UNSPECIFIED", + "description": "Node type to be filtered out.", + "name": "node_type", + "in": "query" } ], "responses": { "200": { "description": "A successful response.", "schema": { - "description": "DiscoverAzureDatabaseResponse discover azure databases response.", "type": "object", "properties": { - "azure_database_instance": { + "nodes": { "type": "array", "items": { - "description": "DiscoverAzureDatabaseInstance models an unique Azure Database instance for the list of instances returned by Discovery.", "type": "object", "properties": { - "instance_id": { - "description": "Azure database instance ID.", + "node_id": { + "description": "Unique Node identifier.", "type": "string", "x-order": 0 }, - "region": { - "description": "Azure database location.", + "node_type": { + "description": "Node type.", "type": "string", "x-order": 1 }, - "service_name": { - "description": "Azure database server name.", + "node_name": { + "description": "User-defined node name.", "type": "string", "x-order": 2 }, - "username": { - "description": "Database username.", + "machine_id": { + "description": "Linux machine-id.", "type": "string", "x-order": 3 }, - "address": { - "description": "Address used to connect to it.", + "distro": { + "description": "Linux distribution name and version.", "type": "string", "x-order": 4 }, - "azure_resource_group": { - "description": "Azure Resource group.", + "node_model": { + "description": "Node model.", "type": "string", "x-order": 5 }, - "environment": { - "description": "Environment tag.", + "container_id": { + "description": "A node's unique docker container identifier.", "type": "string", "x-order": 6 }, - "type": { - "description": "DiscoverAzureDatabaseType describes supported Azure Database instance engines.\n\n - DISCOVER_AZURE_DATABASE_TYPE_MYSQL: MySQL type: microsoft.dbformysql or MariaDB type: microsoft.dbformariadb\n - DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL: PostgreSQL type: microsoft.dbformysql", + "container_name": { + "description": "Container name.", "type": "string", - "default": "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", - "enum": [ - "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", - "DISCOVER_AZURE_DATABASE_TYPE_MYSQL", - "DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL" - ], "x-order": 7 }, - "az": { - "description": "Azure database availability zone.", + "address": { + "description": "Node address (DNS name or IP).", "type": "string", "x-order": 8 }, - "node_model": { - "description": "Represents a purchasable Stock Keeping Unit (SKU) under a product.\nhttps://docs.microsoft.com/en-us/partner-center/develop/product-resources#sku.", + "region": { + "description": "Node region.", "type": "string", "x-order": 9 - } + }, + "az": { + "description": "Node availability zone.", + "type": "string", + "x-order": 10 + }, + "custom_labels": { + "description": "Custom user-assigned labels for Node.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 11 + }, + "created_at": { + "description": "Creation timestamp.", + "type": "string", + "format": "date-time", + "x-order": 12 + }, + "updated_at": { + "description": "Last update timestamp.", + "type": "string", + "format": "date-time", + "x-order": 13 + }, + "status": { + "description": "Node status.\n\n - STATUS_UNSPECIFIED: Invalid status.\n - STATUS_UP: The node is up.\n - STATUS_DOWN: The node is down.\n - STATUS_UNKNOWN: The node's status cannot be known (e.g. there are no metrics yet).", + "type": "string", + "default": "STATUS_UNSPECIFIED", + "enum": [ + "STATUS_UNSPECIFIED", + "STATUS_UP", + "STATUS_DOWN", + "STATUS_UNKNOWN" + ], + "x-order": 14 + }, + "agents": { + "description": "List of agents related to this node.", + "type": "array", + "items": { + "type": "object", + "properties": { + "agent_id": { + "description": "Unique Agent identifier.", + "type": "string", + "x-order": 0 + }, + "agent_type": { + "description": "Agent type.", + "type": "string", + "x-order": 1 + }, + "status": { + "description": "Actual Agent status.", + "type": "string", + "x-order": 2 + }, + "is_connected": { + "description": "True if Agent is running and connected to pmm-managed.", + "type": "boolean", + "x-order": 3 + } + } + }, + "x-order": 15 + }, + "services": { + "description": "List of services running on this node.", + "type": "array", + "items": { + "description": "Service represents a service running on a node.", + "type": "object", + "properties": { + "service_id": { + "description": "Unique Service identifier.", + "type": "string", + "x-order": 0 + }, + "service_type": { + "description": "Service type.", + "type": "string", + "x-order": 1 + }, + "service_name": { + "description": "Service name.", + "type": "string", + "x-order": 2 + } + } + }, + "x-order": 16 + } } }, "x-order": 0 @@ -17071,16 +17031,14 @@ } } } - } - }, - "/v1/management/Service/List": { + }, "post": { - "description": "Returns a filtered list of Services.", + "description": "Registers a new Node and a pmm-agent.", "tags": [ "ManagementService" ], - "summary": "List Services", - "operationId": "ListServicesMixin3", + "summary": "Register a Node", + "operationId": "RegisterNode", "parameters": [ { "name": "body", @@ -17089,30 +17047,106 @@ "schema": { "type": "object", "properties": { - "node_id": { - "description": "Return only Services running on that Node.", + "node_type": { + "description": "NodeType describes supported Node types.", "type": "string", + "default": "NODE_TYPE_UNSPECIFIED", + "enum": [ + "NODE_TYPE_UNSPECIFIED", + "NODE_TYPE_GENERIC_NODE", + "NODE_TYPE_CONTAINER_NODE", + "NODE_TYPE_REMOTE_NODE", + "NODE_TYPE_REMOTE_RDS_NODE", + "NODE_TYPE_REMOTE_AZURE_DATABASE_NODE" + ], "x-order": 0 }, - "service_type": { - "description": "ServiceType describes supported Service types.", + "node_name": { + "description": "A user-defined name unique across all Nodes.", "type": "string", - "default": "SERVICE_TYPE_UNSPECIFIED", - "enum": [ - "SERVICE_TYPE_UNSPECIFIED", - "SERVICE_TYPE_MYSQL_SERVICE", - "SERVICE_TYPE_MONGODB_SERVICE", - "SERVICE_TYPE_POSTGRESQL_SERVICE", - "SERVICE_TYPE_PROXYSQL_SERVICE", - "SERVICE_TYPE_HAPROXY_SERVICE", - "SERVICE_TYPE_EXTERNAL_SERVICE" - ], "x-order": 1 }, - "external_group": { - "description": "Return only services in this external group.", + "address": { + "description": "Node address (DNS name or IP).", "type": "string", "x-order": 2 + }, + "machine_id": { + "description": "Linux machine-id.", + "type": "string", + "x-order": 3 + }, + "distro": { + "description": "Linux distribution name and version.", + "type": "string", + "x-order": 4 + }, + "container_id": { + "description": "Container identifier. If specified, must be a unique Docker container identifier.", + "type": "string", + "x-order": 5 + }, + "container_name": { + "description": "Container name.", + "type": "string", + "x-order": 6 + }, + "node_model": { + "description": "Node model.", + "type": "string", + "x-order": 7 + }, + "region": { + "description": "Node region.", + "type": "string", + "x-order": 8 + }, + "az": { + "description": "Node availability zone.", + "type": "string", + "x-order": 9 + }, + "custom_labels": { + "description": "Custom user-assigned labels for Node.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 10 + }, + "reregister": { + "description": "If true, and Node with that name already exist, it will be removed with all dependent Services and Agents.", + "type": "boolean", + "x-order": 11 + }, + "metrics_mode": { + "description": "MetricsMode defines desired metrics mode for agent,\nit can be pull, push or auto mode chosen by server.\n\n - METRICS_MODE_UNSPECIFIED: Auto", + "type": "string", + "default": "METRICS_MODE_UNSPECIFIED", + "enum": [ + "METRICS_MODE_UNSPECIFIED", + "METRICS_MODE_PULL", + "METRICS_MODE_PUSH" + ], + "x-order": 12 + }, + "disable_collectors": { + "description": "List of collector names to disable in this exporter.", + "type": "array", + "items": { + "type": "string" + }, + "x-order": 13 + }, + "agent_password": { + "description": "Custom password for exporter endpoint /metrics.", + "type": "string", + "x-order": 14 + }, + "expose_exporter": { + "type": "boolean", + "title": "Optionally expose the exporter process on all public interfaces", + "x-order": 15 } } } @@ -17124,764 +17158,189 @@ "schema": { "type": "object", "properties": { - "services": { - "description": "List of Services.", - "type": "array", - "items": { - "type": "object", - "properties": { - "service_id": { - "description": "Unique service identifier.", - "type": "string", - "x-order": 0 - }, - "service_type": { - "description": "Service type.", - "type": "string", - "x-order": 1 - }, - "service_name": { - "description": "User-defined name unique across all Services.", - "type": "string", - "x-order": 2 - }, - "database_name": { - "description": "Database name.", - "type": "string", - "x-order": 3 - }, - "node_id": { - "description": "Node identifier where this instance runs.", - "type": "string", - "x-order": 4 - }, - "node_name": { - "description": "Node name where this instance runs.", - "type": "string", - "x-order": 5 - }, - "environment": { - "description": "Environment name.", - "type": "string", - "x-order": 6 - }, - "cluster": { - "description": "Cluster name.", - "type": "string", - "x-order": 7 - }, - "replication_set": { - "description": "Replication set name.", - "type": "string", - "x-order": 8 - }, - "custom_labels": { - "description": "Custom user-assigned labels for Service.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 9 - }, - "external_group": { - "description": "External group name.", - "type": "string", - "x-order": 10 - }, - "address": { - "description": "Access address (DNS name or IP).\nAddress (and port) or socket is required.", - "type": "string", - "x-order": 11 - }, - "port": { - "description": "Access port.\nPort is required when the address present.", - "type": "integer", - "format": "int64", - "x-order": 12 + "generic_node": { + "description": "GenericNode represents a bare metal server or virtual machine.", + "type": "object", + "properties": { + "node_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "node_name": { + "description": "Unique across all Nodes user-defined name.", + "type": "string", + "x-order": 1 + }, + "address": { + "description": "Node address (DNS name or IP).", + "type": "string", + "x-order": 2 + }, + "machine_id": { + "description": "Linux machine-id.", + "type": "string", + "x-order": 3 + }, + "distro": { + "description": "Linux distribution name and version.", + "type": "string", + "x-order": 4 + }, + "node_model": { + "description": "Node model.", + "type": "string", + "x-order": 5 + }, + "region": { + "description": "Node region.", + "type": "string", + "x-order": 6 + }, + "az": { + "description": "Node availability zone.", + "type": "string", + "x-order": 7 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" }, - "socket": { - "description": "Access unix socket.\nAddress (and port) or socket is required.", - "type": "string", - "x-order": 13 + "x-order": 8 + } + }, + "x-order": 0 + }, + "container_node": { + "description": "ContainerNode represents a Docker container.", + "type": "object", + "properties": { + "node_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "node_name": { + "description": "Unique across all Nodes user-defined name.", + "type": "string", + "x-order": 1 + }, + "address": { + "description": "Node address (DNS name or IP).", + "type": "string", + "x-order": 2 + }, + "machine_id": { + "description": "Linux machine-id of the Generic Node where this Container Node runs.", + "type": "string", + "x-order": 3 + }, + "container_id": { + "description": "Container identifier. If specified, must be a unique Docker container identifier.", + "type": "string", + "x-order": 4 + }, + "container_name": { + "description": "Container name.", + "type": "string", + "x-order": 5 + }, + "node_model": { + "description": "Node model.", + "type": "string", + "x-order": 6 + }, + "region": { + "description": "Node region.", + "type": "string", + "x-order": 7 + }, + "az": { + "description": "Node availability zone.", + "type": "string", + "x-order": 8 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" }, - "created_at": { - "description": "Creation timestamp.", - "type": "string", - "format": "date-time", - "x-order": 14 + "x-order": 9 + } + }, + "x-order": 1 + }, + "pmm_agent": { + "description": "PMMAgent runs on Generic or Container Node.", + "type": "object", + "properties": { + "agent_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "runs_on_node_id": { + "description": "Node identifier where this instance runs.", + "type": "string", + "x-order": 1 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" }, - "updated_at": { - "description": "Last update timestamp.", - "type": "string", - "format": "date-time", - "x-order": 15 - }, - "agents": { - "description": "List of agents related to this service.", - "type": "array", - "items": { - "type": "object", - "properties": { - "agent_id": { - "description": "Unique agent identifier.", - "type": "string", - "x-order": 0 - }, - "is_agent_password_set": { - "description": "True if the agent password is set.", - "type": "boolean", - "x-order": 1 - }, - "agent_type": { - "description": "Agent type.", - "type": "string", - "x-order": 2 - }, - "aws_access_key": { - "description": "AWS Access Key.", - "type": "string", - "x-order": 3 - }, - "is_aws_secret_key_set": { - "description": "True if AWS Secret Key is set.", - "type": "boolean", - "x-order": 4 - }, - "azure_options": { - "type": "object", - "properties": { - "client_id": { - "description": "Azure client ID.", - "type": "string", - "x-order": 0 - }, - "is_client_secret_set": { - "description": "True if Azure client secret is set.", - "type": "boolean", - "x-order": 1 - }, - "resource_group": { - "description": "Azure resource group.", - "type": "string", - "x-order": 2 - }, - "subscription_id": { - "description": "Azure subscription ID.", - "type": "string", - "x-order": 3 - }, - "tenant_id": { - "description": "Azure tenant ID.", - "type": "string", - "x-order": 4 - } - }, - "x-order": 5 - }, - "created_at": { - "description": "Creation timestamp.", - "type": "string", - "format": "date-time", - "x-order": 6 - }, - "custom_labels": { - "description": "Custom user-assigned labels.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 7 - }, - "disabled": { - "description": "Desired Agent status: enabled (false) or disabled (true).", - "type": "boolean", - "x-order": 8 - }, - "disabled_collectors": { - "description": "List of disabled collector names.", - "type": "array", - "items": { - "type": "string" - }, - "x-order": 9 - }, - "listen_port": { - "description": "Listen port for scraping metrics.", - "type": "integer", - "format": "int64", - "x-order": 10 - }, - "log_level": { - "description": "Log level for exporter.", - "type": "string", - "x-order": 11 - }, - "max_query_length": { - "description": "Limit query length in QAN.", - "type": "integer", - "format": "int32", - "x-order": 12 - }, - "max_query_log_size": { - "description": "Limit query log size in QAN.", - "type": "string", - "format": "int64", - "x-order": 13 - }, - "metrics_path": { - "description": "Path under which metrics are exposed, used to generate URI.", - "type": "string", - "x-order": 14 - }, - "metrics_scheme": { - "description": "Scheme to generate URI to exporter metrics endpoints.", - "type": "string", - "x-order": 15 - }, - "mongo_db_options": { - "type": "object", - "properties": { - "is_tls_certificate_key_set": { - "description": "True if TLS certificate is set.", - "type": "boolean", - "x-order": 0 - }, - "is_tls_certificate_key_file_password_set": { - "description": "True if TLS certificate file password is set.", - "type": "boolean", - "x-order": 1 - }, - "authentication_mechanism": { - "description": "MongoDB auth mechanism.", - "type": "string", - "x-order": 2 - }, - "authentication_database": { - "description": "MongoDB auth database.", - "type": "string", - "x-order": 3 - }, - "stats_collections": { - "description": "MongoDB stats collections.", - "type": "array", - "items": { - "type": "string" - }, - "x-order": 4 - }, - "collections_limit": { - "description": "MongoDB collections limit.", - "type": "integer", - "format": "int32", - "x-order": 5 - }, - "enable_all_collectors": { - "description": "True if all collectors are enabled.", - "type": "boolean", - "x-order": 6 - } - }, - "x-order": 16 - }, - "mysql_options": { - "type": "object", - "properties": { - "is_tls_key_set": { - "description": "True if TLS key is set.", - "type": "boolean", - "x-order": 0 - } - }, - "x-order": 17 - }, - "node_id": { - "description": "A unique node identifier.", - "type": "string", - "x-order": 18 - }, - "is_password_set": { - "description": "True if password for connecting the agent to the database is set.", - "type": "boolean", - "x-order": 19 - }, - "pmm_agent_id": { - "description": "The pmm-agent identifier.", - "type": "string", - "x-order": 20 - }, - "postgresql_options": { - "type": "object", - "properties": { - "is_ssl_key_set": { - "description": "True if TLS key is set.", - "type": "boolean", - "x-order": 0 - }, - "auto_discovery_limit": { - "description": "Limit of databases for auto-discovery.", - "type": "integer", - "format": "int32", - "x-order": 1 - }, - "max_exporter_connections": { - "description": "Maximum number of connections from exporter to PostgreSQL instance.", - "type": "integer", - "format": "int32", - "x-order": 2 - } - }, - "x-order": 21 - }, - "process_exec_path": { - "description": "Path to exec process.", - "type": "string", - "x-order": 22 - }, - "push_metrics": { - "description": "True if exporter uses push metrics mode.", - "type": "boolean", - "x-order": 23 - }, - "query_examples_disabled": { - "description": "True if query examples are disabled.", - "type": "boolean", - "x-order": 24 - }, - "comments_parsing_disabled": { - "description": "True if query comments parsing is disabled.", - "type": "boolean", - "x-order": 25 - }, - "rds_basic_metrics_disabled": { - "description": "True if RDS basic metrics are disdabled.", - "type": "boolean", - "x-order": 26 - }, - "rds_enhanced_metrics_disabled": { - "description": "True if RDS enhanced metrics are disdabled.", - "type": "boolean", - "x-order": 27 - }, - "runs_on_node_id": { - "description": "Node identifier where this instance runs.", - "type": "string", - "x-order": 28 - }, - "service_id": { - "description": "Service identifier.", - "type": "string", - "x-order": 29 - }, - "status": { - "description": "Actual Agent status.", - "type": "string", - "x-order": 30 - }, - "table_count": { - "description": "Last known table count.", - "type": "integer", - "format": "int32", - "x-order": 31 - }, - "table_count_tablestats_group_limit": { - "description": "Tablestats group collectors are disabled if there are more than that number of tables.\n0 means tablestats group collectors are always enabled (no limit).\nNegative value means tablestats group collectors are always disabled.", - "type": "integer", - "format": "int32", - "x-order": 32 - }, - "tls": { - "description": "Use TLS for database connections.", - "type": "boolean", - "x-order": 33 - }, - "tls_skip_verify": { - "description": "Skip TLS certificate and hostname validation.", - "type": "boolean", - "x-order": 34 - }, - "username": { - "description": "HTTP basic auth username for collecting metrics.", - "type": "string", - "x-order": 35 - }, - "updated_at": { - "description": "Last update timestamp.", - "type": "string", - "format": "date-time", - "x-order": 36 - }, - "version": { - "description": "Agent version.", - "type": "string", - "x-order": 37 - }, - "is_connected": { - "description": "True if Agent is running and connected to pmm-managed.", - "type": "boolean", - "x-order": 38 - }, - "expose_exporter": { - "description": "True if an exporter agent is exposed on all host addresses.", - "type": "boolean", - "x-order": 39 - } - } - }, - "x-order": 16 - }, - "status": { - "description": "Service status.\n\n - STATUS_UNSPECIFIED: In case we don't support the db vendor yet.\n - STATUS_UP: The service is up.\n - STATUS_DOWN: The service is down.\n - STATUS_UNKNOWN: The service's status cannot be known (e.g. there are no metrics yet).", - "type": "string", - "default": "STATUS_UNSPECIFIED", - "enum": [ - "STATUS_UNSPECIFIED", - "STATUS_UP", - "STATUS_DOWN", - "STATUS_UNKNOWN" - ], - "x-order": 17 - }, - "version": { - "description": "The service/database version.", - "type": "string", - "x-order": 18 - } - } - }, - "x-order": 0 - } - } - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32", - "x-order": 0 - }, - "message": { - "type": "string", - "x-order": 1 - }, - "details": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@type": { - "type": "string", - "x-order": 0 - } - }, - "additionalProperties": false - }, - "x-order": 2 - } - } - } - } - } - } - }, - "/v1/management/annotations": { - "post": { - "description": "Adds an annotation.", - "tags": [ - "ManagementService" - ], - "summary": "Add an Annotation", - "operationId": "AddAnnotation", - "parameters": [ - { - "description": "AddAnnotationRequest is a params to add new annotation.", - "name": "body", - "in": "body", - "required": true, - "schema": { - "description": "AddAnnotationRequest is a params to add new annotation.", - "type": "object", - "properties": { - "text": { - "description": "An annotation description. Required.", - "type": "string", - "x-order": 0 - }, - "tags": { - "description": "Tags are used to filter annotations.", - "type": "array", - "items": { - "type": "string" - }, - "x-order": 1 - }, - "node_name": { - "description": "Used for annotating a node.", - "type": "string", - "x-order": 2 - }, - "service_names": { - "description": "Used for annotating services.", - "type": "array", - "items": { - "type": "string" - }, - "x-order": 3 - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32", - "x-order": 0 - }, - "message": { - "type": "string", - "x-order": 1 - }, - "details": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@type": { - "type": "string", - "x-order": 0 - } - }, - "additionalProperties": false - }, - "x-order": 2 - } - } - } - } - } - } - }, - "/v1/management/nodes": { - "get": { - "description": "Returns a filtered list of Nodes.", - "tags": [ - "ManagementService" - ], - "summary": "List Nodes", - "operationId": "ListNodesMixin3", - "parameters": [ - { - "enum": [ - "NODE_TYPE_UNSPECIFIED", - "NODE_TYPE_GENERIC_NODE", - "NODE_TYPE_CONTAINER_NODE", - "NODE_TYPE_REMOTE_NODE", - "NODE_TYPE_REMOTE_RDS_NODE", - "NODE_TYPE_REMOTE_AZURE_DATABASE_NODE" - ], - "type": "string", - "default": "NODE_TYPE_UNSPECIFIED", - "description": "Node type to be filtered out.", - "name": "node_type", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object", - "properties": { - "nodes": { - "type": "array", - "items": { - "type": "object", - "properties": { - "node_id": { - "description": "Unique Node identifier.", - "type": "string", - "x-order": 0 - }, - "node_type": { - "description": "Node type.", - "type": "string", - "x-order": 1 - }, - "node_name": { - "description": "User-defined node name.", - "type": "string", - "x-order": 2 - }, - "machine_id": { - "description": "Linux machine-id.", - "type": "string", - "x-order": 3 - }, - "distro": { - "description": "Linux distribution name and version.", - "type": "string", - "x-order": 4 - }, - "node_model": { - "description": "Node model.", - "type": "string", - "x-order": 5 - }, - "container_id": { - "description": "A node's unique docker container identifier.", - "type": "string", - "x-order": 6 - }, - "container_name": { - "description": "Container name.", - "type": "string", - "x-order": 7 - }, - "address": { - "description": "Node address (DNS name or IP).", - "type": "string", - "x-order": 8 - }, - "region": { - "description": "Node region.", - "type": "string", - "x-order": 9 - }, - "az": { - "description": "Node availability zone.", - "type": "string", - "x-order": 10 - }, - "custom_labels": { - "description": "Custom user-assigned labels for Node.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 11 - }, - "created_at": { - "description": "Creation timestamp.", - "type": "string", - "format": "date-time", - "x-order": 12 - }, - "updated_at": { - "description": "Last update timestamp.", - "type": "string", - "format": "date-time", - "x-order": 13 - }, - "status": { - "description": "Node status.\n\n - STATUS_UNSPECIFIED: Invalid status.\n - STATUS_UP: The node is up.\n - STATUS_DOWN: The node is down.\n - STATUS_UNKNOWN: The node's status cannot be known (e.g. there are no metrics yet).", - "type": "string", - "default": "STATUS_UNSPECIFIED", - "enum": [ - "STATUS_UNSPECIFIED", - "STATUS_UP", - "STATUS_DOWN", - "STATUS_UNKNOWN" - ], - "x-order": 14 - }, - "agents": { - "description": "List of agents related to this node.", - "type": "array", - "items": { - "type": "object", - "properties": { - "agent_id": { - "description": "Unique Agent identifier.", - "type": "string", - "x-order": 0 - }, - "agent_type": { - "description": "Agent type.", - "type": "string", - "x-order": 1 - }, - "status": { - "description": "Actual Agent status.", - "type": "string", - "x-order": 2 - }, - "is_connected": { - "description": "True if Agent is running and connected to pmm-managed.", - "type": "boolean", - "x-order": 3 - } - } - }, - "x-order": 15 - }, - "services": { - "description": "List of services running on this node.", - "type": "array", - "items": { - "description": "Service represents a service running on a node.", - "type": "object", - "properties": { - "service_id": { - "description": "Unique Service identifier.", - "type": "string", - "x-order": 0 - }, - "service_type": { - "description": "Service type.", - "type": "string", - "x-order": 1 - }, - "service_name": { - "description": "Service name.", - "type": "string", - "x-order": 2 - } - } - }, - "x-order": 16 - } - } - }, - "x-order": 0 - } - } - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32", - "x-order": 0 - }, - "message": { - "type": "string", - "x-order": 1 - }, - "details": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@type": { + "x-order": 2 + }, + "connected": { + "description": "True if Agent is running and connected to pmm-managed.", + "type": "boolean", + "x-order": 3 + }, + "process_exec_path": { + "description": "Path to exec process.", + "type": "string", + "x-order": 4 + } + }, + "x-order": 2 + }, + "token": { + "description": "Token represents token for vmagent auth config.", + "type": "string", + "x-order": 3 + }, + "warning": { + "description": "Warning message.", + "type": "string", + "x-order": 4 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "message": { + "type": "string", + "x-order": 1 + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { "type": "string", "x-order": 0 } @@ -17893,126 +17352,24 @@ } } } - } - }, - "post": { - "description": "Registers a new Node and a pmm-agent.", - "tags": [ - "ManagementService" - ], - "summary": "Register a Node", - "operationId": "RegisterNode", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "node_type": { - "description": "NodeType describes supported Node types.", - "type": "string", - "default": "NODE_TYPE_UNSPECIFIED", - "enum": [ - "NODE_TYPE_UNSPECIFIED", - "NODE_TYPE_GENERIC_NODE", - "NODE_TYPE_CONTAINER_NODE", - "NODE_TYPE_REMOTE_NODE", - "NODE_TYPE_REMOTE_RDS_NODE", - "NODE_TYPE_REMOTE_AZURE_DATABASE_NODE" - ], - "x-order": 0 - }, - "node_name": { - "description": "A user-defined name unique across all Nodes.", - "type": "string", - "x-order": 1 - }, - "address": { - "description": "Node address (DNS name or IP).", - "type": "string", - "x-order": 2 - }, - "machine_id": { - "description": "Linux machine-id.", - "type": "string", - "x-order": 3 - }, - "distro": { - "description": "Linux distribution name and version.", - "type": "string", - "x-order": 4 - }, - "container_id": { - "description": "Container identifier. If specified, must be a unique Docker container identifier.", - "type": "string", - "x-order": 5 - }, - "container_name": { - "description": "Container name.", - "type": "string", - "x-order": 6 - }, - "node_model": { - "description": "Node model.", - "type": "string", - "x-order": 7 - }, - "region": { - "description": "Node region.", - "type": "string", - "x-order": 8 - }, - "az": { - "description": "Node availability zone.", - "type": "string", - "x-order": 9 - }, - "custom_labels": { - "description": "Custom user-assigned labels for Node.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 10 - }, - "reregister": { - "description": "If true, and Node with that name already exist, it will be removed with all dependent Services and Agents.", - "type": "boolean", - "x-order": 11 - }, - "metrics_mode": { - "description": "MetricsMode defines desired metrics mode for agent,\nit can be pull, push or auto mode chosen by server.\n\n - METRICS_MODE_UNSPECIFIED: Auto", - "type": "string", - "default": "METRICS_MODE_UNSPECIFIED", - "enum": [ - "METRICS_MODE_UNSPECIFIED", - "METRICS_MODE_PULL", - "METRICS_MODE_PUSH" - ], - "x-order": 12 - }, - "disable_collectors": { - "description": "List of collector names to disable in this exporter.", - "type": "array", - "items": { - "type": "string" - }, - "x-order": 13 - }, - "agent_password": { - "description": "Custom password for exporter endpoint /metrics.", - "type": "string", - "x-order": 14 - }, - "expose_exporter": { - "type": "boolean", - "title": "Optionally expose the exporter process on all public interfaces", - "x-order": 15 - } - } - } + } + } + }, + "/v1/management/nodes/{node_id}": { + "get": { + "description": "Returns a single Node by ID.", + "tags": [ + "ManagementService" + ], + "summary": "Get Node", + "operationId": "GetNodeMixin3", + "parameters": [ + { + "type": "string", + "description": "Unique Node identifier.", + "name": "node_id", + "in": "path", + "required": true } ], "responses": { @@ -18021,22 +17378,21 @@ "schema": { "type": "object", "properties": { - "generic_node": { - "description": "GenericNode represents a bare metal server or virtual machine.", + "node": { "type": "object", "properties": { "node_id": { - "description": "Unique randomly generated instance identifier.", + "description": "Unique Node identifier.", "type": "string", "x-order": 0 }, - "node_name": { - "description": "Unique across all Nodes user-defined name.", + "node_type": { + "description": "Node type.", "type": "string", "x-order": 1 }, - "address": { - "description": "Node address (DNS name or IP).", + "node_name": { + "description": "User-defined node name.", "type": "string", "x-order": 2 }, @@ -18055,131 +17411,190 @@ "type": "string", "x-order": 5 }, - "region": { - "description": "Node region.", + "container_id": { + "description": "A node's unique docker container identifier.", "type": "string", "x-order": 6 }, - "az": { - "description": "Node availability zone.", + "container_name": { + "description": "Container name.", "type": "string", "x-order": 7 }, - "custom_labels": { - "description": "Custom user-assigned labels.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 8 - } - }, - "x-order": 0 - }, - "container_node": { - "description": "ContainerNode represents a Docker container.", - "type": "object", - "properties": { - "node_id": { - "description": "Unique randomly generated instance identifier.", - "type": "string", - "x-order": 0 - }, - "node_name": { - "description": "Unique across all Nodes user-defined name.", - "type": "string", - "x-order": 1 - }, "address": { "description": "Node address (DNS name or IP).", "type": "string", - "x-order": 2 - }, - "machine_id": { - "description": "Linux machine-id of the Generic Node where this Container Node runs.", - "type": "string", - "x-order": 3 - }, - "container_id": { - "description": "Container identifier. If specified, must be a unique Docker container identifier.", - "type": "string", - "x-order": 4 - }, - "container_name": { - "description": "Container name.", - "type": "string", - "x-order": 5 - }, - "node_model": { - "description": "Node model.", - "type": "string", - "x-order": 6 + "x-order": 8 }, "region": { "description": "Node region.", "type": "string", - "x-order": 7 + "x-order": 9 }, "az": { "description": "Node availability zone.", "type": "string", - "x-order": 8 + "x-order": 10 }, "custom_labels": { - "description": "Custom user-assigned labels.", + "description": "Custom user-assigned labels for Node.", "type": "object", "additionalProperties": { "type": "string" }, - "x-order": 9 - } - }, - "x-order": 1 - }, - "pmm_agent": { - "description": "PMMAgent runs on Generic or Container Node.", - "type": "object", - "properties": { - "agent_id": { - "description": "Unique randomly generated instance identifier.", + "x-order": 11 + }, + "created_at": { + "description": "Creation timestamp.", "type": "string", - "x-order": 0 + "format": "date-time", + "x-order": 12 }, - "runs_on_node_id": { - "description": "Node identifier where this instance runs.", + "updated_at": { + "description": "Last update timestamp.", "type": "string", - "x-order": 1 + "format": "date-time", + "x-order": 13 }, - "custom_labels": { - "description": "Custom user-assigned labels.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 2 + "status": { + "description": "Node status.\n\n - STATUS_UNSPECIFIED: Invalid status.\n - STATUS_UP: The node is up.\n - STATUS_DOWN: The node is down.\n - STATUS_UNKNOWN: The node's status cannot be known (e.g. there are no metrics yet).", + "type": "string", + "default": "STATUS_UNSPECIFIED", + "enum": [ + "STATUS_UNSPECIFIED", + "STATUS_UP", + "STATUS_DOWN", + "STATUS_UNKNOWN" + ], + "x-order": 14 }, - "connected": { - "description": "True if Agent is running and connected to pmm-managed.", - "type": "boolean", - "x-order": 3 + "agents": { + "description": "List of agents related to this node.", + "type": "array", + "items": { + "type": "object", + "properties": { + "agent_id": { + "description": "Unique Agent identifier.", + "type": "string", + "x-order": 0 + }, + "agent_type": { + "description": "Agent type.", + "type": "string", + "x-order": 1 + }, + "status": { + "description": "Actual Agent status.", + "type": "string", + "x-order": 2 + }, + "is_connected": { + "description": "True if Agent is running and connected to pmm-managed.", + "type": "boolean", + "x-order": 3 + } + } + }, + "x-order": 15 }, - "process_exec_path": { - "description": "Path to exec process.", - "type": "string", - "x-order": 4 + "services": { + "description": "List of services running on this node.", + "type": "array", + "items": { + "description": "Service represents a service running on a node.", + "type": "object", + "properties": { + "service_id": { + "description": "Unique Service identifier.", + "type": "string", + "x-order": 0 + }, + "service_type": { + "description": "Service type.", + "type": "string", + "x-order": 1 + }, + "service_name": { + "description": "Service name.", + "type": "string", + "x-order": 2 + } + } + }, + "x-order": 16 } }, - "x-order": 2 + "x-order": 0 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 }, - "token": { - "description": "Token represents token for vmagent auth config.", + "message": { "type": "string", - "x-order": 3 + "x-order": 1 }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + } + } + } + } + } + }, + "delete": { + "description": "Unregisters a Node and pmm-agent", + "tags": [ + "ManagementService" + ], + "summary": "Unregister a Node", + "operationId": "UnregisterNode", + "parameters": [ + { + "type": "string", + "description": "Node_id to be unregistered.", + "name": "node_id", + "in": "path", + "required": true + }, + { + "type": "boolean", + "description": "Force delete node, related service account, even if it has more service tokens attached.", + "name": "force", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { "warning": { - "description": "Warning message.", + "description": "Warning message if there are more service tokens attached to service account.", "type": "string", - "x-order": 4 + "x-order": 0 } } } @@ -18218,21 +17633,42 @@ } } }, - "/v1/management/nodes/{node_id}": { + "/v1/management/services": { "get": { - "description": "Returns a single Node by ID.", + "description": "Returns a filtered list of Services.", "tags": [ "ManagementService" ], - "summary": "Get Node", - "operationId": "GetNodeMixin3", + "summary": "List Services", + "operationId": "ListServicesMixin3", "parameters": [ { "type": "string", - "description": "Unique Node identifier.", + "description": "Return only Services running on that Node.", "name": "node_id", - "in": "path", - "required": true + "in": "query" + }, + { + "enum": [ + "SERVICE_TYPE_UNSPECIFIED", + "SERVICE_TYPE_MYSQL_SERVICE", + "SERVICE_TYPE_MONGODB_SERVICE", + "SERVICE_TYPE_POSTGRESQL_SERVICE", + "SERVICE_TYPE_PROXYSQL_SERVICE", + "SERVICE_TYPE_HAPROXY_SERVICE", + "SERVICE_TYPE_EXTERNAL_SERVICE" + ], + "type": "string", + "default": "SERVICE_TYPE_UNSPECIFIED", + "description": "Return only services filtered by service type.", + "name": "service_type", + "in": "query" + }, + { + "type": "string", + "description": "Return only services in this external group.", + "name": "external_group", + "in": "query" } ], "responses": { @@ -18241,222 +17677,430 @@ "schema": { "type": "object", "properties": { - "node": { - "type": "object", - "properties": { - "node_id": { - "description": "Unique Node identifier.", - "type": "string", - "x-order": 0 - }, - "node_type": { - "description": "Node type.", - "type": "string", - "x-order": 1 - }, - "node_name": { - "description": "User-defined node name.", - "type": "string", - "x-order": 2 - }, - "machine_id": { - "description": "Linux machine-id.", - "type": "string", - "x-order": 3 - }, - "distro": { - "description": "Linux distribution name and version.", - "type": "string", - "x-order": 4 - }, - "node_model": { - "description": "Node model.", - "type": "string", - "x-order": 5 - }, - "container_id": { - "description": "A node's unique docker container identifier.", - "type": "string", - "x-order": 6 - }, - "container_name": { - "description": "Container name.", - "type": "string", - "x-order": 7 - }, - "address": { - "description": "Node address (DNS name or IP).", - "type": "string", - "x-order": 8 - }, - "region": { - "description": "Node region.", - "type": "string", - "x-order": 9 - }, - "az": { - "description": "Node availability zone.", - "type": "string", - "x-order": 10 - }, - "custom_labels": { - "description": "Custom user-assigned labels for Node.", - "type": "object", - "additionalProperties": { - "type": "string" + "services": { + "description": "List of Services.", + "type": "array", + "items": { + "type": "object", + "properties": { + "service_id": { + "description": "Unique service identifier.", + "type": "string", + "x-order": 0 }, - "x-order": 11 - }, - "created_at": { - "description": "Creation timestamp.", - "type": "string", - "format": "date-time", - "x-order": 12 - }, - "updated_at": { - "description": "Last update timestamp.", - "type": "string", - "format": "date-time", - "x-order": 13 - }, - "status": { - "description": "Node status.\n\n - STATUS_UNSPECIFIED: Invalid status.\n - STATUS_UP: The node is up.\n - STATUS_DOWN: The node is down.\n - STATUS_UNKNOWN: The node's status cannot be known (e.g. there are no metrics yet).", - "type": "string", - "default": "STATUS_UNSPECIFIED", - "enum": [ - "STATUS_UNSPECIFIED", - "STATUS_UP", - "STATUS_DOWN", - "STATUS_UNKNOWN" - ], - "x-order": 14 - }, - "agents": { - "description": "List of agents related to this node.", - "type": "array", - "items": { + "service_type": { + "description": "Service type.", + "type": "string", + "x-order": 1 + }, + "service_name": { + "description": "User-defined name unique across all Services.", + "type": "string", + "x-order": 2 + }, + "database_name": { + "description": "Database name.", + "type": "string", + "x-order": 3 + }, + "node_id": { + "description": "Node identifier where this instance runs.", + "type": "string", + "x-order": 4 + }, + "node_name": { + "description": "Node name where this instance runs.", + "type": "string", + "x-order": 5 + }, + "environment": { + "description": "Environment name.", + "type": "string", + "x-order": 6 + }, + "cluster": { + "description": "Cluster name.", + "type": "string", + "x-order": 7 + }, + "replication_set": { + "description": "Replication set name.", + "type": "string", + "x-order": 8 + }, + "custom_labels": { + "description": "Custom user-assigned labels for Service.", "type": "object", - "properties": { - "agent_id": { - "description": "Unique Agent identifier.", - "type": "string", - "x-order": 0 - }, - "agent_type": { - "description": "Agent type.", - "type": "string", - "x-order": 1 - }, - "status": { - "description": "Actual Agent status.", - "type": "string", - "x-order": 2 - }, - "is_connected": { - "description": "True if Agent is running and connected to pmm-managed.", - "type": "boolean", - "x-order": 3 + "additionalProperties": { + "type": "string" + }, + "x-order": 9 + }, + "external_group": { + "description": "External group name.", + "type": "string", + "x-order": 10 + }, + "address": { + "description": "Access address (DNS name or IP).\nAddress (and port) or socket is required.", + "type": "string", + "x-order": 11 + }, + "port": { + "description": "Access port.\nPort is required when the address present.", + "type": "integer", + "format": "int64", + "x-order": 12 + }, + "socket": { + "description": "Access unix socket.\nAddress (and port) or socket is required.", + "type": "string", + "x-order": 13 + }, + "created_at": { + "description": "Creation timestamp.", + "type": "string", + "format": "date-time", + "x-order": 14 + }, + "updated_at": { + "description": "Last update timestamp.", + "type": "string", + "format": "date-time", + "x-order": 15 + }, + "agents": { + "description": "List of agents related to this service.", + "type": "array", + "items": { + "type": "object", + "properties": { + "agent_id": { + "description": "Unique agent identifier.", + "type": "string", + "x-order": 0 + }, + "is_agent_password_set": { + "description": "True if the agent password is set.", + "type": "boolean", + "x-order": 1 + }, + "agent_type": { + "description": "Agent type.", + "type": "string", + "x-order": 2 + }, + "aws_access_key": { + "description": "AWS Access Key.", + "type": "string", + "x-order": 3 + }, + "is_aws_secret_key_set": { + "description": "True if AWS Secret Key is set.", + "type": "boolean", + "x-order": 4 + }, + "azure_options": { + "type": "object", + "properties": { + "client_id": { + "description": "Azure client ID.", + "type": "string", + "x-order": 0 + }, + "is_client_secret_set": { + "description": "True if Azure client secret is set.", + "type": "boolean", + "x-order": 1 + }, + "resource_group": { + "description": "Azure resource group.", + "type": "string", + "x-order": 2 + }, + "subscription_id": { + "description": "Azure subscription ID.", + "type": "string", + "x-order": 3 + }, + "tenant_id": { + "description": "Azure tenant ID.", + "type": "string", + "x-order": 4 + } + }, + "x-order": 5 + }, + "created_at": { + "description": "Creation timestamp.", + "type": "string", + "format": "date-time", + "x-order": 6 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 7 + }, + "disabled": { + "description": "Desired Agent status: enabled (false) or disabled (true).", + "type": "boolean", + "x-order": 8 + }, + "disabled_collectors": { + "description": "List of disabled collector names.", + "type": "array", + "items": { + "type": "string" + }, + "x-order": 9 + }, + "listen_port": { + "description": "Listen port for scraping metrics.", + "type": "integer", + "format": "int64", + "x-order": 10 + }, + "log_level": { + "description": "Log level for exporter.", + "type": "string", + "x-order": 11 + }, + "max_query_length": { + "description": "Limit query length in QAN.", + "type": "integer", + "format": "int32", + "x-order": 12 + }, + "max_query_log_size": { + "description": "Limit query log size in QAN.", + "type": "string", + "format": "int64", + "x-order": 13 + }, + "metrics_path": { + "description": "Path under which metrics are exposed, used to generate URI.", + "type": "string", + "x-order": 14 + }, + "metrics_scheme": { + "description": "Scheme to generate URI to exporter metrics endpoints.", + "type": "string", + "x-order": 15 + }, + "mongo_db_options": { + "type": "object", + "properties": { + "is_tls_certificate_key_set": { + "description": "True if TLS certificate is set.", + "type": "boolean", + "x-order": 0 + }, + "is_tls_certificate_key_file_password_set": { + "description": "True if TLS certificate file password is set.", + "type": "boolean", + "x-order": 1 + }, + "authentication_mechanism": { + "description": "MongoDB auth mechanism.", + "type": "string", + "x-order": 2 + }, + "authentication_database": { + "description": "MongoDB auth database.", + "type": "string", + "x-order": 3 + }, + "stats_collections": { + "description": "MongoDB stats collections.", + "type": "array", + "items": { + "type": "string" + }, + "x-order": 4 + }, + "collections_limit": { + "description": "MongoDB collections limit.", + "type": "integer", + "format": "int32", + "x-order": 5 + }, + "enable_all_collectors": { + "description": "True if all collectors are enabled.", + "type": "boolean", + "x-order": 6 + } + }, + "x-order": 16 + }, + "mysql_options": { + "type": "object", + "properties": { + "is_tls_key_set": { + "description": "True if TLS key is set.", + "type": "boolean", + "x-order": 0 + } + }, + "x-order": 17 + }, + "node_id": { + "description": "A unique node identifier.", + "type": "string", + "x-order": 18 + }, + "is_password_set": { + "description": "True if password for connecting the agent to the database is set.", + "type": "boolean", + "x-order": 19 + }, + "pmm_agent_id": { + "description": "The pmm-agent identifier.", + "type": "string", + "x-order": 20 + }, + "postgresql_options": { + "type": "object", + "properties": { + "is_ssl_key_set": { + "description": "True if TLS key is set.", + "type": "boolean", + "x-order": 0 + }, + "auto_discovery_limit": { + "description": "Limit of databases for auto-discovery.", + "type": "integer", + "format": "int32", + "x-order": 1 + }, + "max_exporter_connections": { + "description": "Maximum number of connections from exporter to PostgreSQL instance.", + "type": "integer", + "format": "int32", + "x-order": 2 + } + }, + "x-order": 21 + }, + "process_exec_path": { + "description": "Path to exec process.", + "type": "string", + "x-order": 22 + }, + "push_metrics": { + "description": "True if exporter uses push metrics mode.", + "type": "boolean", + "x-order": 23 + }, + "query_examples_disabled": { + "description": "True if query examples are disabled.", + "type": "boolean", + "x-order": 24 + }, + "comments_parsing_disabled": { + "description": "True if query comments parsing is disabled.", + "type": "boolean", + "x-order": 25 + }, + "rds_basic_metrics_disabled": { + "description": "True if RDS basic metrics are disdabled.", + "type": "boolean", + "x-order": 26 + }, + "rds_enhanced_metrics_disabled": { + "description": "True if RDS enhanced metrics are disdabled.", + "type": "boolean", + "x-order": 27 + }, + "runs_on_node_id": { + "description": "Node identifier where this instance runs.", + "type": "string", + "x-order": 28 + }, + "service_id": { + "description": "Service identifier.", + "type": "string", + "x-order": 29 + }, + "status": { + "description": "Actual Agent status.", + "type": "string", + "x-order": 30 + }, + "table_count": { + "description": "Last known table count.", + "type": "integer", + "format": "int32", + "x-order": 31 + }, + "table_count_tablestats_group_limit": { + "description": "Tablestats group collectors are disabled if there are more than that number of tables.\n0 means tablestats group collectors are always enabled (no limit).\nNegative value means tablestats group collectors are always disabled.", + "type": "integer", + "format": "int32", + "x-order": 32 + }, + "tls": { + "description": "Use TLS for database connections.", + "type": "boolean", + "x-order": 33 + }, + "tls_skip_verify": { + "description": "Skip TLS certificate and hostname validation.", + "type": "boolean", + "x-order": 34 + }, + "username": { + "description": "HTTP basic auth username for collecting metrics.", + "type": "string", + "x-order": 35 + }, + "updated_at": { + "description": "Last update timestamp.", + "type": "string", + "format": "date-time", + "x-order": 36 + }, + "version": { + "description": "Agent version.", + "type": "string", + "x-order": 37 + }, + "is_connected": { + "description": "True if Agent is running and connected to pmm-managed.", + "type": "boolean", + "x-order": 38 + }, + "expose_exporter": { + "description": "True if an exporter agent is exposed on all host addresses.", + "type": "boolean", + "x-order": 39 + } } - } + }, + "x-order": 16 }, - "x-order": 15 - }, - "services": { - "description": "List of services running on this node.", - "type": "array", - "items": { - "description": "Service represents a service running on a node.", - "type": "object", - "properties": { - "service_id": { - "description": "Unique Service identifier.", - "type": "string", - "x-order": 0 - }, - "service_type": { - "description": "Service type.", - "type": "string", - "x-order": 1 - }, - "service_name": { - "description": "Service name.", - "type": "string", - "x-order": 2 - } - } + "status": { + "description": "Service status.\n\n - STATUS_UNSPECIFIED: In case we don't support the db vendor yet.\n - STATUS_UP: The service is up.\n - STATUS_DOWN: The service is down.\n - STATUS_UNKNOWN: The service's status cannot be known (e.g. there are no metrics yet).", + "type": "string", + "default": "STATUS_UNSPECIFIED", + "enum": [ + "STATUS_UNSPECIFIED", + "STATUS_UP", + "STATUS_DOWN", + "STATUS_UNKNOWN" + ], + "x-order": 17 }, - "x-order": 16 - } - }, - "x-order": 0 - } - } - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32", - "x-order": 0 - }, - "message": { - "type": "string", - "x-order": 1 - }, - "details": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@type": { + "version": { + "description": "The service/database version.", "type": "string", - "x-order": 0 + "x-order": 18 } - }, - "additionalProperties": false + } }, - "x-order": 2 - } - } - } - } - } - }, - "delete": { - "description": "Unregisters a Node and pmm-agent", - "tags": [ - "ManagementService" - ], - "summary": "Unregister a Node", - "operationId": "UnregisterNode", - "parameters": [ - { - "type": "string", - "description": "Node_id to be unregistered.", - "name": "node_id", - "in": "path", - "required": true - }, - { - "type": "boolean", - "description": "Force delete node, related service account, even if it has more service tokens attached.", - "name": "force", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object", - "properties": { - "warning": { - "description": "Warning message if there are more service tokens attached to service account.", - "type": "string", "x-order": 0 } } @@ -18494,9 +18138,7 @@ } } } - } - }, - "/v1/management/services": { + }, "post": { "description": "Adds a service and starts several agents.", "tags": [ @@ -22362,10 +22004,207 @@ "x-order": 7 } }, - "x-order": 6 + "x-order": 6 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "message": { + "type": "string", + "x-order": 1 + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + } + } + } + } + } + } + }, + "/v1/management/services/azure": { + "post": { + "description": "Adds an Azure Database instance.", + "tags": [ + "ManagementService" + ], + "summary": "Add Azure Database", + "operationId": "AddAzureDatabase", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "region": { + "description": "Azure database location.", + "type": "string", + "x-order": 0 + }, + "az": { + "description": "Azure database availability zone.", + "type": "string", + "x-order": 1 + }, + "instance_id": { + "description": "Azure database instance ID.", + "type": "string", + "x-order": 2 + }, + "node_model": { + "description": "Represents a purchasable Stock Keeping Unit (SKU) under a product.\nhttps://docs.microsoft.com/en-us/partner-center/develop/product-resources#sku.", + "type": "string", + "x-order": 3 + }, + "address": { + "description": "Address used to connect to it.", + "type": "string", + "x-order": 4 + }, + "port": { + "description": "Access port.", + "type": "integer", + "format": "int64", + "x-order": 5 + }, + "node_name": { + "description": "Unique across all Nodes user-defined name. Defaults to Azure Database instance ID.", + "type": "string", + "x-order": 6 + }, + "service_name": { + "description": "Unique across all Services user-defined name. Defaults to Azure Database instance ID.", + "type": "string", + "x-order": 7 + }, + "environment": { + "description": "Environment name.", + "type": "string", + "x-order": 8 + }, + "username": { + "description": "Username for scraping metrics.", + "type": "string", + "x-order": 9 + }, + "password": { + "description": "Password for scraping metrics.", + "type": "string", + "x-order": 10 + }, + "azure_client_id": { + "description": "Azure client ID.", + "type": "string", + "x-order": 11 + }, + "azure_client_secret": { + "description": "Azure client secret.", + "type": "string", + "x-order": 12 + }, + "azure_tenant_id": { + "description": "Azure tanant ID.", + "type": "string", + "x-order": 13 + }, + "azure_subscription_id": { + "description": "Azure subscription ID.", + "type": "string", + "x-order": 14 + }, + "azure_resource_group": { + "description": "Azure resource group.", + "type": "string", + "x-order": 15 + }, + "azure_database_exporter": { + "description": "If true, adds azure_database_exporter.", + "type": "boolean", + "x-order": 16 + }, + "qan": { + "description": "If true, adds qan-mysql-perfschema-agent or qan-postgresql-pgstatements-agent.", + "type": "boolean", + "x-order": 17 + }, + "custom_labels": { + "description": "Custom user-assigned labels for Node and Service.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 18 + }, + "skip_connection_check": { + "description": "Skip connection check.", + "type": "boolean", + "x-order": 19 + }, + "tls": { + "description": "Use TLS for database connections.", + "type": "boolean", + "x-order": 20 + }, + "tls_skip_verify": { + "description": "Skip TLS certificate and hostname validation.", + "type": "boolean", + "x-order": 21 + }, + "disable_query_examples": { + "description": "Disable query examples.", + "type": "boolean", + "x-order": 22 + }, + "tablestats_group_table_limit": { + "description": "Tablestats group collectors will be disabled if there are more than that number of tables.\nIf zero, server's default value is used.\nUse negative value to disable them.", + "type": "integer", + "format": "int32", + "x-order": 23 + }, + "type": { + "description": "DiscoverAzureDatabaseType describes supported Azure Database instance engines.\n\n - DISCOVER_AZURE_DATABASE_TYPE_MYSQL: MySQL type: microsoft.dbformysql or MariaDB type: microsoft.dbformariadb\n - DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL: PostgreSQL type: microsoft.dbformysql", + "type": "string", + "default": "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", + "enum": [ + "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", + "DISCOVER_AZURE_DATABASE_TYPE_MYSQL", + "DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL" + ], + "x-order": 24 } } } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object" + } }, "default": { "description": "An unexpected error response.", @@ -22475,6 +22314,158 @@ } } }, + "/v1/management/services:discoverAzure": { + "post": { + "description": "Discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances.", + "tags": [ + "ManagementService" + ], + "summary": "Discover Azure Database", + "operationId": "DiscoverAzureDatabase", + "parameters": [ + { + "description": "DiscoverAzureDatabaseRequest discover azure databases request.", + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "DiscoverAzureDatabaseRequest discover azure databases request.", + "type": "object", + "properties": { + "azure_client_id": { + "description": "Azure client ID.", + "type": "string", + "x-order": 0 + }, + "azure_client_secret": { + "description": "Azure client secret.", + "type": "string", + "x-order": 1 + }, + "azure_tenant_id": { + "description": "Azure tanant ID.", + "type": "string", + "x-order": 2 + }, + "azure_subscription_id": { + "description": "Azure subscription ID.", + "type": "string", + "x-order": 3 + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "description": "DiscoverAzureDatabaseResponse discover azure databases response.", + "type": "object", + "properties": { + "azure_database_instance": { + "type": "array", + "items": { + "description": "DiscoverAzureDatabaseInstance models an unique Azure Database instance for the list of instances returned by Discovery.", + "type": "object", + "properties": { + "instance_id": { + "description": "Azure database instance ID.", + "type": "string", + "x-order": 0 + }, + "region": { + "description": "Azure database location.", + "type": "string", + "x-order": 1 + }, + "service_name": { + "description": "Azure database server name.", + "type": "string", + "x-order": 2 + }, + "username": { + "description": "Database username.", + "type": "string", + "x-order": 3 + }, + "address": { + "description": "Address used to connect to it.", + "type": "string", + "x-order": 4 + }, + "azure_resource_group": { + "description": "Azure Resource group.", + "type": "string", + "x-order": 5 + }, + "environment": { + "description": "Environment tag.", + "type": "string", + "x-order": 6 + }, + "type": { + "description": "DiscoverAzureDatabaseType describes supported Azure Database instance engines.\n\n - DISCOVER_AZURE_DATABASE_TYPE_MYSQL: MySQL type: microsoft.dbformysql or MariaDB type: microsoft.dbformariadb\n - DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL: PostgreSQL type: microsoft.dbformysql", + "type": "string", + "default": "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", + "enum": [ + "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", + "DISCOVER_AZURE_DATABASE_TYPE_MYSQL", + "DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL" + ], + "x-order": 7 + }, + "az": { + "description": "Azure database availability zone.", + "type": "string", + "x-order": 8 + }, + "node_model": { + "description": "Represents a purchasable Stock Keeping Unit (SKU) under a product.\nhttps://docs.microsoft.com/en-us/partner-center/develop/product-resources#sku.", + "type": "string", + "x-order": 9 + } + } + }, + "x-order": 0 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "message": { + "type": "string", + "x-order": 1 + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + } + } + } + } + } + } + }, "/v1/management/services:discoverRDS": { "post": { "description": "Discovers RDS instances.", diff --git a/api/swagger/swagger.json b/api/swagger/swagger.json index b4d5ea1449f..3090e55bf0a 100644 --- a/api/swagger/swagger.json +++ b/api/swagger/swagger.json @@ -4565,46 +4565,49 @@ } } }, - "/v1/management/Service/List": { + "/v1/management/annotations": { "post": { - "description": "Returns a filtered list of Services.", + "description": "Adds an annotation.", "tags": [ "ManagementService" ], - "summary": "List Services", - "operationId": "ListServices", + "summary": "Add an Annotation", + "operationId": "AddAnnotation", "parameters": [ { + "description": "AddAnnotationRequest is a params to add new annotation.", "name": "body", "in": "body", "required": true, "schema": { + "description": "AddAnnotationRequest is a params to add new annotation.", "type": "object", "properties": { - "node_id": { - "description": "Return only Services running on that Node.", + "text": { + "description": "An annotation description. Required.", "type": "string", "x-order": 0 }, - "service_type": { - "description": "ServiceType describes supported Service types.", - "type": "string", - "default": "SERVICE_TYPE_UNSPECIFIED", - "enum": [ - "SERVICE_TYPE_UNSPECIFIED", - "SERVICE_TYPE_MYSQL_SERVICE", - "SERVICE_TYPE_MONGODB_SERVICE", - "SERVICE_TYPE_POSTGRESQL_SERVICE", - "SERVICE_TYPE_PROXYSQL_SERVICE", - "SERVICE_TYPE_HAPROXY_SERVICE", - "SERVICE_TYPE_EXTERNAL_SERVICE" - ], + "tags": { + "description": "Tags are used to filter annotations.", + "type": "array", + "items": { + "type": "string" + }, "x-order": 1 }, - "external_group": { - "description": "Return only services in this external group.", + "node_name": { + "description": "Used for annotating a node.", "type": "string", "x-order": 2 + }, + "service_names": { + "description": "Used for annotating services.", + "type": "array", + "items": { + "type": "string" + }, + "x-order": 3 } } } @@ -4613,430 +4616,222 @@ "responses": { "200": { "description": "A successful response.", + "schema": { + "type": "object" + } + }, + "default": { + "description": "An unexpected error response.", "schema": { "type": "object", "properties": { - "services": { - "description": "List of Services.", + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "message": { + "type": "string", + "x-order": 1 + }, + "details": { "type": "array", "items": { "type": "object", "properties": { - "service_id": { - "description": "Unique service identifier.", + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + } + } + } + } + } + } + }, + "/v1/management/nodes": { + "get": { + "description": "Returns a filtered list of Nodes.", + "tags": [ + "ManagementService" + ], + "summary": "List Nodes", + "operationId": "ListNodes", + "parameters": [ + { + "enum": [ + "NODE_TYPE_UNSPECIFIED", + "NODE_TYPE_GENERIC_NODE", + "NODE_TYPE_CONTAINER_NODE", + "NODE_TYPE_REMOTE_NODE", + "NODE_TYPE_REMOTE_RDS_NODE", + "NODE_TYPE_REMOTE_AZURE_DATABASE_NODE" + ], + "type": "string", + "default": "NODE_TYPE_UNSPECIFIED", + "description": "Node type to be filtered out.", + "name": "node_type", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "nodes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "node_id": { + "description": "Unique Node identifier.", "type": "string", "x-order": 0 }, - "service_type": { - "description": "Service type.", + "node_type": { + "description": "Node type.", "type": "string", "x-order": 1 }, - "service_name": { - "description": "User-defined name unique across all Services.", + "node_name": { + "description": "User-defined node name.", "type": "string", "x-order": 2 }, - "database_name": { - "description": "Database name.", + "machine_id": { + "description": "Linux machine-id.", "type": "string", "x-order": 3 }, - "node_id": { - "description": "Node identifier where this instance runs.", + "distro": { + "description": "Linux distribution name and version.", "type": "string", "x-order": 4 }, - "node_name": { - "description": "Node name where this instance runs.", + "node_model": { + "description": "Node model.", "type": "string", "x-order": 5 }, - "environment": { - "description": "Environment name.", + "container_id": { + "description": "A node's unique docker container identifier.", "type": "string", "x-order": 6 }, - "cluster": { - "description": "Cluster name.", + "container_name": { + "description": "Container name.", "type": "string", "x-order": 7 }, - "replication_set": { - "description": "Replication set name.", + "address": { + "description": "Node address (DNS name or IP).", "type": "string", "x-order": 8 }, - "custom_labels": { - "description": "Custom user-assigned labels for Service.", - "type": "object", - "additionalProperties": { - "type": "string" - }, + "region": { + "description": "Node region.", + "type": "string", "x-order": 9 }, - "external_group": { - "description": "External group name.", + "az": { + "description": "Node availability zone.", "type": "string", "x-order": 10 }, - "address": { - "description": "Access address (DNS name or IP).\nAddress (and port) or socket is required.", - "type": "string", + "custom_labels": { + "description": "Custom user-assigned labels for Node.", + "type": "object", + "additionalProperties": { + "type": "string" + }, "x-order": 11 }, - "port": { - "description": "Access port.\nPort is required when the address present.", - "type": "integer", - "format": "int64", - "x-order": 12 - }, - "socket": { - "description": "Access unix socket.\nAddress (and port) or socket is required.", - "type": "string", - "x-order": 13 - }, "created_at": { "description": "Creation timestamp.", "type": "string", "format": "date-time", - "x-order": 14 + "x-order": 12 }, "updated_at": { "description": "Last update timestamp.", "type": "string", "format": "date-time", - "x-order": 15 + "x-order": 13 + }, + "status": { + "description": "Node status.\n\n - STATUS_UNSPECIFIED: Invalid status.\n - STATUS_UP: The node is up.\n - STATUS_DOWN: The node is down.\n - STATUS_UNKNOWN: The node's status cannot be known (e.g. there are no metrics yet).", + "type": "string", + "default": "STATUS_UNSPECIFIED", + "enum": [ + "STATUS_UNSPECIFIED", + "STATUS_UP", + "STATUS_DOWN", + "STATUS_UNKNOWN" + ], + "x-order": 14 }, "agents": { - "description": "List of agents related to this service.", + "description": "List of agents related to this node.", "type": "array", "items": { "type": "object", "properties": { "agent_id": { - "description": "Unique agent identifier.", + "description": "Unique Agent identifier.", "type": "string", "x-order": 0 }, - "is_agent_password_set": { - "description": "True if the agent password is set.", - "type": "boolean", - "x-order": 1 - }, "agent_type": { "description": "Agent type.", "type": "string", - "x-order": 2 + "x-order": 1 }, - "aws_access_key": { - "description": "AWS Access Key.", + "status": { + "description": "Actual Agent status.", "type": "string", - "x-order": 3 + "x-order": 2 }, - "is_aws_secret_key_set": { - "description": "True if AWS Secret Key is set.", + "is_connected": { + "description": "True if Agent is running and connected to pmm-managed.", "type": "boolean", - "x-order": 4 - }, - "azure_options": { - "type": "object", - "properties": { - "client_id": { - "description": "Azure client ID.", - "type": "string", - "x-order": 0 - }, - "is_client_secret_set": { - "description": "True if Azure client secret is set.", - "type": "boolean", - "x-order": 1 - }, - "resource_group": { - "description": "Azure resource group.", - "type": "string", - "x-order": 2 - }, - "subscription_id": { - "description": "Azure subscription ID.", - "type": "string", - "x-order": 3 - }, - "tenant_id": { - "description": "Azure tenant ID.", - "type": "string", - "x-order": 4 - } - }, - "x-order": 5 - }, - "created_at": { - "description": "Creation timestamp.", + "x-order": 3 + } + } + }, + "x-order": 15 + }, + "services": { + "description": "List of services running on this node.", + "type": "array", + "items": { + "description": "Service represents a service running on a node.", + "type": "object", + "properties": { + "service_id": { + "description": "Unique Service identifier.", "type": "string", - "format": "date-time", - "x-order": 6 - }, - "custom_labels": { - "description": "Custom user-assigned labels.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 7 - }, - "disabled": { - "description": "Desired Agent status: enabled (false) or disabled (true).", - "type": "boolean", - "x-order": 8 - }, - "disabled_collectors": { - "description": "List of disabled collector names.", - "type": "array", - "items": { - "type": "string" - }, - "x-order": 9 - }, - "listen_port": { - "description": "Listen port for scraping metrics.", - "type": "integer", - "format": "int64", - "x-order": 10 - }, - "log_level": { - "description": "Log level for exporter.", - "type": "string", - "x-order": 11 - }, - "max_query_length": { - "description": "Limit query length in QAN.", - "type": "integer", - "format": "int32", - "x-order": 12 - }, - "max_query_log_size": { - "description": "Limit query log size in QAN.", - "type": "string", - "format": "int64", - "x-order": 13 - }, - "metrics_path": { - "description": "Path under which metrics are exposed, used to generate URI.", - "type": "string", - "x-order": 14 - }, - "metrics_scheme": { - "description": "Scheme to generate URI to exporter metrics endpoints.", - "type": "string", - "x-order": 15 - }, - "mongo_db_options": { - "type": "object", - "properties": { - "is_tls_certificate_key_set": { - "description": "True if TLS certificate is set.", - "type": "boolean", - "x-order": 0 - }, - "is_tls_certificate_key_file_password_set": { - "description": "True if TLS certificate file password is set.", - "type": "boolean", - "x-order": 1 - }, - "authentication_mechanism": { - "description": "MongoDB auth mechanism.", - "type": "string", - "x-order": 2 - }, - "authentication_database": { - "description": "MongoDB auth database.", - "type": "string", - "x-order": 3 - }, - "stats_collections": { - "description": "MongoDB stats collections.", - "type": "array", - "items": { - "type": "string" - }, - "x-order": 4 - }, - "collections_limit": { - "description": "MongoDB collections limit.", - "type": "integer", - "format": "int32", - "x-order": 5 - }, - "enable_all_collectors": { - "description": "True if all collectors are enabled.", - "type": "boolean", - "x-order": 6 - } - }, - "x-order": 16 - }, - "mysql_options": { - "type": "object", - "properties": { - "is_tls_key_set": { - "description": "True if TLS key is set.", - "type": "boolean", - "x-order": 0 - } - }, - "x-order": 17 - }, - "node_id": { - "description": "A unique node identifier.", - "type": "string", - "x-order": 18 - }, - "is_password_set": { - "description": "True if password for connecting the agent to the database is set.", - "type": "boolean", - "x-order": 19 - }, - "pmm_agent_id": { - "description": "The pmm-agent identifier.", - "type": "string", - "x-order": 20 - }, - "postgresql_options": { - "type": "object", - "properties": { - "is_ssl_key_set": { - "description": "True if TLS key is set.", - "type": "boolean", - "x-order": 0 - }, - "auto_discovery_limit": { - "description": "Limit of databases for auto-discovery.", - "type": "integer", - "format": "int32", - "x-order": 1 - }, - "max_exporter_connections": { - "description": "Maximum number of connections from exporter to PostgreSQL instance.", - "type": "integer", - "format": "int32", - "x-order": 2 - } - }, - "x-order": 21 - }, - "process_exec_path": { - "description": "Path to exec process.", - "type": "string", - "x-order": 22 - }, - "push_metrics": { - "description": "True if exporter uses push metrics mode.", - "type": "boolean", - "x-order": 23 - }, - "query_examples_disabled": { - "description": "True if query examples are disabled.", - "type": "boolean", - "x-order": 24 - }, - "comments_parsing_disabled": { - "description": "True if query comments parsing is disabled.", - "type": "boolean", - "x-order": 25 - }, - "rds_basic_metrics_disabled": { - "description": "True if RDS basic metrics are disdabled.", - "type": "boolean", - "x-order": 26 - }, - "rds_enhanced_metrics_disabled": { - "description": "True if RDS enhanced metrics are disdabled.", - "type": "boolean", - "x-order": 27 - }, - "runs_on_node_id": { - "description": "Node identifier where this instance runs.", - "type": "string", - "x-order": 28 - }, - "service_id": { - "description": "Service identifier.", - "type": "string", - "x-order": 29 - }, - "status": { - "description": "Actual Agent status.", - "type": "string", - "x-order": 30 - }, - "table_count": { - "description": "Last known table count.", - "type": "integer", - "format": "int32", - "x-order": 31 - }, - "table_count_tablestats_group_limit": { - "description": "Tablestats group collectors are disabled if there are more than that number of tables.\n0 means tablestats group collectors are always enabled (no limit).\nNegative value means tablestats group collectors are always disabled.", - "type": "integer", - "format": "int32", - "x-order": 32 - }, - "tls": { - "description": "Use TLS for database connections.", - "type": "boolean", - "x-order": 33 - }, - "tls_skip_verify": { - "description": "Skip TLS certificate and hostname validation.", - "type": "boolean", - "x-order": 34 - }, - "username": { - "description": "HTTP basic auth username for collecting metrics.", - "type": "string", - "x-order": 35 + "x-order": 0 }, - "updated_at": { - "description": "Last update timestamp.", + "service_type": { + "description": "Service type.", "type": "string", - "format": "date-time", - "x-order": 36 + "x-order": 1 }, - "version": { - "description": "Agent version.", + "service_name": { + "description": "Service name.", "type": "string", - "x-order": 37 - }, - "is_connected": { - "description": "True if Agent is running and connected to pmm-managed.", - "type": "boolean", - "x-order": 38 - }, - "expose_exporter": { - "description": "True if an exporter agent is exposed on all host addresses.", - "type": "boolean", - "x-order": 39 + "x-order": 2 } } }, "x-order": 16 - }, - "status": { - "description": "Service status.\n\n - STATUS_UNSPECIFIED: In case we don't support the db vendor yet.\n - STATUS_UP: The service is up.\n - STATUS_DOWN: The service is down.\n - STATUS_UNKNOWN: The service's status cannot be known (e.g. there are no metrics yet).", - "type": "string", - "default": "STATUS_UNSPECIFIED", - "enum": [ - "STATUS_UNSPECIFIED", - "STATUS_UP", - "STATUS_DOWN", - "STATUS_UNKNOWN" - ], - "x-order": 17 - }, - "version": { - "description": "The service/database version.", - "type": "string", - "x-order": 18 } } }, @@ -5077,121 +4872,126 @@ } } } - } - }, - "/v1/management/annotations": { + }, "post": { - "description": "Adds an annotation.", + "description": "Registers a new Node and a pmm-agent.", "tags": [ "ManagementService" ], - "summary": "Add an Annotation", - "operationId": "AddAnnotation", + "summary": "Register a Node", + "operationId": "RegisterNode", "parameters": [ { - "description": "AddAnnotationRequest is a params to add new annotation.", "name": "body", "in": "body", "required": true, "schema": { - "description": "AddAnnotationRequest is a params to add new annotation.", "type": "object", "properties": { - "text": { - "description": "An annotation description. Required.", + "node_type": { + "description": "NodeType describes supported Node types.", "type": "string", + "default": "NODE_TYPE_UNSPECIFIED", + "enum": [ + "NODE_TYPE_UNSPECIFIED", + "NODE_TYPE_GENERIC_NODE", + "NODE_TYPE_CONTAINER_NODE", + "NODE_TYPE_REMOTE_NODE", + "NODE_TYPE_REMOTE_RDS_NODE", + "NODE_TYPE_REMOTE_AZURE_DATABASE_NODE" + ], "x-order": 0 }, - "tags": { - "description": "Tags are used to filter annotations.", - "type": "array", - "items": { - "type": "string" - }, + "node_name": { + "description": "A user-defined name unique across all Nodes.", + "type": "string", "x-order": 1 }, - "node_name": { - "description": "Used for annotating a node.", + "address": { + "description": "Node address (DNS name or IP).", "type": "string", "x-order": 2 }, - "service_names": { - "description": "Used for annotating services.", - "type": "array", - "items": { + "machine_id": { + "description": "Linux machine-id.", + "type": "string", + "x-order": 3 + }, + "distro": { + "description": "Linux distribution name and version.", + "type": "string", + "x-order": 4 + }, + "container_id": { + "description": "Container identifier. If specified, must be a unique Docker container identifier.", + "type": "string", + "x-order": 5 + }, + "container_name": { + "description": "Container name.", + "type": "string", + "x-order": 6 + }, + "node_model": { + "description": "Node model.", + "type": "string", + "x-order": 7 + }, + "region": { + "description": "Node region.", + "type": "string", + "x-order": 8 + }, + "az": { + "description": "Node availability zone.", + "type": "string", + "x-order": 9 + }, + "custom_labels": { + "description": "Custom user-assigned labels for Node.", + "type": "object", + "additionalProperties": { "type": "string" }, - "x-order": 3 - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32", - "x-order": 0 + "x-order": 10 }, - "message": { + "reregister": { + "description": "If true, and Node with that name already exist, it will be removed with all dependent Services and Agents.", + "type": "boolean", + "x-order": 11 + }, + "metrics_mode": { + "description": "MetricsMode defines desired metrics mode for agent,\nit can be pull, push or auto mode chosen by server.\n\n - METRICS_MODE_UNSPECIFIED: Auto", "type": "string", - "x-order": 1 + "default": "METRICS_MODE_UNSPECIFIED", + "enum": [ + "METRICS_MODE_UNSPECIFIED", + "METRICS_MODE_PULL", + "METRICS_MODE_PUSH" + ], + "x-order": 12 }, - "details": { + "disable_collectors": { + "description": "List of collector names to disable in this exporter.", "type": "array", "items": { - "type": "object", - "properties": { - "@type": { - "type": "string", - "x-order": 0 - } - }, - "additionalProperties": false + "type": "string" }, - "x-order": 2 + "x-order": 13 + }, + "agent_password": { + "description": "Custom password for exporter endpoint /metrics.", + "type": "string", + "x-order": 14 + }, + "expose_exporter": { + "type": "boolean", + "title": "Optionally expose the exporter process on all public interfaces", + "x-order": 15 } } } } - } - } - }, - "/v1/management/nodes": { - "get": { - "description": "Returns a filtered list of Nodes.", - "tags": [ - "ManagementService" - ], - "summary": "List Nodes", - "operationId": "ListNodes", - "parameters": [ - { - "enum": [ - "NODE_TYPE_UNSPECIFIED", - "NODE_TYPE_GENERIC_NODE", - "NODE_TYPE_CONTAINER_NODE", - "NODE_TYPE_REMOTE_NODE", - "NODE_TYPE_REMOTE_RDS_NODE", - "NODE_TYPE_REMOTE_AZURE_DATABASE_NODE" - ], - "type": "string", - "default": "NODE_TYPE_UNSPECIFIED", - "description": "Node type to be filtered out.", - "name": "node_type", - "in": "query" - } ], "responses": { "200": { @@ -5199,157 +4999,165 @@ "schema": { "type": "object", "properties": { - "nodes": { - "type": "array", - "items": { - "type": "object", - "properties": { - "node_id": { - "description": "Unique Node identifier.", - "type": "string", - "x-order": 0 - }, - "node_type": { - "description": "Node type.", - "type": "string", - "x-order": 1 - }, - "node_name": { - "description": "User-defined node name.", - "type": "string", - "x-order": 2 - }, - "machine_id": { - "description": "Linux machine-id.", - "type": "string", - "x-order": 3 - }, - "distro": { - "description": "Linux distribution name and version.", - "type": "string", - "x-order": 4 + "generic_node": { + "description": "GenericNode represents a bare metal server or virtual machine.", + "type": "object", + "properties": { + "node_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "node_name": { + "description": "Unique across all Nodes user-defined name.", + "type": "string", + "x-order": 1 + }, + "address": { + "description": "Node address (DNS name or IP).", + "type": "string", + "x-order": 2 + }, + "machine_id": { + "description": "Linux machine-id.", + "type": "string", + "x-order": 3 + }, + "distro": { + "description": "Linux distribution name and version.", + "type": "string", + "x-order": 4 + }, + "node_model": { + "description": "Node model.", + "type": "string", + "x-order": 5 + }, + "region": { + "description": "Node region.", + "type": "string", + "x-order": 6 + }, + "az": { + "description": "Node availability zone.", + "type": "string", + "x-order": 7 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" }, - "node_model": { - "description": "Node model.", - "type": "string", - "x-order": 5 - }, - "container_id": { - "description": "A node's unique docker container identifier.", - "type": "string", - "x-order": 6 - }, - "container_name": { - "description": "Container name.", - "type": "string", - "x-order": 7 - }, - "address": { - "description": "Node address (DNS name or IP).", - "type": "string", - "x-order": 8 - }, - "region": { - "description": "Node region.", - "type": "string", - "x-order": 9 - }, - "az": { - "description": "Node availability zone.", - "type": "string", - "x-order": 10 - }, - "custom_labels": { - "description": "Custom user-assigned labels for Node.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 11 - }, - "created_at": { - "description": "Creation timestamp.", - "type": "string", - "format": "date-time", - "x-order": 12 - }, - "updated_at": { - "description": "Last update timestamp.", - "type": "string", - "format": "date-time", - "x-order": 13 - }, - "status": { - "description": "Node status.\n\n - STATUS_UNSPECIFIED: Invalid status.\n - STATUS_UP: The node is up.\n - STATUS_DOWN: The node is down.\n - STATUS_UNKNOWN: The node's status cannot be known (e.g. there are no metrics yet).", - "type": "string", - "default": "STATUS_UNSPECIFIED", - "enum": [ - "STATUS_UNSPECIFIED", - "STATUS_UP", - "STATUS_DOWN", - "STATUS_UNKNOWN" - ], - "x-order": 14 + "x-order": 8 + } + }, + "x-order": 0 + }, + "container_node": { + "description": "ContainerNode represents a Docker container.", + "type": "object", + "properties": { + "node_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "node_name": { + "description": "Unique across all Nodes user-defined name.", + "type": "string", + "x-order": 1 + }, + "address": { + "description": "Node address (DNS name or IP).", + "type": "string", + "x-order": 2 + }, + "machine_id": { + "description": "Linux machine-id of the Generic Node where this Container Node runs.", + "type": "string", + "x-order": 3 + }, + "container_id": { + "description": "Container identifier. If specified, must be a unique Docker container identifier.", + "type": "string", + "x-order": 4 + }, + "container_name": { + "description": "Container name.", + "type": "string", + "x-order": 5 + }, + "node_model": { + "description": "Node model.", + "type": "string", + "x-order": 6 + }, + "region": { + "description": "Node region.", + "type": "string", + "x-order": 7 + }, + "az": { + "description": "Node availability zone.", + "type": "string", + "x-order": 8 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" }, - "agents": { - "description": "List of agents related to this node.", - "type": "array", - "items": { - "type": "object", - "properties": { - "agent_id": { - "description": "Unique Agent identifier.", - "type": "string", - "x-order": 0 - }, - "agent_type": { - "description": "Agent type.", - "type": "string", - "x-order": 1 - }, - "status": { - "description": "Actual Agent status.", - "type": "string", - "x-order": 2 - }, - "is_connected": { - "description": "True if Agent is running and connected to pmm-managed.", - "type": "boolean", - "x-order": 3 - } - } - }, - "x-order": 15 + "x-order": 9 + } + }, + "x-order": 1 + }, + "pmm_agent": { + "description": "PMMAgent runs on Generic or Container Node.", + "type": "object", + "properties": { + "agent_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "runs_on_node_id": { + "description": "Node identifier where this instance runs.", + "type": "string", + "x-order": 1 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" }, - "services": { - "description": "List of services running on this node.", - "type": "array", - "items": { - "description": "Service represents a service running on a node.", - "type": "object", - "properties": { - "service_id": { - "description": "Unique Service identifier.", - "type": "string", - "x-order": 0 - }, - "service_type": { - "description": "Service type.", - "type": "string", - "x-order": 1 - }, - "service_name": { - "description": "Service name.", - "type": "string", - "x-order": 2 - } - } - }, - "x-order": 16 - } + "x-order": 2 + }, + "connected": { + "description": "True if Agent is running and connected to pmm-managed.", + "type": "boolean", + "x-order": 3 + }, + "process_exec_path": { + "description": "Path to exec process.", + "type": "string", + "x-order": 4 } }, - "x-order": 0 + "x-order": 2 + }, + "token": { + "description": "Token represents token for vmagent auth config.", + "type": "string", + "x-order": 3 + }, + "warning": { + "description": "Warning message.", + "type": "string", + "x-order": 4 } } } @@ -5386,149 +5194,46 @@ } } } - }, - "post": { - "description": "Registers a new Node and a pmm-agent.", + } + }, + "/v1/management/nodes/{node_id}": { + "get": { + "description": "Returns a single Node by ID.", "tags": [ "ManagementService" ], - "summary": "Register a Node", - "operationId": "RegisterNode", + "summary": "Get Node", + "operationId": "GetNode", "parameters": [ { - "name": "body", - "in": "body", - "required": true, + "type": "string", + "description": "Unique Node identifier.", + "name": "node_id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "A successful response.", "schema": { "type": "object", "properties": { - "node_type": { - "description": "NodeType describes supported Node types.", - "type": "string", - "default": "NODE_TYPE_UNSPECIFIED", - "enum": [ - "NODE_TYPE_UNSPECIFIED", - "NODE_TYPE_GENERIC_NODE", - "NODE_TYPE_CONTAINER_NODE", - "NODE_TYPE_REMOTE_NODE", - "NODE_TYPE_REMOTE_RDS_NODE", - "NODE_TYPE_REMOTE_AZURE_DATABASE_NODE" - ], - "x-order": 0 - }, - "node_name": { - "description": "A user-defined name unique across all Nodes.", - "type": "string", - "x-order": 1 - }, - "address": { - "description": "Node address (DNS name or IP).", - "type": "string", - "x-order": 2 - }, - "machine_id": { - "description": "Linux machine-id.", - "type": "string", - "x-order": 3 - }, - "distro": { - "description": "Linux distribution name and version.", - "type": "string", - "x-order": 4 - }, - "container_id": { - "description": "Container identifier. If specified, must be a unique Docker container identifier.", - "type": "string", - "x-order": 5 - }, - "container_name": { - "description": "Container name.", - "type": "string", - "x-order": 6 - }, - "node_model": { - "description": "Node model.", - "type": "string", - "x-order": 7 - }, - "region": { - "description": "Node region.", - "type": "string", - "x-order": 8 - }, - "az": { - "description": "Node availability zone.", - "type": "string", - "x-order": 9 - }, - "custom_labels": { - "description": "Custom user-assigned labels for Node.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 10 - }, - "reregister": { - "description": "If true, and Node with that name already exist, it will be removed with all dependent Services and Agents.", - "type": "boolean", - "x-order": 11 - }, - "metrics_mode": { - "description": "MetricsMode defines desired metrics mode for agent,\nit can be pull, push or auto mode chosen by server.\n\n - METRICS_MODE_UNSPECIFIED: Auto", - "type": "string", - "default": "METRICS_MODE_UNSPECIFIED", - "enum": [ - "METRICS_MODE_UNSPECIFIED", - "METRICS_MODE_PULL", - "METRICS_MODE_PUSH" - ], - "x-order": 12 - }, - "disable_collectors": { - "description": "List of collector names to disable in this exporter.", - "type": "array", - "items": { - "type": "string" - }, - "x-order": 13 - }, - "agent_password": { - "description": "Custom password for exporter endpoint /metrics.", - "type": "string", - "x-order": 14 - }, - "expose_exporter": { - "type": "boolean", - "title": "Optionally expose the exporter process on all public interfaces", - "x-order": 15 - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object", - "properties": { - "generic_node": { - "description": "GenericNode represents a bare metal server or virtual machine.", + "node": { "type": "object", "properties": { "node_id": { - "description": "Unique randomly generated instance identifier.", + "description": "Unique Node identifier.", "type": "string", "x-order": 0 }, - "node_name": { - "description": "Unique across all Nodes user-defined name.", + "node_type": { + "description": "Node type.", "type": "string", "x-order": 1 }, - "address": { - "description": "Node address (DNS name or IP).", + "node_name": { + "description": "User-defined node name.", "type": "string", "x-order": 2 }, @@ -5547,131 +5252,190 @@ "type": "string", "x-order": 5 }, - "region": { - "description": "Node region.", + "container_id": { + "description": "A node's unique docker container identifier.", "type": "string", "x-order": 6 }, - "az": { - "description": "Node availability zone.", + "container_name": { + "description": "Container name.", "type": "string", "x-order": 7 }, - "custom_labels": { - "description": "Custom user-assigned labels.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 8 - } - }, - "x-order": 0 - }, - "container_node": { - "description": "ContainerNode represents a Docker container.", - "type": "object", - "properties": { - "node_id": { - "description": "Unique randomly generated instance identifier.", - "type": "string", - "x-order": 0 - }, - "node_name": { - "description": "Unique across all Nodes user-defined name.", - "type": "string", - "x-order": 1 - }, "address": { "description": "Node address (DNS name or IP).", "type": "string", - "x-order": 2 - }, - "machine_id": { - "description": "Linux machine-id of the Generic Node where this Container Node runs.", - "type": "string", - "x-order": 3 - }, - "container_id": { - "description": "Container identifier. If specified, must be a unique Docker container identifier.", - "type": "string", - "x-order": 4 - }, - "container_name": { - "description": "Container name.", - "type": "string", - "x-order": 5 - }, - "node_model": { - "description": "Node model.", - "type": "string", - "x-order": 6 + "x-order": 8 }, "region": { "description": "Node region.", "type": "string", - "x-order": 7 + "x-order": 9 }, "az": { "description": "Node availability zone.", "type": "string", - "x-order": 8 + "x-order": 10 }, "custom_labels": { - "description": "Custom user-assigned labels.", + "description": "Custom user-assigned labels for Node.", "type": "object", "additionalProperties": { "type": "string" }, - "x-order": 9 - } - }, - "x-order": 1 - }, - "pmm_agent": { - "description": "PMMAgent runs on Generic or Container Node.", - "type": "object", - "properties": { - "agent_id": { - "description": "Unique randomly generated instance identifier.", + "x-order": 11 + }, + "created_at": { + "description": "Creation timestamp.", "type": "string", - "x-order": 0 + "format": "date-time", + "x-order": 12 }, - "runs_on_node_id": { - "description": "Node identifier where this instance runs.", + "updated_at": { + "description": "Last update timestamp.", "type": "string", - "x-order": 1 + "format": "date-time", + "x-order": 13 }, - "custom_labels": { - "description": "Custom user-assigned labels.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "x-order": 2 + "status": { + "description": "Node status.\n\n - STATUS_UNSPECIFIED: Invalid status.\n - STATUS_UP: The node is up.\n - STATUS_DOWN: The node is down.\n - STATUS_UNKNOWN: The node's status cannot be known (e.g. there are no metrics yet).", + "type": "string", + "default": "STATUS_UNSPECIFIED", + "enum": [ + "STATUS_UNSPECIFIED", + "STATUS_UP", + "STATUS_DOWN", + "STATUS_UNKNOWN" + ], + "x-order": 14 }, - "connected": { - "description": "True if Agent is running and connected to pmm-managed.", - "type": "boolean", - "x-order": 3 + "agents": { + "description": "List of agents related to this node.", + "type": "array", + "items": { + "type": "object", + "properties": { + "agent_id": { + "description": "Unique Agent identifier.", + "type": "string", + "x-order": 0 + }, + "agent_type": { + "description": "Agent type.", + "type": "string", + "x-order": 1 + }, + "status": { + "description": "Actual Agent status.", + "type": "string", + "x-order": 2 + }, + "is_connected": { + "description": "True if Agent is running and connected to pmm-managed.", + "type": "boolean", + "x-order": 3 + } + } + }, + "x-order": 15 }, - "process_exec_path": { - "description": "Path to exec process.", - "type": "string", - "x-order": 4 + "services": { + "description": "List of services running on this node.", + "type": "array", + "items": { + "description": "Service represents a service running on a node.", + "type": "object", + "properties": { + "service_id": { + "description": "Unique Service identifier.", + "type": "string", + "x-order": 0 + }, + "service_type": { + "description": "Service type.", + "type": "string", + "x-order": 1 + }, + "service_name": { + "description": "Service name.", + "type": "string", + "x-order": 2 + } + } + }, + "x-order": 16 } }, - "x-order": 2 + "x-order": 0 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 }, - "token": { - "description": "Token represents token for vmagent auth config.", + "message": { "type": "string", - "x-order": 3 + "x-order": 1 }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + } + } + } + } + } + }, + "delete": { + "description": "Unregisters a Node and pmm-agent", + "tags": [ + "ManagementService" + ], + "summary": "Unregister a Node", + "operationId": "UnregisterNode", + "parameters": [ + { + "type": "string", + "description": "Node_id to be unregistered.", + "name": "node_id", + "in": "path", + "required": true + }, + { + "type": "boolean", + "description": "Force delete node, related service account, even if it has more service tokens attached.", + "name": "force", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { "warning": { - "description": "Warning message.", + "description": "Warning message if there are more service tokens attached to service account.", "type": "string", - "x-order": 4 + "x-order": 0 } } } @@ -5710,21 +5474,42 @@ } } }, - "/v1/management/nodes/{node_id}": { + "/v1/management/services": { "get": { - "description": "Returns a single Node by ID.", + "description": "Returns a filtered list of Services.", "tags": [ "ManagementService" ], - "summary": "Get Node", - "operationId": "GetNode", + "summary": "List Services", + "operationId": "ListServices", "parameters": [ { "type": "string", - "description": "Unique Node identifier.", + "description": "Return only Services running on that Node.", "name": "node_id", - "in": "path", - "required": true + "in": "query" + }, + { + "enum": [ + "SERVICE_TYPE_UNSPECIFIED", + "SERVICE_TYPE_MYSQL_SERVICE", + "SERVICE_TYPE_MONGODB_SERVICE", + "SERVICE_TYPE_POSTGRESQL_SERVICE", + "SERVICE_TYPE_PROXYSQL_SERVICE", + "SERVICE_TYPE_HAPROXY_SERVICE", + "SERVICE_TYPE_EXTERNAL_SERVICE" + ], + "type": "string", + "default": "SERVICE_TYPE_UNSPECIFIED", + "description": "Return only services filtered by service type.", + "name": "service_type", + "in": "query" + }, + { + "type": "string", + "description": "Return only services in this external group.", + "name": "external_group", + "in": "query" } ], "responses": { @@ -5733,222 +5518,430 @@ "schema": { "type": "object", "properties": { - "node": { - "type": "object", - "properties": { - "node_id": { - "description": "Unique Node identifier.", - "type": "string", - "x-order": 0 - }, - "node_type": { - "description": "Node type.", - "type": "string", - "x-order": 1 - }, - "node_name": { - "description": "User-defined node name.", - "type": "string", - "x-order": 2 - }, - "machine_id": { - "description": "Linux machine-id.", - "type": "string", - "x-order": 3 - }, - "distro": { - "description": "Linux distribution name and version.", - "type": "string", - "x-order": 4 - }, - "node_model": { - "description": "Node model.", - "type": "string", - "x-order": 5 - }, - "container_id": { - "description": "A node's unique docker container identifier.", - "type": "string", - "x-order": 6 - }, - "container_name": { - "description": "Container name.", - "type": "string", - "x-order": 7 - }, - "address": { - "description": "Node address (DNS name or IP).", - "type": "string", - "x-order": 8 - }, - "region": { - "description": "Node region.", - "type": "string", - "x-order": 9 - }, - "az": { - "description": "Node availability zone.", - "type": "string", - "x-order": 10 - }, - "custom_labels": { - "description": "Custom user-assigned labels for Node.", - "type": "object", - "additionalProperties": { - "type": "string" + "services": { + "description": "List of Services.", + "type": "array", + "items": { + "type": "object", + "properties": { + "service_id": { + "description": "Unique service identifier.", + "type": "string", + "x-order": 0 }, - "x-order": 11 - }, - "created_at": { - "description": "Creation timestamp.", - "type": "string", - "format": "date-time", - "x-order": 12 - }, - "updated_at": { - "description": "Last update timestamp.", - "type": "string", - "format": "date-time", - "x-order": 13 - }, - "status": { - "description": "Node status.\n\n - STATUS_UNSPECIFIED: Invalid status.\n - STATUS_UP: The node is up.\n - STATUS_DOWN: The node is down.\n - STATUS_UNKNOWN: The node's status cannot be known (e.g. there are no metrics yet).", - "type": "string", - "default": "STATUS_UNSPECIFIED", - "enum": [ - "STATUS_UNSPECIFIED", - "STATUS_UP", - "STATUS_DOWN", - "STATUS_UNKNOWN" - ], - "x-order": 14 - }, - "agents": { - "description": "List of agents related to this node.", - "type": "array", - "items": { + "service_type": { + "description": "Service type.", + "type": "string", + "x-order": 1 + }, + "service_name": { + "description": "User-defined name unique across all Services.", + "type": "string", + "x-order": 2 + }, + "database_name": { + "description": "Database name.", + "type": "string", + "x-order": 3 + }, + "node_id": { + "description": "Node identifier where this instance runs.", + "type": "string", + "x-order": 4 + }, + "node_name": { + "description": "Node name where this instance runs.", + "type": "string", + "x-order": 5 + }, + "environment": { + "description": "Environment name.", + "type": "string", + "x-order": 6 + }, + "cluster": { + "description": "Cluster name.", + "type": "string", + "x-order": 7 + }, + "replication_set": { + "description": "Replication set name.", + "type": "string", + "x-order": 8 + }, + "custom_labels": { + "description": "Custom user-assigned labels for Service.", "type": "object", - "properties": { - "agent_id": { - "description": "Unique Agent identifier.", - "type": "string", - "x-order": 0 - }, - "agent_type": { - "description": "Agent type.", - "type": "string", - "x-order": 1 - }, - "status": { - "description": "Actual Agent status.", - "type": "string", - "x-order": 2 - }, - "is_connected": { - "description": "True if Agent is running and connected to pmm-managed.", - "type": "boolean", - "x-order": 3 + "additionalProperties": { + "type": "string" + }, + "x-order": 9 + }, + "external_group": { + "description": "External group name.", + "type": "string", + "x-order": 10 + }, + "address": { + "description": "Access address (DNS name or IP).\nAddress (and port) or socket is required.", + "type": "string", + "x-order": 11 + }, + "port": { + "description": "Access port.\nPort is required when the address present.", + "type": "integer", + "format": "int64", + "x-order": 12 + }, + "socket": { + "description": "Access unix socket.\nAddress (and port) or socket is required.", + "type": "string", + "x-order": 13 + }, + "created_at": { + "description": "Creation timestamp.", + "type": "string", + "format": "date-time", + "x-order": 14 + }, + "updated_at": { + "description": "Last update timestamp.", + "type": "string", + "format": "date-time", + "x-order": 15 + }, + "agents": { + "description": "List of agents related to this service.", + "type": "array", + "items": { + "type": "object", + "properties": { + "agent_id": { + "description": "Unique agent identifier.", + "type": "string", + "x-order": 0 + }, + "is_agent_password_set": { + "description": "True if the agent password is set.", + "type": "boolean", + "x-order": 1 + }, + "agent_type": { + "description": "Agent type.", + "type": "string", + "x-order": 2 + }, + "aws_access_key": { + "description": "AWS Access Key.", + "type": "string", + "x-order": 3 + }, + "is_aws_secret_key_set": { + "description": "True if AWS Secret Key is set.", + "type": "boolean", + "x-order": 4 + }, + "azure_options": { + "type": "object", + "properties": { + "client_id": { + "description": "Azure client ID.", + "type": "string", + "x-order": 0 + }, + "is_client_secret_set": { + "description": "True if Azure client secret is set.", + "type": "boolean", + "x-order": 1 + }, + "resource_group": { + "description": "Azure resource group.", + "type": "string", + "x-order": 2 + }, + "subscription_id": { + "description": "Azure subscription ID.", + "type": "string", + "x-order": 3 + }, + "tenant_id": { + "description": "Azure tenant ID.", + "type": "string", + "x-order": 4 + } + }, + "x-order": 5 + }, + "created_at": { + "description": "Creation timestamp.", + "type": "string", + "format": "date-time", + "x-order": 6 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 7 + }, + "disabled": { + "description": "Desired Agent status: enabled (false) or disabled (true).", + "type": "boolean", + "x-order": 8 + }, + "disabled_collectors": { + "description": "List of disabled collector names.", + "type": "array", + "items": { + "type": "string" + }, + "x-order": 9 + }, + "listen_port": { + "description": "Listen port for scraping metrics.", + "type": "integer", + "format": "int64", + "x-order": 10 + }, + "log_level": { + "description": "Log level for exporter.", + "type": "string", + "x-order": 11 + }, + "max_query_length": { + "description": "Limit query length in QAN.", + "type": "integer", + "format": "int32", + "x-order": 12 + }, + "max_query_log_size": { + "description": "Limit query log size in QAN.", + "type": "string", + "format": "int64", + "x-order": 13 + }, + "metrics_path": { + "description": "Path under which metrics are exposed, used to generate URI.", + "type": "string", + "x-order": 14 + }, + "metrics_scheme": { + "description": "Scheme to generate URI to exporter metrics endpoints.", + "type": "string", + "x-order": 15 + }, + "mongo_db_options": { + "type": "object", + "properties": { + "is_tls_certificate_key_set": { + "description": "True if TLS certificate is set.", + "type": "boolean", + "x-order": 0 + }, + "is_tls_certificate_key_file_password_set": { + "description": "True if TLS certificate file password is set.", + "type": "boolean", + "x-order": 1 + }, + "authentication_mechanism": { + "description": "MongoDB auth mechanism.", + "type": "string", + "x-order": 2 + }, + "authentication_database": { + "description": "MongoDB auth database.", + "type": "string", + "x-order": 3 + }, + "stats_collections": { + "description": "MongoDB stats collections.", + "type": "array", + "items": { + "type": "string" + }, + "x-order": 4 + }, + "collections_limit": { + "description": "MongoDB collections limit.", + "type": "integer", + "format": "int32", + "x-order": 5 + }, + "enable_all_collectors": { + "description": "True if all collectors are enabled.", + "type": "boolean", + "x-order": 6 + } + }, + "x-order": 16 + }, + "mysql_options": { + "type": "object", + "properties": { + "is_tls_key_set": { + "description": "True if TLS key is set.", + "type": "boolean", + "x-order": 0 + } + }, + "x-order": 17 + }, + "node_id": { + "description": "A unique node identifier.", + "type": "string", + "x-order": 18 + }, + "is_password_set": { + "description": "True if password for connecting the agent to the database is set.", + "type": "boolean", + "x-order": 19 + }, + "pmm_agent_id": { + "description": "The pmm-agent identifier.", + "type": "string", + "x-order": 20 + }, + "postgresql_options": { + "type": "object", + "properties": { + "is_ssl_key_set": { + "description": "True if TLS key is set.", + "type": "boolean", + "x-order": 0 + }, + "auto_discovery_limit": { + "description": "Limit of databases for auto-discovery.", + "type": "integer", + "format": "int32", + "x-order": 1 + }, + "max_exporter_connections": { + "description": "Maximum number of connections from exporter to PostgreSQL instance.", + "type": "integer", + "format": "int32", + "x-order": 2 + } + }, + "x-order": 21 + }, + "process_exec_path": { + "description": "Path to exec process.", + "type": "string", + "x-order": 22 + }, + "push_metrics": { + "description": "True if exporter uses push metrics mode.", + "type": "boolean", + "x-order": 23 + }, + "query_examples_disabled": { + "description": "True if query examples are disabled.", + "type": "boolean", + "x-order": 24 + }, + "comments_parsing_disabled": { + "description": "True if query comments parsing is disabled.", + "type": "boolean", + "x-order": 25 + }, + "rds_basic_metrics_disabled": { + "description": "True if RDS basic metrics are disdabled.", + "type": "boolean", + "x-order": 26 + }, + "rds_enhanced_metrics_disabled": { + "description": "True if RDS enhanced metrics are disdabled.", + "type": "boolean", + "x-order": 27 + }, + "runs_on_node_id": { + "description": "Node identifier where this instance runs.", + "type": "string", + "x-order": 28 + }, + "service_id": { + "description": "Service identifier.", + "type": "string", + "x-order": 29 + }, + "status": { + "description": "Actual Agent status.", + "type": "string", + "x-order": 30 + }, + "table_count": { + "description": "Last known table count.", + "type": "integer", + "format": "int32", + "x-order": 31 + }, + "table_count_tablestats_group_limit": { + "description": "Tablestats group collectors are disabled if there are more than that number of tables.\n0 means tablestats group collectors are always enabled (no limit).\nNegative value means tablestats group collectors are always disabled.", + "type": "integer", + "format": "int32", + "x-order": 32 + }, + "tls": { + "description": "Use TLS for database connections.", + "type": "boolean", + "x-order": 33 + }, + "tls_skip_verify": { + "description": "Skip TLS certificate and hostname validation.", + "type": "boolean", + "x-order": 34 + }, + "username": { + "description": "HTTP basic auth username for collecting metrics.", + "type": "string", + "x-order": 35 + }, + "updated_at": { + "description": "Last update timestamp.", + "type": "string", + "format": "date-time", + "x-order": 36 + }, + "version": { + "description": "Agent version.", + "type": "string", + "x-order": 37 + }, + "is_connected": { + "description": "True if Agent is running and connected to pmm-managed.", + "type": "boolean", + "x-order": 38 + }, + "expose_exporter": { + "description": "True if an exporter agent is exposed on all host addresses.", + "type": "boolean", + "x-order": 39 + } } - } + }, + "x-order": 16 }, - "x-order": 15 - }, - "services": { - "description": "List of services running on this node.", - "type": "array", - "items": { - "description": "Service represents a service running on a node.", - "type": "object", - "properties": { - "service_id": { - "description": "Unique Service identifier.", - "type": "string", - "x-order": 0 - }, - "service_type": { - "description": "Service type.", - "type": "string", - "x-order": 1 - }, - "service_name": { - "description": "Service name.", - "type": "string", - "x-order": 2 - } - } + "status": { + "description": "Service status.\n\n - STATUS_UNSPECIFIED: In case we don't support the db vendor yet.\n - STATUS_UP: The service is up.\n - STATUS_DOWN: The service is down.\n - STATUS_UNKNOWN: The service's status cannot be known (e.g. there are no metrics yet).", + "type": "string", + "default": "STATUS_UNSPECIFIED", + "enum": [ + "STATUS_UNSPECIFIED", + "STATUS_UP", + "STATUS_DOWN", + "STATUS_UNKNOWN" + ], + "x-order": 17 }, - "x-order": 16 - } - }, - "x-order": 0 - } - } - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32", - "x-order": 0 - }, - "message": { - "type": "string", - "x-order": 1 - }, - "details": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@type": { + "version": { + "description": "The service/database version.", "type": "string", - "x-order": 0 + "x-order": 18 } - }, - "additionalProperties": false + } }, - "x-order": 2 - } - } - } - } - } - }, - "delete": { - "description": "Unregisters a Node and pmm-agent", - "tags": [ - "ManagementService" - ], - "summary": "Unregister a Node", - "operationId": "UnregisterNode", - "parameters": [ - { - "type": "string", - "description": "Node_id to be unregistered.", - "name": "node_id", - "in": "path", - "required": true - }, - { - "type": "boolean", - "description": "Force delete node, related service account, even if it has more service tokens attached.", - "name": "force", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object", - "properties": { - "warning": { - "description": "Warning message if there are more service tokens attached to service account.", - "type": "string", "x-order": 0 } } @@ -5986,9 +5979,7 @@ } } } - } - }, - "/v1/management/services": { + }, "post": { "description": "Adds a service and starts several agents.", "tags": [ @@ -9893,6 +9884,203 @@ } } }, + "/v1/management/services/azure": { + "post": { + "description": "Adds an Azure Database instance.", + "tags": [ + "ManagementService" + ], + "summary": "Add Azure Database", + "operationId": "AddAzureDatabase", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "region": { + "description": "Azure database location.", + "type": "string", + "x-order": 0 + }, + "az": { + "description": "Azure database availability zone.", + "type": "string", + "x-order": 1 + }, + "instance_id": { + "description": "Azure database instance ID.", + "type": "string", + "x-order": 2 + }, + "node_model": { + "description": "Represents a purchasable Stock Keeping Unit (SKU) under a product.\nhttps://docs.microsoft.com/en-us/partner-center/develop/product-resources#sku.", + "type": "string", + "x-order": 3 + }, + "address": { + "description": "Address used to connect to it.", + "type": "string", + "x-order": 4 + }, + "port": { + "description": "Access port.", + "type": "integer", + "format": "int64", + "x-order": 5 + }, + "node_name": { + "description": "Unique across all Nodes user-defined name. Defaults to Azure Database instance ID.", + "type": "string", + "x-order": 6 + }, + "service_name": { + "description": "Unique across all Services user-defined name. Defaults to Azure Database instance ID.", + "type": "string", + "x-order": 7 + }, + "environment": { + "description": "Environment name.", + "type": "string", + "x-order": 8 + }, + "username": { + "description": "Username for scraping metrics.", + "type": "string", + "x-order": 9 + }, + "password": { + "description": "Password for scraping metrics.", + "type": "string", + "x-order": 10 + }, + "azure_client_id": { + "description": "Azure client ID.", + "type": "string", + "x-order": 11 + }, + "azure_client_secret": { + "description": "Azure client secret.", + "type": "string", + "x-order": 12 + }, + "azure_tenant_id": { + "description": "Azure tanant ID.", + "type": "string", + "x-order": 13 + }, + "azure_subscription_id": { + "description": "Azure subscription ID.", + "type": "string", + "x-order": 14 + }, + "azure_resource_group": { + "description": "Azure resource group.", + "type": "string", + "x-order": 15 + }, + "azure_database_exporter": { + "description": "If true, adds azure_database_exporter.", + "type": "boolean", + "x-order": 16 + }, + "qan": { + "description": "If true, adds qan-mysql-perfschema-agent or qan-postgresql-pgstatements-agent.", + "type": "boolean", + "x-order": 17 + }, + "custom_labels": { + "description": "Custom user-assigned labels for Node and Service.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 18 + }, + "skip_connection_check": { + "description": "Skip connection check.", + "type": "boolean", + "x-order": 19 + }, + "tls": { + "description": "Use TLS for database connections.", + "type": "boolean", + "x-order": 20 + }, + "tls_skip_verify": { + "description": "Skip TLS certificate and hostname validation.", + "type": "boolean", + "x-order": 21 + }, + "disable_query_examples": { + "description": "Disable query examples.", + "type": "boolean", + "x-order": 22 + }, + "tablestats_group_table_limit": { + "description": "Tablestats group collectors will be disabled if there are more than that number of tables.\nIf zero, server's default value is used.\nUse negative value to disable them.", + "type": "integer", + "format": "int32", + "x-order": 23 + }, + "type": { + "description": "DiscoverAzureDatabaseType describes supported Azure Database instance engines.\n\n - DISCOVER_AZURE_DATABASE_TYPE_MYSQL: MySQL type: microsoft.dbformysql or MariaDB type: microsoft.dbformariadb\n - DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL: PostgreSQL type: microsoft.dbformysql", + "type": "string", + "default": "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", + "enum": [ + "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", + "DISCOVER_AZURE_DATABASE_TYPE_MYSQL", + "DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL" + ], + "x-order": 24 + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "message": { + "type": "string", + "x-order": 1 + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + } + } + } + } + } + } + }, "/v1/management/services/{service_id}": { "delete": { "description": "Removes a Service along with its Agents.", @@ -9967,6 +10155,158 @@ } } }, + "/v1/management/services:discoverAzure": { + "post": { + "description": "Discovers Azure Database for MySQL, MariaDB and PostgreSQL Server instances.", + "tags": [ + "ManagementService" + ], + "summary": "Discover Azure Database", + "operationId": "DiscoverAzureDatabase", + "parameters": [ + { + "description": "DiscoverAzureDatabaseRequest discover azure databases request.", + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "DiscoverAzureDatabaseRequest discover azure databases request.", + "type": "object", + "properties": { + "azure_client_id": { + "description": "Azure client ID.", + "type": "string", + "x-order": 0 + }, + "azure_client_secret": { + "description": "Azure client secret.", + "type": "string", + "x-order": 1 + }, + "azure_tenant_id": { + "description": "Azure tanant ID.", + "type": "string", + "x-order": 2 + }, + "azure_subscription_id": { + "description": "Azure subscription ID.", + "type": "string", + "x-order": 3 + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "description": "DiscoverAzureDatabaseResponse discover azure databases response.", + "type": "object", + "properties": { + "azure_database_instance": { + "type": "array", + "items": { + "description": "DiscoverAzureDatabaseInstance models an unique Azure Database instance for the list of instances returned by Discovery.", + "type": "object", + "properties": { + "instance_id": { + "description": "Azure database instance ID.", + "type": "string", + "x-order": 0 + }, + "region": { + "description": "Azure database location.", + "type": "string", + "x-order": 1 + }, + "service_name": { + "description": "Azure database server name.", + "type": "string", + "x-order": 2 + }, + "username": { + "description": "Database username.", + "type": "string", + "x-order": 3 + }, + "address": { + "description": "Address used to connect to it.", + "type": "string", + "x-order": 4 + }, + "azure_resource_group": { + "description": "Azure Resource group.", + "type": "string", + "x-order": 5 + }, + "environment": { + "description": "Environment tag.", + "type": "string", + "x-order": 6 + }, + "type": { + "description": "DiscoverAzureDatabaseType describes supported Azure Database instance engines.\n\n - DISCOVER_AZURE_DATABASE_TYPE_MYSQL: MySQL type: microsoft.dbformysql or MariaDB type: microsoft.dbformariadb\n - DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL: PostgreSQL type: microsoft.dbformysql", + "type": "string", + "default": "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", + "enum": [ + "DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED", + "DISCOVER_AZURE_DATABASE_TYPE_MYSQL", + "DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL" + ], + "x-order": 7 + }, + "az": { + "description": "Azure database availability zone.", + "type": "string", + "x-order": 8 + }, + "node_model": { + "description": "Represents a purchasable Stock Keeping Unit (SKU) under a product.\nhttps://docs.microsoft.com/en-us/partner-center/develop/product-resources#sku.", + "type": "string", + "x-order": 9 + } + } + }, + "x-order": 0 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "message": { + "type": "string", + "x-order": 1 + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + } + } + } + } + } + } + }, "/v1/management/services:discoverRDS": { "post": { "description": "Discovers RDS instances.", diff --git a/descriptor.bin b/descriptor.bin index 41c182aa85c..6132b4ebd02 100644 Binary files a/descriptor.bin and b/descriptor.bin differ diff --git a/managed/services/management/azure_database.go b/managed/services/management/azure_database.go index a2021dfd57b..0fea4138109 100644 --- a/managed/services/management/azure_database.go +++ b/managed/services/management/azure_database.go @@ -28,7 +28,7 @@ import ( "google.golang.org/grpc/status" "gopkg.in/reform.v1" - azurev1beta1 "github.com/percona/pmm/api/management/v1/azure" + managementv1 "github.com/percona/pmm/api/management/v1" "github.com/percona/pmm/managed/models" "github.com/percona/pmm/managed/services" "github.com/percona/pmm/utils/logger" @@ -76,7 +76,7 @@ type AzureDatabaseInstanceData struct { Zones string `json:"zones"` } -func (s *ManagementService) getAzureClient(req *azurev1beta1.DiscoverAzureDatabaseRequest) (*armresourcegraph.Client, error) { +func (s *ManagementService) getAzureClient(req *managementv1.DiscoverAzureDatabaseRequest) (*armresourcegraph.Client, error) { credential, err := azidentity.NewClientSecretCredential(req.AzureTenantId, req.AzureClientId, req.AzureClientSecret, nil) if err != nil { return nil, err @@ -93,7 +93,7 @@ func (s *ManagementService) getAzureClient(req *azurev1beta1.DiscoverAzureDataba func (s *ManagementService) fetchAzureDatabaseInstancesData( ctx context.Context, - req *azurev1beta1.DiscoverAzureDatabaseRequest, + req *managementv1.DiscoverAzureDatabaseRequest, client *armresourcegraph.Client, ) ([]AzureDatabaseInstanceData, error) { query := azureDatabaseResourceQuery @@ -132,8 +132,8 @@ func (s *ManagementService) fetchAzureDatabaseInstancesData( // DiscoverAzureDatabase discovers database instances on Azure. func (s *ManagementService) DiscoverAzureDatabase( ctx context.Context, - req *azurev1beta1.DiscoverAzureDatabaseRequest, -) (*azurev1beta1.DiscoverAzureDatabaseResponse, error) { + req *managementv1.DiscoverAzureDatabaseRequest, +) (*managementv1.DiscoverAzureDatabaseResponse, error) { if !s.isAzureEnabled() { return nil, services.ErrAzureDisabled } @@ -148,10 +148,10 @@ func (s *ManagementService) DiscoverAzureDatabase( return nil, status.Error(codes.Unknown, err.Error()) } - resp := azurev1beta1.DiscoverAzureDatabaseResponse{} + resp := managementv1.DiscoverAzureDatabaseResponse{} for _, instance := range dataInstData { - inst := azurev1beta1.DiscoverAzureDatabaseInstance{ + inst := managementv1.DiscoverAzureDatabaseInstance{ InstanceId: instance.ID, Region: instance.Location, ServiceName: instance.Name, @@ -163,13 +163,13 @@ func (s *ManagementService) DiscoverAzureDatabase( case "microsoft.dbformysql/servers", "microsoft.dbformysql/flexibleservers", "microsoft.dbformariadb/servers": - inst.Type = azurev1beta1.DiscoverAzureDatabaseType_DISCOVER_AZURE_DATABASE_TYPE_MYSQL + inst.Type = managementv1.DiscoverAzureDatabaseType_DISCOVER_AZURE_DATABASE_TYPE_MYSQL case "microsoft.dbforpostgresql/servers", "microsoft.dbforpostgresql/flexibleservers", "microsoft.dbforpostgresql/serversv2": - inst.Type = azurev1beta1.DiscoverAzureDatabaseType_DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL + inst.Type = managementv1.DiscoverAzureDatabaseType_DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL default: - inst.Type = azurev1beta1.DiscoverAzureDatabaseType_DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED + inst.Type = managementv1.DiscoverAzureDatabaseType_DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED } if val, ok := instance.Properties["administratorLogin"].(string); ok { @@ -189,7 +189,7 @@ func (s *ManagementService) DiscoverAzureDatabase( } // AddAzureDatabase add azure database to monitoring. -func (s *ManagementService) AddAzureDatabase(ctx context.Context, req *azurev1beta1.AddAzureDatabaseRequest) (*azurev1beta1.AddAzureDatabaseResponse, error) { +func (s *ManagementService) AddAzureDatabase(ctx context.Context, req *managementv1.AddAzureDatabaseRequest) (*managementv1.AddAzureDatabaseResponse, error) { if !s.isAzureEnabled() { return nil, services.ErrAzureDisabled } @@ -217,11 +217,11 @@ func (s *ManagementService) AddAzureDatabase(ctx context.Context, req *azurev1be var qanAgentType models.AgentType switch req.Type { - case azurev1beta1.DiscoverAzureDatabaseType_DISCOVER_AZURE_DATABASE_TYPE_MYSQL: + case managementv1.DiscoverAzureDatabaseType_DISCOVER_AZURE_DATABASE_TYPE_MYSQL: serviceType = models.MySQLServiceType exporterType = models.MySQLdExporterType qanAgentType = models.QANMySQLPerfSchemaAgentType - case azurev1beta1.DiscoverAzureDatabaseType_DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL: + case managementv1.DiscoverAzureDatabaseType_DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL: serviceType = models.PostgreSQLServiceType exporterType = models.PostgresExporterType qanAgentType = models.QANPostgreSQLPgStatementsAgentType @@ -315,5 +315,5 @@ func (s *ManagementService) AddAzureDatabase(ctx context.Context, req *azurev1be } s.state.RequestStateUpdate(ctx, models.PMMServerAgentID) - return &azurev1beta1.AddAzureDatabaseResponse{}, nil + return &managementv1.AddAzureDatabaseResponse{}, nil }