From abe8a73dcaa161acb0842e4eecea7b892b2a0427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Ctvrtka?= Date: Tue, 21 Apr 2026 10:48:20 +0200 Subject: [PATCH 01/10] PMM-12832 Add exporter connection timeout plumbing --- .github/workflows/api-tests.yml | 4 +- .golangci.yml | 3 + admin/commands/config.go | 4 +- admin/commands/helpers.go | 28 + .../inventory/add_agent_external_exporter.go | 43 +- .../inventory/add_agent_mongodb_exporter.go | 6 +- .../inventory/add_agent_mysqld_exporter.go | 5 +- .../inventory/add_agent_node_exporter.go | 6 +- .../inventory/add_agent_postgres_exporter.go | 16 +- .../inventory/add_agent_proxysql_exporter.go | 6 +- .../inventory/add_agent_rds_exporter.go | 6 +- .../inventory/add_agent_valkey_exporter.go | 4 + .../change_agent_azure_database_exporter.go | 5 +- .../change_agent_external_exporter.go | 11 +- .../change_agent_mongodb_exporter.go | 9 +- .../inventory/change_agent_mysqld_exporter.go | 11 +- .../inventory/change_agent_node_exporter.go | 9 +- .../change_agent_postgres_exporter.go | 13 +- .../change_agent_proxysql_exporter.go | 9 +- .../inventory/change_agent_rds_exporter.go | 5 +- .../inventory/change_agent_valkey_exporter.go | 9 +- admin/commands/management/add_external.go | 3 + admin/commands/management/add_mongodb.go | 5 +- admin/commands/management/add_mysql.go | 5 +- admin/commands/management/add_postgresql.go | 5 +- admin/commands/management/add_proxysql.go | 5 +- admin/commands/management/add_valkey.go | 18 +- agent/agents/supervisor/supervisor.go | 4 + agent/commands/setup.go | 2 + agent/config/config.go | 4 + api-tests/helpers.go | 27 + api-tests/init.go | 26 +- api/agent/v1/agent.pb.go | 34 +- api/inventory/v1/agents.pb.go | 1060 +++++++++++------ api/inventory/v1/agents.pb.validate.go | 815 ++++++++++++- api/inventory/v1/agents.proto | 90 ++ .../agents_service/add_agent_responses.go | 54 + .../agents_service/change_agent_responses.go | 54 + .../agents_service/get_agent_responses.go | 27 + .../agents_service/list_agents_responses.go | 27 + api/inventory/v1/json/v1.json | 270 +++++ api/management/v1/agent.pb.go | 41 +- api/management/v1/agent.pb.validate.go | 29 + api/management/v1/agent.proto | 3 + api/management/v1/azure.pb.go | 35 +- api/management/v1/azure.pb.validate.go | 30 + api/management/v1/azure.proto | 5 + api/management/v1/external.pb.go | 39 +- api/management/v1/external.pb.validate.go | 30 + api/management/v1/external.proto | 5 + .../add_azure_database_responses.go | 3 + .../add_service_responses.go | 51 + .../list_agents_responses.go | 3 + .../list_services_responses.go | 3 + .../register_node_responses.go | 3 + api/management/v1/json/v1.json | 105 ++ api/management/v1/mongodb.pb.go | 51 +- api/management/v1/mongodb.pb.validate.go | 30 + api/management/v1/mongodb.proto | 5 + api/management/v1/mysql.pb.go | 47 +- api/management/v1/mysql.pb.validate.go | 30 + api/management/v1/mysql.proto | 5 + api/management/v1/node.pb.go | 67 +- api/management/v1/node.pb.validate.go | 30 + api/management/v1/node.proto | 5 + api/management/v1/postgresql.pb.go | 55 +- api/management/v1/postgresql.pb.validate.go | 30 + api/management/v1/postgresql.proto | 5 + api/management/v1/proxysql.pb.go | 39 +- api/management/v1/proxysql.pb.validate.go | 30 + api/management/v1/proxysql.proto | 5 + api/management/v1/rds.pb.go | 65 +- api/management/v1/rds.pb.validate.go | 30 + api/management/v1/rds.proto | 5 + api/management/v1/valkey.pb.go | 39 +- api/management/v1/valkey.pb.validate.go | 30 + api/management/v1/valkey.proto | 5 + api/swagger/swagger-dev.json | 375 ++++++ api/swagger/swagger.json | 375 ++++++ .../rpm/server/SPECS/percona-dashboards.spec | 7 +- documentation/docs/reference/index.md | 4 +- documentation/docs/use/commands/pmm-agent.md | 11 +- managed/models/agent_helpers.go | 28 +- managed/models/agent_helpers_test.go | 42 + managed/models/agent_model.go | 241 ++-- managed/models/agent_model_test.go | 132 +- managed/models/database.go | 4 +- managed/models/dsn_helpers.go | 8 + managed/models/dsn_helpers_test.go | 6 +- managed/services/agents/mongodb.go | 2 +- managed/services/agents/mongodb_test.go | 37 +- managed/services/agents/mysql.go | 22 +- managed/services/agents/mysql_test.go | 77 +- managed/services/agents/postgresql.go | 27 +- managed/services/agents/postgresql_test.go | 93 +- managed/services/agents/proxysql.go | 3 +- managed/services/agents/proxysql_test.go | 10 +- managed/services/agents/valkey.go | 8 +- managed/services/agents/valkey_test.go | 80 ++ managed/services/converters.go | 59 +- managed/services/converters_test.go | 41 + managed/services/inventory/agents.go | 161 +-- managed/services/inventory/agents_test.go | 185 ++- .../add_service_exporter_timeout_test.go | 296 +++++ managed/services/management/agent.go | 3 + managed/services/management/azure_database.go | 7 + managed/services/management/external.go | 22 +- managed/services/management/mongodb.go | 2 + managed/services/management/mysql.go | 31 +- managed/services/management/node.go | 3 +- managed/services/management/postgresql.go | 27 +- managed/services/management/proxysql.go | 29 +- managed/services/management/rds.go | 10 +- managed/services/management/valkey.go | 6 +- managed/utils/duration/duration.go | 33 + managed/utils/duration/duration_test.go | 44 + 116 files changed, 5248 insertions(+), 1043 deletions(-) create mode 100644 admin/commands/helpers.go create mode 100644 managed/services/agents/valkey_test.go create mode 100644 managed/services/management/add_service_exporter_timeout_test.go create mode 100644 managed/utils/duration/duration.go create mode 100644 managed/utils/duration/duration_test.go diff --git a/.github/workflows/api-tests.yml b/.github/workflows/api-tests.yml index 01a9c2d2978..37a330f510a 100644 --- a/.github/workflows/api-tests.yml +++ b/.github/workflows/api-tests.yml @@ -23,7 +23,7 @@ on: description: "The branch to pull API tests from" default: "v3" required: true - type: string + type: string PMM_SERVER_IMAGE: description: "PMM Server image version" default: "ghcr.io/percona/pmm:3-dev-container" @@ -46,7 +46,7 @@ jobs: - name: Check out code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: - ref: ${{ env.BRANCH }} + ref: ${{ env.BRANCH }} - name: Login to docker.io registry uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0 diff --git a/.golangci.yml b/.golangci.yml index a01d7d62260..8da26beb107 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -111,6 +111,9 @@ linters: - linters: - recvcheck path: managed/models/ + - linters: + - mnd + path: api-tests paths: - managed/utils/interceptors/go-grpc-prometheus.go - agent/agents/mongodb/internal/ diff --git a/admin/commands/config.go b/admin/commands/config.go index 26309fa038d..665ff3c8c10 100644 --- a/admin/commands/config.go +++ b/admin/commands/config.go @@ -91,8 +91,8 @@ func (cmd *ConfigCommand) args(globals *flags.GlobalFlags) ([]string, bool) { res = append(res, "--server-insecure-tls") } - if cmd.LogLevelFatalFlags.LogLevel != "" { - res = append(res, fmt.Sprintf("--log-level=%s", cmd.LogLevelFatalFlags.LogLevel)) + if cmd.LogLevel != "" { + res = append(res, fmt.Sprintf("--log-level=%s", cmd.LogLevel)) } if globals.EnableDebug { res = append(res, "--debug") diff --git a/admin/commands/helpers.go b/admin/commands/helpers.go new file mode 100644 index 00000000000..1a5ce83b368 --- /dev/null +++ b/admin/commands/helpers.go @@ -0,0 +1,28 @@ +// Copyright (C) 2023 Percona LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package commands + +import ( + "time" +) + +// DurationString returns the string representation of a duration flag. +func DurationString(value *time.Duration) string { + if value == nil { + return "" + } + + return value.String() +} diff --git a/admin/commands/inventory/add_agent_external_exporter.go b/admin/commands/inventory/add_agent_external_exporter.go index 039faf30a2a..6454a8628ec 100644 --- a/admin/commands/inventory/add_agent_external_exporter.go +++ b/admin/commands/inventory/add_agent_external_exporter.go @@ -17,6 +17,7 @@ package inventory import ( "fmt" "strings" + "time" "github.com/AlekSi/pointer" @@ -51,16 +52,17 @@ func (res *addAgentExternalExporterResult) String() string { // AddAgentExternalExporterCommand is used by Kong for CLI flags and commands. type AddAgentExternalExporterCommand struct { - RunsOnNodeID string `required:"" help:"Node identifier where this instance runs"` - ServiceID string `required:"" help:"Service identifier"` - Username string `help:"HTTP Basic auth username for scraping metrics"` - Password string `help:"HTTP Basic auth password for scraping metrics"` - Scheme string `help:"Scheme to generate URI to exporter metrics endpoints (http, https)"` - MetricsPath string `help:"Path under which metrics are exposed, used to generate URI"` - ListenPort int64 `required:"" placeholder:"port" help:"Listen port for scraping metrics"` - CustomLabels map[string]string `mapsep:"," help:"Custom user-assigned labels"` - PushMetrics bool `help:"Enables push metrics model flow, it will be sent to the server by an agent"` - TLSSkipVerify bool `help:"Skip TLS certificate verification"` + RunsOnNodeID string `required:"" help:"Node identifier where this instance runs"` + ServiceID string `required:"" help:"Service identifier"` + Username string `help:"HTTP Basic auth username for scraping metrics"` + Password string `help:"HTTP Basic auth password for scraping metrics"` + Scheme string `help:"Scheme to generate URI to exporter metrics endpoints (http, https)"` + MetricsPath string `help:"Path under which metrics are exposed, used to generate URI"` + ListenPort int64 `required:"" placeholder:"port" help:"Listen port for scraping metrics"` + CustomLabels map[string]string `mapsep:"," help:"Custom user-assigned labels"` + PushMetrics bool `help:"Enables push metrics model flow, it will be sent to the server by an agent"` + TLSSkipVerify bool `help:"Skip TLS certificate verification"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` } // RunCmd executes the AddAgentExternalExporterCommand and returns the result. @@ -74,16 +76,17 @@ func (cmd *AddAgentExternalExporterCommand) RunCmd() (commands.Result, error) { params := &agents.AddAgentParams{ Body: agents.AddAgentBody{ ExternalExporter: &agents.AddAgentParamsBodyExternalExporter{ - RunsOnNodeID: cmd.RunsOnNodeID, - ServiceID: cmd.ServiceID, - Username: cmd.Username, - Password: cmd.Password, - Scheme: cmd.Scheme, - MetricsPath: cmd.MetricsPath, - ListenPort: cmd.ListenPort, - CustomLabels: pointer.Get(customLabels), - PushMetrics: cmd.PushMetrics, - TLSSkipVerify: cmd.TLSSkipVerify, + RunsOnNodeID: cmd.RunsOnNodeID, + ServiceID: cmd.ServiceID, + Username: cmd.Username, + Password: cmd.Password, + Scheme: cmd.Scheme, + MetricsPath: cmd.MetricsPath, + ListenPort: cmd.ListenPort, + CustomLabels: pointer.Get(customLabels), + PushMetrics: cmd.PushMetrics, + TLSSkipVerify: cmd.TLSSkipVerify, + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_mongodb_exporter.go b/admin/commands/inventory/add_agent_mongodb_exporter.go index 920ffb30b5a..c5120f2d934 100644 --- a/admin/commands/inventory/add_agent_mongodb_exporter.go +++ b/admin/commands/inventory/add_agent_mongodb_exporter.go @@ -15,6 +15,8 @@ package inventory import ( + "time" + "github.com/AlekSi/pointer" "github.com/percona/pmm/admin/commands" @@ -67,6 +69,7 @@ type AddAgentMongodbExporterCommand struct { DisableCollectors []string `help:"Comma-separated list of collector names to exclude from exporter"` StatsCollections []string `help:"Collections for collstats & indexstats"` CollectionsLimit int32 `name:"max-collections-limit" placeholder:"number" help:"Disable collstats & indexstats if there are more than collections"` //nolint:lll + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` flags.LogLevelFatalFlags } @@ -104,7 +107,8 @@ func (cmd *AddAgentMongodbExporterCommand) RunCmd() (commands.Result, error) { DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), StatsCollections: commands.ParseDisableCollectors(cmd.StatsCollections), CollectionsLimit: cmd.CollectionsLimit, - LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_mysqld_exporter.go b/admin/commands/inventory/add_agent_mysqld_exporter.go index 6e6445c7422..398d845724a 100644 --- a/admin/commands/inventory/add_agent_mysqld_exporter.go +++ b/admin/commands/inventory/add_agent_mysqld_exporter.go @@ -17,6 +17,7 @@ package inventory import ( "fmt" "strconv" + "time" "github.com/AlekSi/pointer" @@ -103,6 +104,7 @@ type AddAgentMysqldExporterCommand struct { PushMetrics bool `help:"Enables push metrics model flow, it will be sent to the server by an agent"` ExposeExporter bool `help:"Expose the address of the exporter publicly on 0.0.0.0"` DisableCollectors []string `help:"Comma-separated list of collector names to exclude from exporter"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` flags.LogLevelNoFatalFlags } @@ -152,7 +154,8 @@ func (cmd *AddAgentMysqldExporterCommand) RunCmd() (commands.Result, error) { PushMetrics: cmd.PushMetrics, ExposeExporter: cmd.ExposeExporter, DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), - LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_node_exporter.go b/admin/commands/inventory/add_agent_node_exporter.go index b1c62b80aab..9130838be69 100644 --- a/admin/commands/inventory/add_agent_node_exporter.go +++ b/admin/commands/inventory/add_agent_node_exporter.go @@ -15,6 +15,8 @@ package inventory import ( + "time" + "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" "github.com/percona/pmm/api/inventory/v1/json/client" @@ -49,6 +51,7 @@ type AddAgentNodeExporterCommand struct { PushMetrics bool `help:"Enables push metrics model flow, it will be sent to the server by an agent"` ExposeExporter bool `help:"Expose the address of the exporter publicly on 0.0.0.0"` DisableCollectors []string `help:"Comma-separated list of collector names to exclude from exporter"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` flags.LogLevelNoFatalFlags } @@ -64,7 +67,8 @@ func (cmd *AddAgentNodeExporterCommand) RunCmd() (commands.Result, error) { PushMetrics: cmd.PushMetrics, ExposeExporter: cmd.ExposeExporter, DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), - LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_postgres_exporter.go b/admin/commands/inventory/add_agent_postgres_exporter.go index c7ca5b9d97f..b3db9e25ed2 100644 --- a/admin/commands/inventory/add_agent_postgres_exporter.go +++ b/admin/commands/inventory/add_agent_postgres_exporter.go @@ -15,6 +15,8 @@ package inventory import ( + "time" + "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" "github.com/percona/pmm/api/inventory/v1/json/client" @@ -67,6 +69,7 @@ type AddAgentPostgresExporterCommand struct { TLSKeyFile string `help:"TLS certificate key file"` AutoDiscoveryLimit int32 `default:"0" placeholder:"NUMBER" help:"Auto-discovery will be disabled if there are more than that number of databases (default: server-defined, -1: always disabled)"` MaxExporterConnections int32 `default:"0" placeholder:"NUMBER" help:"Maximum number of connections that exporter can make to PostgreSQL instance (default: server-defined)"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` flags.LogLevelNoFatalFlags } @@ -112,12 +115,13 @@ func (cmd *AddAgentPostgresExporterCommand) RunCmd() (commands.Result, error) { AutoDiscoveryLimit: cmd.AutoDiscoveryLimit, MaxExporterConnections: cmd.MaxExporterConnections, - TLS: cmd.TLS, - TLSSkipVerify: cmd.TLSSkipVerify, - TLSCa: tlsCa, - TLSCert: tlsCert, - TLSKey: tlsKey, - LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), + TLS: cmd.TLS, + TLSSkipVerify: cmd.TLSSkipVerify, + TLSCa: tlsCa, + TLSCert: tlsCert, + TLSKey: tlsKey, + LogLevel: cmd.LogLevel.EnumValue(), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_proxysql_exporter.go b/admin/commands/inventory/add_agent_proxysql_exporter.go index b2be4b3a853..b8c6ce6aca0 100644 --- a/admin/commands/inventory/add_agent_proxysql_exporter.go +++ b/admin/commands/inventory/add_agent_proxysql_exporter.go @@ -15,6 +15,8 @@ package inventory import ( + "time" + "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" "github.com/percona/pmm/api/inventory/v1/json/client" @@ -60,6 +62,7 @@ type AddAgentProxysqlExporterCommand struct { PushMetrics bool `help:"Enables push metrics model flow, it will be sent to the server by an agent"` ExposeExporter bool `help:"Expose the address of the exporter publicly on 0.0.0.0"` DisableCollectors []string `help:"Comma-separated list of collector names to exclude from exporter"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` flags.LogLevelFatalFlags } @@ -82,7 +85,8 @@ func (cmd *AddAgentProxysqlExporterCommand) RunCmd() (commands.Result, error) { PushMetrics: cmd.PushMetrics, ExposeExporter: cmd.ExposeExporter, DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), - LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_rds_exporter.go b/admin/commands/inventory/add_agent_rds_exporter.go index 42a40d030e9..13956f81b29 100644 --- a/admin/commands/inventory/add_agent_rds_exporter.go +++ b/admin/commands/inventory/add_agent_rds_exporter.go @@ -15,6 +15,8 @@ package inventory import ( + "time" + "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" "github.com/percona/pmm/api/inventory/v1/json/client" @@ -56,6 +58,7 @@ type AddAgentRDSExporterCommand struct { DisableBasicMetrics bool `help:"Disable basic metrics"` DisableEnhancedMetrics bool `help:"Disable enhanced metrics"` PushMetrics bool `help:"Enables push metrics model flow, it will be sent to the server by an agent"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` flags.LogLevelFatalFlags } @@ -75,7 +78,8 @@ func (cmd *AddAgentRDSExporterCommand) RunCmd() (commands.Result, error) { DisableBasicMetrics: cmd.DisableBasicMetrics, DisableEnhancedMetrics: cmd.DisableEnhancedMetrics, PushMetrics: cmd.PushMetrics, - LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_valkey_exporter.go b/admin/commands/inventory/add_agent_valkey_exporter.go index bfcbc2b0101..8b9a7fb5fd2 100644 --- a/admin/commands/inventory/add_agent_valkey_exporter.go +++ b/admin/commands/inventory/add_agent_valkey_exporter.go @@ -15,6 +15,8 @@ package inventory import ( + "time" + "github.com/AlekSi/pointer" "github.com/percona/pmm/admin/commands" @@ -68,6 +70,7 @@ type AddAgentValkeyExporterCommand struct { PushMetrics bool `help:"Enables push metrics model flow, it will be sent to the server by an agent"` ExposeExporter bool `help:"Expose the address of the exporter publicly on 0.0.0.0"` DisableCollectors []string `help:"Comma-separated list of collector names to exclude from exporter"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` flags.LogLevelNoFatalFlags } @@ -116,6 +119,7 @@ func (cmd *AddAgentValkeyExporterCommand) RunCmd() (commands.Result, error) { ExposeExporter: cmd.ExposeExporter, DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), LogLevel: convertLogLevelPtr(&cmd.LogLevel), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/change_agent_azure_database_exporter.go b/admin/commands/inventory/change_agent_azure_database_exporter.go index b7c9a18c74c..60c69abd8d3 100644 --- a/admin/commands/inventory/change_agent_azure_database_exporter.go +++ b/admin/commands/inventory/change_agent_azure_database_exporter.go @@ -16,6 +16,7 @@ package inventory import ( "fmt" + "time" "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" @@ -77,7 +78,8 @@ type ChangeAgentAzureDatabaseExporterCommand struct { AzureResourceGroup *string `help:"Azure Resource Group"` // Exporter options - PushMetrics *bool `help:"Enable push metrics with vmagent"` + PushMetrics *bool `help:"Enable push metrics with vmagent"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -99,6 +101,7 @@ func (cmd *ChangeAgentAzureDatabaseExporterCommand) RunCmd() (commands.Result, e AzureResourceGroup: cmd.AzureResourceGroup, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), } if customLabels != nil { diff --git a/admin/commands/inventory/change_agent_external_exporter.go b/admin/commands/inventory/change_agent_external_exporter.go index 08e2f944cfb..570d5136310 100644 --- a/admin/commands/inventory/change_agent_external_exporter.go +++ b/admin/commands/inventory/change_agent_external_exporter.go @@ -16,6 +16,7 @@ package inventory import ( "fmt" + "time" "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/api/inventory/v1/json/client" @@ -65,10 +66,11 @@ type ChangeAgentExternalExporterCommand struct { Username *string `help:"Username for the external exporter"` // External-specific options - ListenPort *int64 `help:"Listen port for the external exporter"` - MetricsScheme *string `help:"Metrics scheme (http or https)"` - MetricsPath *string `help:"Metrics path"` - PushMetrics *bool `help:"Enable push metrics with vmagent"` + ListenPort *int64 `help:"Listen port for the external exporter"` + MetricsScheme *string `help:"Metrics scheme (http or https)"` + MetricsPath *string `help:"Metrics path"` + PushMetrics *bool `help:"Enable push metrics with vmagent"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -88,6 +90,7 @@ func (cmd *ChangeAgentExternalExporterCommand) RunCmd() (commands.Result, error) Scheme: cmd.MetricsScheme, MetricsPath: cmd.MetricsPath, EnablePushMetrics: cmd.PushMetrics, + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), } if customLabels != nil { diff --git a/admin/commands/inventory/change_agent_mongodb_exporter.go b/admin/commands/inventory/change_agent_mongodb_exporter.go index b6bf3d413d3..7258fc5566d 100644 --- a/admin/commands/inventory/change_agent_mongodb_exporter.go +++ b/admin/commands/inventory/change_agent_mongodb_exporter.go @@ -17,6 +17,7 @@ package inventory import ( "fmt" "strings" + "time" "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" @@ -89,9 +90,10 @@ type ChangeAgentMongodbExporterCommand struct { CollectionsLimit *int32 `help:"Collections limit"` // Exporter options - DisableCollectors []string `help:"List of collector names to disable"` - ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` - PushMetrics *bool `help:"Enable push metrics with vmagent"` + DisableCollectors []string `help:"List of collector names to disable"` + ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` + PushMetrics *bool `help:"Enable push metrics with vmagent"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -152,6 +154,7 @@ func (cmd *ChangeAgentMongodbExporterCommand) RunCmd() (commands.Result, error) ExposeExporter: cmd.ExposeExporter, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), } if customLabels != nil { diff --git a/admin/commands/inventory/change_agent_mysqld_exporter.go b/admin/commands/inventory/change_agent_mysqld_exporter.go index a57ec6edc96..e9ce71aecae 100644 --- a/admin/commands/inventory/change_agent_mysqld_exporter.go +++ b/admin/commands/inventory/change_agent_mysqld_exporter.go @@ -16,6 +16,7 @@ package inventory import ( "fmt" + "time" "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" @@ -82,10 +83,11 @@ type ChangeAgentMysqldExporterCommand struct { TLSKeyFile *string `help:"TLS certificate key file"` // Exporter options - TablestatsGroupTableLimit *int32 `help:"Tablestats group collectors by table limit"` - DisableCollectors []string `help:"List of collector names to disable"` - ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` - PushMetrics *bool `help:"Enable push metrics with vmagent"` + TablestatsGroupTableLimit *int32 `help:"Tablestats group collectors by table limit"` + DisableCollectors []string `help:"List of collector names to disable"` + ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` + PushMetrics *bool `help:"Enable push metrics with vmagent"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -143,6 +145,7 @@ func (cmd *ChangeAgentMysqldExporterCommand) RunCmd() (commands.Result, error) { ExposeExporter: cmd.ExposeExporter, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), } if customLabels != nil { diff --git a/admin/commands/inventory/change_agent_node_exporter.go b/admin/commands/inventory/change_agent_node_exporter.go index 155edd423e7..09246333567 100644 --- a/admin/commands/inventory/change_agent_node_exporter.go +++ b/admin/commands/inventory/change_agent_node_exporter.go @@ -16,6 +16,7 @@ package inventory import ( "fmt" + "time" "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" @@ -68,9 +69,10 @@ type ChangeAgentNodeExporterCommand struct { Enable *bool `help:"Enable or disable the agent"` // Exporter options - PushMetrics *bool `help:"Enable push metrics with vmagent"` - ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` - DisableCollectors []string `help:"List of collector names to disable"` + PushMetrics *bool `help:"Enable push metrics with vmagent"` + ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` + DisableCollectors []string `help:"List of collector names to disable"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -89,6 +91,7 @@ func (cmd *ChangeAgentNodeExporterCommand) RunCmd() (commands.Result, error) { DisableCollectors: cmd.DisableCollectors, ExposeExporter: cmd.ExposeExporter, LogLevel: convertLogLevelPtr(cmd.LogLevel), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), } if customLabels != nil { diff --git a/admin/commands/inventory/change_agent_postgres_exporter.go b/admin/commands/inventory/change_agent_postgres_exporter.go index 322d0de1c41..91f56f986a0 100644 --- a/admin/commands/inventory/change_agent_postgres_exporter.go +++ b/admin/commands/inventory/change_agent_postgres_exporter.go @@ -16,6 +16,7 @@ package inventory import ( "fmt" + "time" "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" @@ -82,11 +83,12 @@ type ChangeAgentPostgresExporterCommand struct { TLSKeyFile *string `help:"TLS certificate key file"` // Exporter options - DisableCollectors []string `help:"List of collector names to disable"` - ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` - PushMetrics *bool `help:"Enable push metrics with vmagent"` - AutoDiscoveryLimit *int32 `help:"Auto-discovery limit"` - MaxExporterConnections *int32 `help:"Maximum number of connections that exporter can make to PostgreSQL instance"` + DisableCollectors []string `help:"List of collector names to disable"` + ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` + PushMetrics *bool `help:"Enable push metrics with vmagent"` + AutoDiscoveryLimit *int32 `help:"Auto-discovery limit"` + MaxExporterConnections *int32 `help:"Maximum number of connections that exporter can make to PostgreSQL instance"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -145,6 +147,7 @@ func (cmd *ChangeAgentPostgresExporterCommand) RunCmd() (commands.Result, error) AutoDiscoveryLimit: cmd.AutoDiscoveryLimit, MaxExporterConnections: cmd.MaxExporterConnections, LogLevel: convertLogLevelPtr(cmd.LogLevel), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), } if customLabels != nil { diff --git a/admin/commands/inventory/change_agent_proxysql_exporter.go b/admin/commands/inventory/change_agent_proxysql_exporter.go index fe635ede538..18000fee4bb 100644 --- a/admin/commands/inventory/change_agent_proxysql_exporter.go +++ b/admin/commands/inventory/change_agent_proxysql_exporter.go @@ -16,6 +16,7 @@ package inventory import ( "fmt" + "time" "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" @@ -79,9 +80,10 @@ type ChangeAgentProxysqlExporterCommand struct { TLSSkipVerify *bool `help:"Skip TLS certificate and hostname validation"` // Exporter options - DisableCollectors []string `help:"List of collector names to disable"` - ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` - PushMetrics *bool `help:"Enable push metrics with vmagent"` + DisableCollectors []string `help:"List of collector names to disable"` + ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` + PushMetrics *bool `help:"Enable push metrics with vmagent"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -105,6 +107,7 @@ func (cmd *ChangeAgentProxysqlExporterCommand) RunCmd() (commands.Result, error) ExposeExporter: cmd.ExposeExporter, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), } if customLabels != nil { diff --git a/admin/commands/inventory/change_agent_rds_exporter.go b/admin/commands/inventory/change_agent_rds_exporter.go index 8972e27074e..32e7516155d 100644 --- a/admin/commands/inventory/change_agent_rds_exporter.go +++ b/admin/commands/inventory/change_agent_rds_exporter.go @@ -16,6 +16,7 @@ package inventory import ( "fmt" + "time" "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" @@ -78,7 +79,8 @@ type ChangeAgentRDSExporterCommand struct { DisableEnhancedMetrics *bool `help:"Disable enhanced metrics"` // Exporter options - PushMetrics *bool `help:"Enable push metrics with vmagent"` + PushMetrics *bool `help:"Enable push metrics with vmagent"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -99,6 +101,7 @@ func (cmd *ChangeAgentRDSExporterCommand) RunCmd() (commands.Result, error) { DisableEnhancedMetrics: cmd.DisableEnhancedMetrics, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), } if customLabels != nil { diff --git a/admin/commands/inventory/change_agent_valkey_exporter.go b/admin/commands/inventory/change_agent_valkey_exporter.go index 8e1aea7d577..528983aaf20 100644 --- a/admin/commands/inventory/change_agent_valkey_exporter.go +++ b/admin/commands/inventory/change_agent_valkey_exporter.go @@ -16,6 +16,7 @@ package inventory import ( "fmt" + "time" "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" @@ -81,9 +82,10 @@ type ChangeAgentValkeyExporterCommand struct { TLSKeyFile *string `help:"TLS certificate key file"` // Exporter options - DisableCollectors []string `help:"List of collector names to disable"` - ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` - PushMetrics *bool `help:"Enable push metrics with vmagent"` + DisableCollectors []string `help:"List of collector names to disable"` + ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` + PushMetrics *bool `help:"Enable push metrics with vmagent"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -137,6 +139,7 @@ func (cmd *ChangeAgentValkeyExporterCommand) RunCmd() (commands.Result, error) { ExposeExporter: cmd.ExposeExporter, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), } if customLabels != nil { diff --git a/admin/commands/management/add_external.go b/admin/commands/management/add_external.go index acc5aed1c05..d94aeaf81a5 100644 --- a/admin/commands/management/add_external.go +++ b/admin/commands/management/add_external.go @@ -18,6 +18,7 @@ import ( "fmt" "os" "strings" + "time" "github.com/percona/pmm/admin/agentlocal" "github.com/percona/pmm/admin/commands" @@ -70,6 +71,7 @@ type AddExternalCommand struct { Group string `default:"${externalDefaultGroupExporter}" help:"Group name of external service (default: ${externalDefaultGroupExporter})"` SkipConnectionCheck bool `help:"Skip exporter connection checks"` TLSSkipVerify bool `help:"Skip TLS certificate verification"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` flags.MetricsModeFlags } @@ -140,6 +142,7 @@ func (cmd *AddExternalCommand) RunCmd() (commands.Result, error) { Group: cmd.Group, SkipConnectionCheck: cmd.SkipConnectionCheck, TLSSkipVerify: cmd.TLSSkipVerify, + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/admin/commands/management/add_mongodb.go b/admin/commands/management/add_mongodb.go index 65e0d5d2dbc..526f0c5180b 100644 --- a/admin/commands/management/add_mongodb.go +++ b/admin/commands/management/add_mongodb.go @@ -16,6 +16,7 @@ package management import ( "fmt" + "time" "github.com/percona/pmm/admin/agentlocal" "github.com/percona/pmm/admin/commands" @@ -83,6 +84,7 @@ type AddMongoDBCommand struct { CollectionsLimit int32 `name:"max-collections-limit" default:"-1" help:"Disable collstats, dbstats, topmetrics and indexstats if there are more than collections. 0: No limit. Default is -1, which let PMM automatically set this value"` ExposeExporter bool `name:"expose-exporter" help:"Optionally expose the address of the exporter publicly on 0.0.0.0"` AgentEnvVars []string `name:"agent-env-vars" help:"Comma-separated list of environment variable names to pass to the exporter (values are read from the current environment), e.g. 'VAR1,VAR2'"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` AddCommonFlags flags.MetricsModeFlags @@ -202,7 +204,8 @@ func (cmd *AddMongoDBCommand) RunCmd() (commands.Result, error) { DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), StatsCollections: commands.ParseDisableCollectors(cmd.StatsCollections), CollectionsLimit: cmd.CollectionsLimit, - LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/admin/commands/management/add_mysql.go b/admin/commands/management/add_mysql.go index 20a71531320..e820464f5ec 100644 --- a/admin/commands/management/add_mysql.go +++ b/admin/commands/management/add_mysql.go @@ -17,6 +17,7 @@ package management import ( "fmt" "strconv" + "time" "github.com/AlekSi/pointer" "github.com/alecthomas/units" @@ -120,6 +121,7 @@ type AddMySQLCommand struct { CreateUser bool `hidden:"" help:"Create pmm user"` DisableCollectors []string `help:"Comma-separated list of collector names to exclude from exporter"` ExposeExporter bool `name:"expose-exporter" help:"Optionally expose the address of the exporter publicly on 0.0.0.0"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` AddCommonFlags flags.MetricsModeFlags @@ -241,7 +243,8 @@ func (cmd *AddMySQLCommand) RunCmd() (commands.Result, error) { TablestatsGroupTableLimit: tablestatsGroupTableLimit, MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), - LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/admin/commands/management/add_postgresql.go b/admin/commands/management/add_postgresql.go index 8ea4b763e18..a4333d0b00d 100644 --- a/admin/commands/management/add_postgresql.go +++ b/admin/commands/management/add_postgresql.go @@ -16,6 +16,7 @@ package management import ( "fmt" + "time" "github.com/percona/pmm/admin/agentlocal" "github.com/percona/pmm/admin/commands" @@ -76,6 +77,7 @@ type AddPostgreSQLCommand struct { ExposeExporter bool `name:"expose-exporter" help:"Optionally expose the address of the exporter publicly on 0.0.0.0"` AutoDiscoveryLimit int32 `placeholder:"NUMBER" help:"Auto-discovery will be disabled if there are more than that number of databases (default: server-defined, -1: always disabled)"` MaxExporterConnections int32 `placeholder:"NUMBER" help:"Maximum number of connections to PostgreSQL instance that exporter can use (default: server-defined)"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` AddCommonFlags flags.MetricsModeFlags @@ -212,7 +214,8 @@ func (cmd *AddPostgreSQLCommand) RunCmd() (commands.Result, error) { DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), AutoDiscoveryLimit: cmd.AutoDiscoveryLimit, MaxExporterConnections: cmd.MaxExporterConnections, - LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/admin/commands/management/add_proxysql.go b/admin/commands/management/add_proxysql.go index 4401f47345d..318edc07ade 100644 --- a/admin/commands/management/add_proxysql.go +++ b/admin/commands/management/add_proxysql.go @@ -16,6 +16,7 @@ package management import ( "fmt" + "time" "github.com/percona/pmm/admin/agentlocal" "github.com/percona/pmm/admin/commands" @@ -60,6 +61,7 @@ type AddProxySQLCommand struct { TLSSkipVerify bool `help:"Skip TLS certificate verification"` DisableCollectors []string `help:"Comma-separated list of collector names to exclude from exporter"` ExposeExporter bool `name:"expose-exporter" help:"Optionally expose the address of the exporter publicly on 0.0.0.0"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` AddCommonFlags flags.MetricsModeFlags @@ -151,7 +153,8 @@ func (cmd *AddProxySQLCommand) RunCmd() (commands.Result, error) { TLSSkipVerify: cmd.TLSSkipVerify, MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), - LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/admin/commands/management/add_valkey.go b/admin/commands/management/add_valkey.go index 43e8df4b8bd..7243ca3c2a2 100644 --- a/admin/commands/management/add_valkey.go +++ b/admin/commands/management/add_valkey.go @@ -15,6 +15,8 @@ package management import ( + "time" + "github.com/AlekSi/pointer" "github.com/percona/pmm/admin/agentlocal" @@ -63,6 +65,7 @@ type AddValkeyCommand struct { TLSKeyFile string `name:"tls-key" help:"Path to client key file"` DisableCollectors []string `help:"Comma-separated list of collector names to exclude from exporter"` ExposeExporter bool `name:"expose-exporter" help:"Optionally expose the address of the exporter publicly on 0.0.0.0"` + ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` AddCommonFlags flags.MetricsModeFlags @@ -152,13 +155,14 @@ func (cmd *AddValkeyCommand) RunCmd() (commands.Result, error) { SkipConnectionCheck: cmd.SkipConnectionCheck, - TLS: cmd.TLS, - TLSSkipVerify: cmd.TLSSkipVerify, - TLSCa: tlsCa, - TLSCert: tlsCert, - TLSKey: tlsKey, - MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), - LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), + TLS: cmd.TLS, + TLSSkipVerify: cmd.TLSSkipVerify, + TLSCa: tlsCa, + TLSCert: tlsCert, + TLSKey: tlsKey, + MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), + ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/agent/agents/supervisor/supervisor.go b/agent/agents/supervisor/supervisor.go index 13e9f232319..956aaef8080 100644 --- a/agent/agents/supervisor/supervisor.go +++ b/agent/agents/supervisor/supervisor.go @@ -819,6 +819,10 @@ func (s *Supervisor) processParams(agentID string, agentProcess *agentv1.SetStat processParams.Args[i] = string(b) } + if agentProcess.Type == inventoryv1.AgentType_AGENT_TYPE_NODE_EXPORTER && cfg.ProcMountsPath != "" { + processParams.Args = append(processParams.Args, "--collector.filesystem.proc-mounts-path="+cfg.ProcMountsPath) + } + env := make([]string, len(agentProcess.Env)) for i, e := range agentProcess.Env { b, err := tr.RenderTemplate("env", e, templateParams) diff --git a/agent/commands/setup.go b/agent/commands/setup.go index 7d9f6f434a2..3e0405d021d 100644 --- a/agent/commands/setup.go +++ b/agent/commands/setup.go @@ -74,6 +74,8 @@ func Setup() { register(cfg, l) } + cfg.ProcMountsPath = cfg.Setup.ProcMountsPath + if err = config.SaveToFile(configFilepath, cfg, "Updated by `pmm-agent setup`."); err != nil { fmt.Printf("Failed to write configuration file %s: %s.\n", configFilepath, err) os.Exit(1) diff --git a/agent/config/config.go b/agent/config/config.go index 09a2a27e2eb..571e5bcf5b8 100644 --- a/agent/config/config.go +++ b/agent/config/config.go @@ -139,6 +139,7 @@ type Setup struct { DisableCollectors string CustomLabels string AgentPassword string + ProcMountsPath string Force bool SkipRegistration bool @@ -154,6 +155,7 @@ type Config struct { ListenPort uint16 `yaml:"listen-port"` RunnerCapacity uint16 `yaml:"runner-capacity,omitempty"` RunnerMaxConnectionsPerService uint16 `yaml:"runner-max-connections-per-service,omitempty"` + ProcMountsPath string `yaml:"proc-mounts-path,omitempty"` Server Server `yaml:"server"` Paths Paths `yaml:"paths"` @@ -521,6 +523,8 @@ func Application(cfg *Config) (*kingpin.Application, *string) { Envar("PMM_AGENT_SETUP_NODE_PASSWORD").StringVar(&cfg.Setup.AgentPassword) setupCmd.Flag("expose-exporter", "Expose the address of the agent's node-exporter publicly on 0.0.0.0"). Envar("PMM_AGENT_EXPOSE_EXPORTER").BoolVar(&cfg.Setup.ExposeExporter) + setupCmd.Flag("proc-mounts-path", "Path to /proc/mounts file for the filesystem collector [PMM_AGENT_SETUP_PROC_MOUNTS_PATH]"). + Envar("PMM_AGENT_SETUP_PROC_MOUNTS_PATH").StringVar(&cfg.Setup.ProcMountsPath) return app, configFileF } diff --git a/api-tests/helpers.go b/api-tests/helpers.go index 1a722522e94..74023ae3c04 100644 --- a/api-tests/helpers.go +++ b/api-tests/helpers.go @@ -24,6 +24,7 @@ import ( "reflect" "strings" "testing" + "time" "github.com/AlekSi/pointer" "github.com/stretchr/testify/assert" @@ -293,6 +294,32 @@ func AddPMMAgent(t TestingT, nodeID string) *agents.AddAgentOKBody { return res.Payload } +// retryWithBackoff retries fn with capped exponential backoff until it succeeds, +// attempts are exhausted, or ctx is done. +func retryWithBackoff(ctx context.Context, attempts int, fn func() error) error { + var lastErr error + for i := range attempts { + lastErr = fn() + if lastErr == nil { + return nil + } + if i == attempts-1 { + break + } + select { + case <-time.After(backoff(i)): + case <-ctx.Done(): + return ctx.Err() + } + } + return fmt.Errorf("retries exhausted: %w", lastErr) +} + +func backoff(attempt int) time.Duration { + d := time.Duration(1< google.protobuf.Timestamp 95, // 2: agent.v1.QANCollectRequest.metrics_bucket:type_name -> agent.v1.MetricsBucket 96, // 3: agent.v1.StateChangedRequest.status:type_name -> inventory.v1.AgentStatus - 47, // 4: agent.v1.SetStateRequest.agent_processes:type_name -> agent.v1.SetStateRequest.AgentProcessesEntry + 46, // 4: agent.v1.SetStateRequest.agent_processes:type_name -> agent.v1.SetStateRequest.AgentProcessesEntry 48, // 5: agent.v1.SetStateRequest.builtin_agents:type_name -> agent.v1.SetStateRequest.BuiltinAgentsEntry 94, // 6: agent.v1.QueryActionValue.timestamp:type_name -> google.protobuf.Timestamp 12, // 7: agent.v1.QueryActionValue.slice:type_name -> agent.v1.QueryActionSlice @@ -7320,12 +7320,12 @@ var file_agent_v1_agent_proto_depIdxs = []int32{ 28, // 95: agent.v1.ServerMessage.service_info:type_name -> agent.v1.ServiceInfoRequest 100, // 96: agent.v1.SetStateRequest.AgentProcess.type:type_name -> inventory.v1.AgentType 49, // 97: agent.v1.SetStateRequest.AgentProcess.text_files:type_name -> agent.v1.SetStateRequest.AgentProcess.TextFilesEntry - 100, // 98: agent.v1.SetStateRequest.BuiltinAgent.type:type_name -> inventory.v1.AgentType - 2, // 99: agent.v1.SetStateRequest.BuiltinAgent.text_files:type_name -> agent.v1.TextFiles - 50, // 100: agent.v1.SetStateRequest.BuiltinAgent.env:type_name -> agent.v1.SetStateRequest.BuiltinAgent.EnvEntry - 101, // 101: agent.v1.SetStateRequest.BuiltinAgent.rta_options:type_name -> inventory.v1.RTAOptions - 45, // 102: agent.v1.SetStateRequest.AgentProcessesEntry.value:type_name -> agent.v1.SetStateRequest.AgentProcess - 46, // 103: agent.v1.SetStateRequest.BuiltinAgentsEntry.value:type_name -> agent.v1.SetStateRequest.BuiltinAgent + 45, // 98: agent.v1.SetStateRequest.AgentProcessesEntry.value:type_name -> agent.v1.SetStateRequest.AgentProcess + 100, // 99: agent.v1.SetStateRequest.BuiltinAgent.type:type_name -> inventory.v1.AgentType + 2, // 100: agent.v1.SetStateRequest.BuiltinAgent.text_files:type_name -> agent.v1.TextFiles + 50, // 101: agent.v1.SetStateRequest.BuiltinAgent.env:type_name -> agent.v1.SetStateRequest.BuiltinAgent.EnvEntry + 101, // 102: agent.v1.SetStateRequest.BuiltinAgent.rta_options:type_name -> inventory.v1.RTAOptions + 47, // 103: agent.v1.SetStateRequest.BuiltinAgentsEntry.value:type_name -> agent.v1.SetStateRequest.BuiltinAgent 11, // 104: agent.v1.QueryActionMap.MapEntry.value:type_name -> agent.v1.QueryActionValue 0, // 105: agent.v1.StartActionRequest.MySQLExplainParams.output_format:type_name -> agent.v1.MysqlExplainOutputFormat 2, // 106: agent.v1.StartActionRequest.MySQLExplainParams.tls_files:type_name -> agent.v1.TextFiles diff --git a/api/inventory/v1/agents.pb.go b/api/inventory/v1/agents.pb.go index e619a04e91a..afd70dbb8f0 100644 --- a/api/inventory/v1/agents.pb.go +++ b/api/inventory/v1/agents.pb.go @@ -412,8 +412,10 @@ type NodeExporter struct { ExposeExporter bool `protobuf:"varint,14,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` // Metrics resolution for this agent. MetricsResolutions *common.MetricsResolutions `protobuf:"bytes,15,opt,name=metrics_resolutions,json=metricsResolutions,proto3" json:"metrics_resolutions,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,16,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *NodeExporter) Reset() { @@ -530,6 +532,13 @@ func (x *NodeExporter) GetMetricsResolutions() *common.MetricsResolutions { return nil } +func (x *NodeExporter) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + // MySQLdExporter runs on Generic or Container Node and exposes MySQL Service metrics. type MySQLdExporter struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -581,8 +590,10 @@ type MySQLdExporter struct { MetricsResolutions *common.MetricsResolutions `protobuf:"bytes,26,opt,name=metrics_resolutions,json=metricsResolutions,proto3" json:"metrics_resolutions,omitempty"` // Extra DSN parameters for MySQL connection. ExtraDsnParams map[string]string `protobuf:"bytes,27,rep,name=extra_dsn_params,json=extraDsnParams,proto3" json:"extra_dsn_params,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,28,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MySQLdExporter) Reset() { @@ -776,6 +787,13 @@ func (x *MySQLdExporter) GetExtraDsnParams() map[string]string { return nil } +func (x *MySQLdExporter) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + // MongoDBExporter runs on Generic or Container Node and exposes MongoDB Service metrics. type MongoDBExporter struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -820,8 +838,10 @@ type MongoDBExporter struct { MetricsResolutions *common.MetricsResolutions `protobuf:"bytes,28,opt,name=metrics_resolutions,json=metricsResolutions,proto3" json:"metrics_resolutions,omitempty"` // Environment variable names passed to the exporter. EnvironmentVariableNames []string `protobuf:"bytes,29,rep,name=environment_variable_names,json=environmentVariableNames,proto3" json:"environment_variable_names,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,30,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MongoDBExporter) Reset() { @@ -994,6 +1014,13 @@ func (x *MongoDBExporter) GetEnvironmentVariableNames() []string { return nil } +func (x *MongoDBExporter) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + // PostgresExporter runs on Generic or Container Node and exposes PostgreSQL Service metrics. type PostgresExporter struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -1033,8 +1060,10 @@ type PostgresExporter struct { MaxExporterConnections int32 `protobuf:"varint,26,opt,name=max_exporter_connections,json=maxExporterConnections,proto3" json:"max_exporter_connections,omitempty"` // Metrics resolution for this agent. MetricsResolutions *common.MetricsResolutions `protobuf:"bytes,27,opt,name=metrics_resolutions,json=metricsResolutions,proto3" json:"metrics_resolutions,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,28,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PostgresExporter) Reset() { @@ -1193,6 +1222,13 @@ func (x *PostgresExporter) GetMetricsResolutions() *common.MetricsResolutions { return nil } +func (x *PostgresExporter) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + // ProxySQLExporter runs on Generic or Container Node and exposes ProxySQL Service metrics. type ProxySQLExporter struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -1228,8 +1264,10 @@ type ProxySQLExporter struct { ExposeExporter bool `protobuf:"varint,24,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` // Metrics resolution for this agent. MetricsResolutions *common.MetricsResolutions `protobuf:"bytes,25,opt,name=metrics_resolutions,json=metricsResolutions,proto3" json:"metrics_resolutions,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,26,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ProxySQLExporter) Reset() { @@ -1374,6 +1412,13 @@ func (x *ProxySQLExporter) GetMetricsResolutions() *common.MetricsResolutions { return nil } +func (x *ProxySQLExporter) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + // ValkeyExporter runs on Generic or Container Node and exposes Valkey Service metrics. type ValkeyExporter struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -1407,8 +1452,10 @@ type ValkeyExporter struct { ExposeExporter bool `protobuf:"varint,23,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` // Metrics resolution for this agent. MetricsResolutions *common.MetricsResolutions `protobuf:"bytes,24,opt,name=metrics_resolutions,json=metricsResolutions,proto3" json:"metrics_resolutions,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,25,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ValkeyExporter) Reset() { @@ -1546,6 +1593,13 @@ func (x *ValkeyExporter) GetMetricsResolutions() *common.MetricsResolutions { return nil } +func (x *ValkeyExporter) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + // QANMySQLPerfSchemaAgent runs within pmm-agent and sends MySQL Query Analytics data to the PMM Server. type QANMySQLPerfSchemaAgent struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -2775,8 +2829,10 @@ type RDSExporter struct { AutoDiscoveryLimit int32 `protobuf:"varint,25,opt,name=auto_discovery_limit,json=autoDiscoveryLimit,proto3" json:"auto_discovery_limit,omitempty"` // Metrics resolution for this agent. MetricsResolutions *common.MetricsResolutions `protobuf:"bytes,26,opt,name=metrics_resolutions,json=metricsResolutions,proto3" json:"metrics_resolutions,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,27,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RDSExporter) Reset() { @@ -2914,6 +2970,13 @@ func (x *RDSExporter) GetMetricsResolutions() *common.MetricsResolutions { return nil } +func (x *RDSExporter) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + // ExternalExporter runs on any Node type, including Remote Node. type ExternalExporter struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -2944,9 +3007,11 @@ type ExternalExporter struct { // Skip TLS certificate and hostname verification. TlsSkipVerify bool `protobuf:"varint,13,opt,name=tls_skip_verify,json=tlsSkipVerify,proto3" json:"tls_skip_verify,omitempty"` // Actual Agent status. - Status AgentStatus `protobuf:"varint,14,opt,name=status,proto3,enum=inventory.v1.AgentStatus" json:"status,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Status AgentStatus `protobuf:"varint,14,opt,name=status,proto3,enum=inventory.v1.AgentStatus" json:"status,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,15,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExternalExporter) Reset() { @@ -3077,6 +3142,13 @@ func (x *ExternalExporter) GetStatus() AgentStatus { return AgentStatus_AGENT_STATUS_UNSPECIFIED } +func (x *ExternalExporter) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + // AzureDatabaseExporter runs on Generic or Container Node and exposes RemoteAzure Node metrics. type AzureDatabaseExporter struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -3106,8 +3178,10 @@ type AzureDatabaseExporter struct { LogLevel LogLevel `protobuf:"varint,14,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` // Metrics resolution for this agent. MetricsResolutions *common.MetricsResolutions `protobuf:"bytes,15,opt,name=metrics_resolutions,json=metricsResolutions,proto3" json:"metrics_resolutions,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,16,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AzureDatabaseExporter) Reset() { @@ -3231,6 +3305,13 @@ func (x *AzureDatabaseExporter) GetMetricsResolutions() *common.MetricsResolutio return nil } +func (x *AzureDatabaseExporter) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + // ChangeCommonAgentParams contains parameters that can be changed for all Agents. type ChangeCommonAgentParams struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -5436,8 +5517,10 @@ type AddNodeExporterParams struct { LogLevel LogLevel `protobuf:"varint,5,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` // Expose the node_exporter process on all public interfaces ExposeExporter bool `protobuf:"varint,6,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,7,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddNodeExporterParams) Reset() { @@ -5512,6 +5595,13 @@ func (x *AddNodeExporterParams) GetExposeExporter() bool { return false } +func (x *AddNodeExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ChangeNodeExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -5528,8 +5618,10 @@ type ChangeNodeExporterParams struct { LogLevel *LogLevel `protobuf:"varint,6,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` // Expose the node_exporter process on all public interfaces. ExposeExporter *bool `protobuf:"varint,7,opt,name=expose_exporter,json=exposeExporter,proto3,oneof" json:"expose_exporter,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,8,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeNodeExporterParams) Reset() { @@ -5611,6 +5703,13 @@ func (x *ChangeNodeExporterParams) GetExposeExporter() bool { return false } +func (x *ChangeNodeExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type AddMySQLdExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The pmm-agent identifier which runs this instance. @@ -5651,8 +5750,10 @@ type AddMySQLdExporterParams struct { ExposeExporter bool `protobuf:"varint,17,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` // Extra DSN parameters for MySQL connection. ExtraDsnParams map[string]string `protobuf:"bytes,18,rep,name=extra_dsn_params,json=extraDsnParams,proto3" json:"extra_dsn_params,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,19,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddMySQLdExporterParams) Reset() { @@ -5811,6 +5912,13 @@ func (x *AddMySQLdExporterParams) GetExtraDsnParams() map[string]string { return nil } +func (x *AddMySQLdExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ChangeMySQLdExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -5847,8 +5955,10 @@ type ChangeMySQLdExporterParams struct { LogLevel *LogLevel `protobuf:"varint,16,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` // Optionally expose the exporter process on all public interfaces. ExposeExporter *bool `protobuf:"varint,17,opt,name=expose_exporter,json=exposeExporter,proto3,oneof" json:"expose_exporter,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,18,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeMySQLdExporterParams) Reset() { @@ -6000,6 +6110,13 @@ func (x *ChangeMySQLdExporterParams) GetExposeExporter() bool { return false } +func (x *ChangeMySQLdExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type AddMongoDBExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The pmm-agent identifier which runs this instance. @@ -6050,8 +6167,10 @@ type AddMongoDBExporterParams struct { EnvironmentVariableNames []string `protobuf:"bytes,21,rep,name=environment_variable_names,json=environmentVariableNames,proto3" json:"environment_variable_names,omitempty"` // Enable all collectors. EnableAllCollectors bool `protobuf:"varint,22,opt,name=enable_all_collectors,json=enableAllCollectors,proto3" json:"enable_all_collectors,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,23,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddMongoDBExporterParams) Reset() { @@ -6238,6 +6357,13 @@ func (x *AddMongoDBExporterParams) GetEnableAllCollectors() bool { return false } +func (x *AddMongoDBExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ChangeMongoDBExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -6282,8 +6408,10 @@ type ChangeMongoDBExporterParams struct { LogLevel *LogLevel `protobuf:"varint,20,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` // Optionally expose the exporter process on all public interfaces. ExposeExporter *bool `protobuf:"varint,21,opt,name=expose_exporter,json=exposeExporter,proto3,oneof" json:"expose_exporter,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,22,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeMongoDBExporterParams) Reset() { @@ -6463,6 +6591,13 @@ func (x *ChangeMongoDBExporterParams) GetExposeExporter() bool { return false } +func (x *ChangeMongoDBExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type AddPostgresExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The pmm-agent identifier which runs this instance. @@ -6501,8 +6636,10 @@ type AddPostgresExporterParams struct { ExposeExporter bool `protobuf:"varint,17,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` // Maximum number of connections that exporter can open to the database instance. MaxExporterConnections int32 `protobuf:"varint,18,opt,name=max_exporter_connections,json=maxExporterConnections,proto3" json:"max_exporter_connections,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,19,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddPostgresExporterParams) Reset() { @@ -6661,6 +6798,13 @@ func (x *AddPostgresExporterParams) GetMaxExporterConnections() int32 { return 0 } +func (x *AddPostgresExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ChangePostgresExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -6699,8 +6843,10 @@ type ChangePostgresExporterParams struct { ExposeExporter *bool `protobuf:"varint,17,opt,name=expose_exporter,json=exposeExporter,proto3,oneof" json:"expose_exporter,omitempty"` // Maximum number of connections that exporter can open to the database instance. MaxExporterConnections *int32 `protobuf:"varint,18,opt,name=max_exporter_connections,json=maxExporterConnections,proto3,oneof" json:"max_exporter_connections,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,19,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangePostgresExporterParams) Reset() { @@ -6859,6 +7005,13 @@ func (x *ChangePostgresExporterParams) GetMaxExporterConnections() int32 { return 0 } +func (x *ChangePostgresExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type AddProxySQLExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The pmm-agent identifier which runs this instance. @@ -6887,8 +7040,10 @@ type AddProxySQLExporterParams struct { LogLevel LogLevel `protobuf:"varint,12,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` // Optionally expose the exporter process on all public interfaces ExposeExporter bool `protobuf:"varint,13,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,14,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddProxySQLExporterParams) Reset() { @@ -7012,6 +7167,13 @@ func (x *AddProxySQLExporterParams) GetExposeExporter() bool { return false } +func (x *AddProxySQLExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ChangeProxySQLExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -7038,8 +7200,10 @@ type ChangeProxySQLExporterParams struct { LogLevel *LogLevel `protobuf:"varint,11,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` // Optionally expose the exporter process on all public interfaces. ExposeExporter *bool `protobuf:"varint,12,opt,name=expose_exporter,json=exposeExporter,proto3,oneof" json:"expose_exporter,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,13,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeProxySQLExporterParams) Reset() { @@ -7156,6 +7320,13 @@ func (x *ChangeProxySQLExporterParams) GetExposeExporter() bool { return false } +func (x *ChangeProxySQLExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type AddQANMySQLPerfSchemaAgentParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The pmm-agent identifier which runs this instance. @@ -9270,9 +9441,11 @@ type AddRDSExporterParams struct { // Enables push metrics mode for exporter. PushMetrics bool `protobuf:"varint,9,opt,name=push_metrics,json=pushMetrics,proto3" json:"push_metrics,omitempty"` // Log level for exporter. - LogLevel LogLevel `protobuf:"varint,10,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + LogLevel LogLevel `protobuf:"varint,10,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,11,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddRDSExporterParams) Reset() { @@ -9375,6 +9548,13 @@ func (x *AddRDSExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } +func (x *AddRDSExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ChangeRDSExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -9394,9 +9574,11 @@ type ChangeRDSExporterParams struct { // Disable enhanced metrics. DisableEnhancedMetrics *bool `protobuf:"varint,8,opt,name=disable_enhanced_metrics,json=disableEnhancedMetrics,proto3,oneof" json:"disable_enhanced_metrics,omitempty"` // Log level for exporter. - LogLevel *LogLevel `protobuf:"varint,9,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + LogLevel *LogLevel `protobuf:"varint,9,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,10,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeRDSExporterParams) Reset() { @@ -9492,6 +9674,13 @@ func (x *ChangeRDSExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } +func (x *ChangeRDSExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type AddExternalExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The node identifier where this instance is run. @@ -9514,8 +9703,10 @@ type AddExternalExporterParams struct { PushMetrics bool `protobuf:"varint,11,opt,name=push_metrics,json=pushMetrics,proto3" json:"push_metrics,omitempty"` // Skip TLS certificate and hostname verification. TlsSkipVerify bool `protobuf:"varint,12,opt,name=tls_skip_verify,json=tlsSkipVerify,proto3" json:"tls_skip_verify,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,13,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddExternalExporterParams) Reset() { @@ -9618,6 +9809,13 @@ func (x *AddExternalExporterParams) GetTlsSkipVerify() bool { return false } +func (x *AddExternalExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ChangeExternalExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -9635,9 +9833,11 @@ type ChangeExternalExporterParams struct { // Path under which metrics are exposed, used to generate URI. MetricsPath *string `protobuf:"bytes,7,opt,name=metrics_path,json=metricsPath,proto3,oneof" json:"metrics_path,omitempty"` // Listen port for scraping metrics. - ListenPort *uint32 `protobuf:"varint,8,opt,name=listen_port,json=listenPort,proto3,oneof" json:"listen_port,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + ListenPort *uint32 `protobuf:"varint,8,opt,name=listen_port,json=listenPort,proto3,oneof" json:"listen_port,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,9,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeExternalExporterParams) Reset() { @@ -9726,6 +9926,13 @@ func (x *ChangeExternalExporterParams) GetListenPort() uint32 { return 0 } +func (x *ChangeExternalExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type AddAzureDatabaseExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The pmm-agent identifier which runs this instance. @@ -9751,9 +9958,11 @@ type AddAzureDatabaseExporterParams struct { // Enables push metrics mode for exporter. PushMetrics bool `protobuf:"varint,11,opt,name=push_metrics,json=pushMetrics,proto3" json:"push_metrics,omitempty"` // Log level for exporter. - LogLevel LogLevel `protobuf:"varint,12,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + LogLevel LogLevel `protobuf:"varint,12,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,13,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddAzureDatabaseExporterParams) Reset() { @@ -9870,6 +10079,13 @@ func (x *AddAzureDatabaseExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } +func (x *AddAzureDatabaseExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ChangeAzureDatabaseExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -9891,9 +10107,11 @@ type ChangeAzureDatabaseExporterParams struct { // Azure resource group. AzureResourceGroup *string `protobuf:"bytes,9,opt,name=azure_resource_group,json=azureResourceGroup,proto3,oneof" json:"azure_resource_group,omitempty"` // Log level for exporter. - LogLevel *LogLevel `protobuf:"varint,11,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + LogLevel *LogLevel `protobuf:"varint,11,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,12,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeAzureDatabaseExporterParams) Reset() { @@ -9996,6 +10214,13 @@ func (x *ChangeAzureDatabaseExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } +func (x *ChangeAzureDatabaseExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ChangeNomadAgentParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -10074,9 +10299,11 @@ type AddValkeyExporterParams struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `protobuf:"varint,15,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` // Log level for exporter. - LogLevel LogLevel `protobuf:"varint,16,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + LogLevel LogLevel `protobuf:"varint,16,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,17,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddValkeyExporterParams) Reset() { @@ -10221,6 +10448,13 @@ func (x *AddValkeyExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } +func (x *AddValkeyExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ChangeValkeyExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -10252,9 +10486,11 @@ type ChangeValkeyExporterParams struct { // Optionally expose the exporter process on all public interfaces ExposeExporter *bool `protobuf:"varint,14,opt,name=expose_exporter,json=exposeExporter,proto3,oneof" json:"expose_exporter,omitempty"` // Log level for exporter. - LogLevel *LogLevel `protobuf:"varint,15,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + LogLevel *LogLevel `protobuf:"varint,15,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,16,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeValkeyExporterParams) Reset() { @@ -10392,6 +10628,13 @@ func (x *ChangeValkeyExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } +func (x *ChangeValkeyExporterParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type AddRTAMongoDBAgentParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The pmm-agent identifier which runs this instance. @@ -10824,7 +11067,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + " \x01(\x0e2\x19.inventory.v1.AgentStatusR\x06status\x12*\n" + "\x11process_exec_path\x18\v \x01(\tR\x0fprocessExecPath\x12\x1f\n" + "\vlisten_port\x18\f \x01(\rR\n" + - "listenPortJ\x04\b\x04\x10\x05\"\x89\x05\n" + + "listenPortJ\x04\b\x04\x10\x05\"\xd3\x05\n" + "\fNodeExporter\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12 \n" + "\fpmm_agent_id\x18\x02 \x01(\tR\n" + @@ -10840,10 +11083,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x11process_exec_path\x18\f \x01(\tR\x0fprocessExecPath\x123\n" + "\tlog_level\x18\r \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + "\x0fexpose_exporter\x18\x0e \x01(\bR\x0eexposeExporter\x12K\n" + - "\x13metrics_resolutions\x18\x0f \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x1a?\n" + + "\x13metrics_resolutions\x18\x0f \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12H\n" + + "\x12connection_timeout\x18\x10 \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x8a\t\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xd4\t\n" + "\x0eMySQLdExporter\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12 \n" + "\fpmm_agent_id\x18\x02 \x01(\tR\n" + @@ -10872,13 +11116,14 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\tlog_level\x18\x18 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + "\x0fexpose_exporter\x18\x19 \x01(\bR\x0eexposeExporter\x12K\n" + "\x13metrics_resolutions\x18\x1a \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12Z\n" + - "\x10extra_dsn_params\x18\x1b \x03(\v20.inventory.v1.MySQLdExporter.ExtraDsnParamsEntryR\x0eextraDsnParams\x1a?\n" + + "\x10extra_dsn_params\x18\x1b \x03(\v20.inventory.v1.MySQLdExporter.ExtraDsnParamsEntryR\x0eextraDsnParams\x12H\n" + + "\x12connection_timeout\x18\x1c \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1aA\n" + "\x13ExtraDsnParamsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xd0\a\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x9a\b\n" + "\x0fMongoDBExporter\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12 \n" + "\fpmm_agent_id\x18\x02 \x01(\tR\n" + @@ -10903,10 +11148,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\tlog_level\x18\x1a \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + "\x0fexpose_exporter\x18\x1b \x01(\bR\x0eexposeExporter\x12K\n" + "\x13metrics_resolutions\x18\x1c \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12<\n" + - "\x1aenvironment_variable_names\x18\x1d \x03(\tR\x18environmentVariableNames\x1a?\n" + + "\x1aenvironment_variable_names\x18\x1d \x03(\tR\x18environmentVariableNames\x12H\n" + + "\x12connection_timeout\x18\x1e \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xf2\x06\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xbc\a\n" + "\x10PostgresExporter\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12 \n" + "\fpmm_agent_id\x18\x02 \x01(\tR\n" + @@ -10929,10 +11175,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x14auto_discovery_limit\x18\x18 \x01(\x05R\x12autoDiscoveryLimit\x12'\n" + "\x0fexpose_exporter\x18\x19 \x01(\bR\x0eexposeExporter\x128\n" + "\x18max_exporter_connections\x18\x1a \x01(\x05R\x16maxExporterConnections\x12K\n" + - "\x13metrics_resolutions\x18\x1b \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x1a?\n" + + "\x13metrics_resolutions\x18\x1b \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12H\n" + + "\x12connection_timeout\x18\x1c \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x86\x06\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xd0\x06\n" + "\x10ProxySQLExporter\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12 \n" + "\fpmm_agent_id\x18\x02 \x01(\tR\n" + @@ -10953,10 +11200,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x11process_exec_path\x18\x16 \x01(\tR\x0fprocessExecPath\x123\n" + "\tlog_level\x18\x17 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + "\x0fexpose_exporter\x18\x18 \x01(\bR\x0eexposeExporter\x12K\n" + - "\x13metrics_resolutions\x18\x19 \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x1a?\n" + + "\x13metrics_resolutions\x18\x19 \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12H\n" + + "\x12connection_timeout\x18\x1a \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xcd\x05\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x97\x06\n" + "\x0eValkeyExporter\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12 \n" + "\fpmm_agent_id\x18\x02 \x01(\tR\n" + @@ -10976,7 +11224,8 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "listenPort\x12*\n" + "\x11process_exec_path\x18\x16 \x01(\tR\x0fprocessExecPath\x12'\n" + "\x0fexpose_exporter\x18\x17 \x01(\bR\x0eexposeExporter\x12K\n" + - "\x13metrics_resolutions\x18\x18 \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x1a?\n" + + "\x13metrics_resolutions\x18\x18 \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12H\n" + + "\x12connection_timeout\x18\x19 \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xa9\a\n" + @@ -11138,7 +11387,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\tlog_level\x18\x16 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x90\x06\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xda\x06\n" + "\vRDSExporter\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12 \n" + "\fpmm_agent_id\x18\x02 \x01(\tR\n" + @@ -11157,10 +11406,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x11process_exec_path\x18\x17 \x01(\tR\x0fprocessExecPath\x123\n" + "\tlog_level\x18\x18 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x120\n" + "\x14auto_discovery_limit\x18\x19 \x01(\x05R\x12autoDiscoveryLimit\x12K\n" + - "\x13metrics_resolutions\x18\x1a \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x1a?\n" + + "\x13metrics_resolutions\x18\x1a \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12H\n" + + "\x12connection_timeout\x18\x1b \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xa5\x05\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xef\x05\n" + "\x10ExternalExporter\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12%\n" + "\x0fruns_on_node_id\x18\x02 \x01(\tR\frunsOnNodeId\x12\x1a\n" + @@ -11178,10 +11428,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x11process_exec_path\x18\v \x01(\tR\x0fprocessExecPath\x12K\n" + "\x13metrics_resolutions\x18\f \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12&\n" + "\x0ftls_skip_verify\x18\r \x01(\bR\rtlsSkipVerify\x121\n" + - "\x06status\x18\x0e \x01(\x0e2\x19.inventory.v1.AgentStatusR\x06status\x1a?\n" + + "\x06status\x18\x0e \x01(\x0e2\x19.inventory.v1.AgentStatusR\x06status\x12H\n" + + "\x12connection_timeout\x18\x0f \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xe0\x05\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xaa\x06\n" + "\x15AzureDatabaseExporter\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12 \n" + "\fpmm_agent_id\x18\x02 \x01(\tR\n" + @@ -11198,7 +11449,8 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x14push_metrics_enabled\x18\f \x01(\bR\x12pushMetricsEnabled\x12*\n" + "\x11process_exec_path\x18\r \x01(\tR\x0fprocessExecPath\x123\n" + "\tlog_level\x18\x0e \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12K\n" + - "\x13metrics_resolutions\x18\x0f \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x1a?\n" + + "\x13metrics_resolutions\x18\x0f \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12H\n" + + "\x12connection_timeout\x18\x10 \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xaa\x02\n" + @@ -11359,7 +11611,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\rcustom_labels\x18\x02 \x03(\v21.inventory.v1.AddPMMAgentParams.CustomLabelsEntryR\fcustomLabels\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x8f\x03\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xe3\x03\n" + "\x15AddNodeExporterParams\x12)\n" + "\fpmm_agent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\n" + "pmmAgentId\x12Z\n" + @@ -11367,10 +11619,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\fpush_metrics\x18\x03 \x01(\bR\vpushMetrics\x12-\n" + "\x12disable_collectors\x18\x04 \x03(\tR\x11disableCollectors\x123\n" + "\tlog_level\x18\x05 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + - "\x0fexpose_exporter\x18\x06 \x01(\bR\x0eexposeExporter\x1a?\n" + + "\x0fexpose_exporter\x18\x06 \x01(\bR\x0eexposeExporter\x12R\n" + + "\x12connection_timeout\x18\a \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xe4\x03\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xb8\x04\n" + "\x18ChangeNodeExporterParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01\x12;\n" + "\rcustom_labels\x18\x02 \x01(\v2\x11.common.StringMapH\x01R\fcustomLabels\x88\x01\x01\x123\n" + @@ -11378,13 +11631,14 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x13metrics_resolutions\x18\x04 \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12-\n" + "\x12disable_collectors\x18\x05 \x03(\tR\x11disableCollectors\x128\n" + "\tlog_level\x18\x06 \x01(\x0e2\x16.inventory.v1.LogLevelH\x03R\blogLevel\x88\x01\x01\x12,\n" + - "\x0fexpose_exporter\x18\a \x01(\bH\x04R\x0eexposeExporter\x88\x01\x01B\t\n" + + "\x0fexpose_exporter\x18\a \x01(\bH\x04R\x0eexposeExporter\x88\x01\x01\x12R\n" + + "\x12connection_timeout\x18\b \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeoutB\t\n" + "\a_enableB\x10\n" + "\x0e_custom_labelsB\x16\n" + "\x14_enable_push_metricsB\f\n" + "\n" + "_log_levelB\x12\n" + - "\x10_expose_exporter\"\xc5\a\n" + + "\x10_expose_exporter\"\x99\b\n" + "\x17AddMySQLdExporterParams\x12)\n" + "\fpmm_agent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\n" + "pmmAgentId\x12&\n" + @@ -11406,13 +11660,14 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x0eagent_password\x18\x0f \x01(\tR\ragentPassword\x123\n" + "\tlog_level\x18\x10 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + "\x0fexpose_exporter\x18\x11 \x01(\bR\x0eexposeExporter\x12c\n" + - "\x10extra_dsn_params\x18\x12 \x03(\v29.inventory.v1.AddMySQLdExporterParams.ExtraDsnParamsEntryR\x0eextraDsnParams\x1a?\n" + + "\x10extra_dsn_params\x18\x12 \x03(\v29.inventory.v1.AddMySQLdExporterParams.ExtraDsnParamsEntryR\x0eextraDsnParams\x12R\n" + + "\x12connection_timeout\x18\x13 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1aA\n" + "\x13ExtraDsnParamsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x99\b\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xed\b\n" + "\x1aChangeMySQLdExporterParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01\x12;\n" + "\rcustom_labels\x18\x02 \x01(\v2\x11.common.StringMapH\x01R\fcustomLabels\x88\x01\x01\x123\n" + @@ -11432,7 +11687,8 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x12disable_collectors\x18\x0e \x03(\tR\x11disableCollectors\x12*\n" + "\x0eagent_password\x18\x0f \x01(\tH\fR\ragentPassword\x88\x01\x01\x128\n" + "\tlog_level\x18\x10 \x01(\x0e2\x16.inventory.v1.LogLevelH\rR\blogLevel\x88\x01\x01\x12,\n" + - "\x0fexpose_exporter\x18\x11 \x01(\bH\x0eR\x0eexposeExporter\x88\x01\x01B\t\n" + + "\x0fexpose_exporter\x18\x11 \x01(\bH\x0eR\x0eexposeExporter\x88\x01\x01\x12R\n" + + "\x12connection_timeout\x18\x12 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeoutB\t\n" + "\a_enableB\x10\n" + "\x0e_custom_labelsB\x16\n" + "\x14_enable_push_metricsB\v\n" + @@ -11449,7 +11705,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x0f_agent_passwordB\f\n" + "\n" + "_log_levelB\x12\n" + - "\x10_expose_exporter\"\xdb\b\n" + + "\x10_expose_exporter\"\xaf\t\n" + "\x18AddMongoDBExporterParams\x12)\n" + "\fpmm_agent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\n" + "pmmAgentId\x12&\n" + @@ -11475,10 +11731,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\tlog_level\x18\x13 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + "\x0fexpose_exporter\x18\x14 \x01(\bR\x0eexposeExporter\x12<\n" + "\x1aenvironment_variable_names\x18\x15 \x03(\tR\x18environmentVariableNames\x122\n" + - "\x15enable_all_collectors\x18\x16 \x01(\bR\x13enableAllCollectors\x1a?\n" + + "\x15enable_all_collectors\x18\x16 \x01(\bR\x13enableAllCollectors\x12R\n" + + "\x12connection_timeout\x18\x17 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x9d\v\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xf1\v\n" + "\x1bChangeMongoDBExporterParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01\x12;\n" + "\rcustom_labels\x18\x02 \x01(\v2\x11.common.StringMapH\x01R\fcustomLabels\x88\x01\x01\x123\n" + @@ -11502,7 +11759,8 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x11collections_limit\x18\x12 \x01(\x05H\x0eR\x10collectionsLimit\x88\x01\x01\x127\n" + "\x15enable_all_collectors\x18\x13 \x01(\bH\x0fR\x13enableAllCollectors\x88\x01\x01\x128\n" + "\tlog_level\x18\x14 \x01(\x0e2\x16.inventory.v1.LogLevelH\x10R\blogLevel\x88\x01\x01\x12,\n" + - "\x0fexpose_exporter\x18\x15 \x01(\bH\x11R\x0eexposeExporter\x88\x01\x01B\t\n" + + "\x0fexpose_exporter\x18\x15 \x01(\bH\x11R\x0eexposeExporter\x88\x01\x01\x12R\n" + + "\x12connection_timeout\x18\x16 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeoutB\t\n" + "\a_enableB\x10\n" + "\x0e_custom_labelsB\x16\n" + "\x14_enable_push_metricsB\v\n" + @@ -11521,7 +11779,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x16_enable_all_collectorsB\f\n" + "\n" + "_log_levelB\x12\n" + - "\x10_expose_exporter\"\xcc\x06\n" + + "\x10_expose_exporter\"\xa0\a\n" + "\x19AddPostgresExporterParams\x12)\n" + "\fpmm_agent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\n" + "pmmAgentId\x12&\n" + @@ -11543,10 +11801,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\tlog_level\x18\x0f \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x120\n" + "\x14auto_discovery_limit\x18\x10 \x01(\x05R\x12autoDiscoveryLimit\x12'\n" + "\x0fexpose_exporter\x18\x11 \x01(\bR\x0eexposeExporter\x128\n" + - "\x18max_exporter_connections\x18\x12 \x01(\x05R\x16maxExporterConnections\x1a?\n" + + "\x18max_exporter_connections\x18\x12 \x01(\x05R\x16maxExporterConnections\x12R\n" + + "\x12connection_timeout\x18\x13 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xe0\b\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xb4\t\n" + "\x1cChangePostgresExporterParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01\x12;\n" + "\rcustom_labels\x18\x02 \x01(\v2\x11.common.StringMapH\x01R\fcustomLabels\x88\x01\x01\x123\n" + @@ -11567,7 +11826,8 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\tlog_level\x18\x0f \x01(\x0e2\x16.inventory.v1.LogLevelH\fR\blogLevel\x88\x01\x01\x125\n" + "\x14auto_discovery_limit\x18\x10 \x01(\x05H\rR\x12autoDiscoveryLimit\x88\x01\x01\x12,\n" + "\x0fexpose_exporter\x18\x11 \x01(\bH\x0eR\x0eexposeExporter\x88\x01\x01\x12=\n" + - "\x18max_exporter_connections\x18\x12 \x01(\x05H\x0fR\x16maxExporterConnections\x88\x01\x01B\t\n" + + "\x18max_exporter_connections\x18\x12 \x01(\x05H\x0fR\x16maxExporterConnections\x88\x01\x01\x12R\n" + + "\x12connection_timeout\x18\x13 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeoutB\t\n" + "\a_enableB\x10\n" + "\x0e_custom_labelsB\x16\n" + "\x14_enable_push_metricsB\v\n" + @@ -11585,7 +11845,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "_log_levelB\x17\n" + "\x15_auto_discovery_limitB\x12\n" + "\x10_expose_exporterB\x1b\n" + - "\x19_max_exporter_connections\"\x95\x05\n" + + "\x19_max_exporter_connections\"\xe9\x05\n" + "\x19AddProxySQLExporterParams\x12)\n" + "\fpmm_agent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\n" + "pmmAgentId\x12&\n" + @@ -11602,10 +11862,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + " \x03(\tR\x11disableCollectors\x12%\n" + "\x0eagent_password\x18\v \x01(\tR\ragentPassword\x123\n" + "\tlog_level\x18\f \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + - "\x0fexpose_exporter\x18\r \x01(\bR\x0eexposeExporter\x1a?\n" + + "\x0fexpose_exporter\x18\r \x01(\bR\x0eexposeExporter\x12R\n" + + "\x12connection_timeout\x18\x0e \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xe3\x05\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xb7\x06\n" + "\x1cChangeProxySQLExporterParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01\x12;\n" + "\rcustom_labels\x18\x02 \x01(\v2\x11.common.StringMapH\x01R\fcustomLabels\x88\x01\x01\x123\n" + @@ -11619,7 +11880,8 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x0eagent_password\x18\n" + " \x01(\tH\aR\ragentPassword\x88\x01\x01\x128\n" + "\tlog_level\x18\v \x01(\x0e2\x16.inventory.v1.LogLevelH\bR\blogLevel\x88\x01\x01\x12,\n" + - "\x0fexpose_exporter\x18\f \x01(\bH\tR\x0eexposeExporter\x88\x01\x01B\t\n" + + "\x0fexpose_exporter\x18\f \x01(\bH\tR\x0eexposeExporter\x88\x01\x01\x12R\n" + + "\x12connection_timeout\x18\r \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeoutB\t\n" + "\a_enableB\x10\n" + "\x0e_custom_labelsB\x16\n" + "\x14_enable_push_metricsB\v\n" + @@ -11976,7 +12238,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\n" + "\b_tls_keyB\f\n" + "\n" + - "_log_level\"\xc5\x04\n" + + "_log_level\"\x99\x05\n" + "\x14AddRDSExporterParams\x12)\n" + "\fpmm_agent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\n" + "pmmAgentId\x12 \n" + @@ -11989,10 +12251,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x18disable_enhanced_metrics\x18\b \x01(\bR\x16disableEnhancedMetrics\x12!\n" + "\fpush_metrics\x18\t \x01(\bR\vpushMetrics\x123\n" + "\tlog_level\x18\n" + - " \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x1a?\n" + + " \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12R\n" + + "\x12connection_timeout\x18\v \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x9d\x05\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xf1\x05\n" + "\x17ChangeRDSExporterParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01\x12;\n" + "\rcustom_labels\x18\x02 \x01(\v2\x11.common.StringMapH\x01R\fcustomLabels\x88\x01\x01\x123\n" + @@ -12002,7 +12265,9 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x0eaws_secret_key\x18\x06 \x01(\tH\x04R\fawsSecretKey\x88\x01\x01\x127\n" + "\x15disable_basic_metrics\x18\a \x01(\bH\x05R\x13disableBasicMetrics\x88\x01\x01\x12=\n" + "\x18disable_enhanced_metrics\x18\b \x01(\bH\x06R\x16disableEnhancedMetrics\x88\x01\x01\x128\n" + - "\tlog_level\x18\t \x01(\x0e2\x16.inventory.v1.LogLevelH\aR\blogLevel\x88\x01\x01B\t\n" + + "\tlog_level\x18\t \x01(\x0e2\x16.inventory.v1.LogLevelH\aR\blogLevel\x88\x01\x01\x12R\n" + + "\x12connection_timeout\x18\n" + + " \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeoutB\t\n" + "\a_enableB\x10\n" + "\x0e_custom_labelsB\x16\n" + "\x14_enable_push_metricsB\x11\n" + @@ -12011,7 +12276,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x16_disable_basic_metricsB\x1b\n" + "\x19_disable_enhanced_metricsB\f\n" + "\n" + - "_log_level\"\xf7\x03\n" + + "_log_level\"\xcb\x04\n" + "\x19AddExternalExporterParams\x12.\n" + "\x0fruns_on_node_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\frunsOnNodeId\x12\x1d\n" + "\n" + @@ -12025,10 +12290,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\rcustom_labels\x18\n" + " \x03(\v29.inventory.v1.AddExternalExporterParams.CustomLabelsEntryR\fcustomLabels\x12!\n" + "\fpush_metrics\x18\v \x01(\bR\vpushMetrics\x12&\n" + - "\x0ftls_skip_verify\x18\f \x01(\bR\rtlsSkipVerify\x1a?\n" + + "\x0ftls_skip_verify\x18\f \x01(\bR\rtlsSkipVerify\x12R\n" + + "\x12connection_timeout\x18\r \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xf4\x03\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xc8\x04\n" + "\x1cChangeExternalExporterParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01\x12;\n" + "\rcustom_labels\x18\x02 \x01(\v2\x11.common.StringMapH\x01R\fcustomLabels\x88\x01\x01\x123\n" + @@ -12038,14 +12304,15 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x06scheme\x18\x06 \x01(\tH\x04R\x06scheme\x88\x01\x01\x12&\n" + "\fmetrics_path\x18\a \x01(\tH\x05R\vmetricsPath\x88\x01\x01\x12$\n" + "\vlisten_port\x18\b \x01(\rH\x06R\n" + - "listenPort\x88\x01\x01B\t\n" + + "listenPort\x88\x01\x01\x12R\n" + + "\x12connection_timeout\x18\t \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeoutB\t\n" + "\a_enableB\x10\n" + "\x0e_custom_labelsB\x16\n" + "\x14_enable_push_metricsB\v\n" + "\t_usernameB\t\n" + "\a_schemeB\x0f\n" + "\r_metrics_pathB\x0e\n" + - "\f_listen_port\"\xcf\x05\n" + + "\f_listen_port\"\xa3\x06\n" + "\x1eAddAzureDatabaseExporterParams\x12)\n" + "\fpmm_agent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\n" + "pmmAgentId\x12 \n" + @@ -12060,10 +12327,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x15skip_connection_check\x18\n" + " \x01(\bR\x13skipConnectionCheck\x12!\n" + "\fpush_metrics\x18\v \x01(\bR\vpushMetrics\x123\n" + - "\tlog_level\x18\f \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x1a?\n" + + "\tlog_level\x18\f \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12R\n" + + "\x12connection_timeout\x18\r \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xee\x05\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xc2\x06\n" + "!ChangeAzureDatabaseExporterParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01\x12;\n" + "\rcustom_labels\x18\x02 \x01(\v2\x11.common.StringMapH\x01R\fcustomLabels\x88\x01\x01\x123\n" + @@ -12074,7 +12342,8 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x0fazure_tenant_id\x18\a \x01(\tH\x05R\razureTenantId\x88\x01\x01\x127\n" + "\x15azure_subscription_id\x18\b \x01(\tH\x06R\x13azureSubscriptionId\x88\x01\x01\x125\n" + "\x14azure_resource_group\x18\t \x01(\tH\aR\x12azureResourceGroup\x88\x01\x01\x128\n" + - "\tlog_level\x18\v \x01(\x0e2\x16.inventory.v1.LogLevelH\bR\blogLevel\x88\x01\x01B\t\n" + + "\tlog_level\x18\v \x01(\x0e2\x16.inventory.v1.LogLevelH\bR\blogLevel\x88\x01\x01\x12R\n" + + "\x12connection_timeout\x18\f \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeoutB\t\n" + "\a_enableB\x10\n" + "\x0e_custom_labelsB\x16\n" + "\x14_enable_push_metricsB\x12\n" + @@ -12087,7 +12356,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "_log_level\"@\n" + "\x16ChangeNomadAgentParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01B\t\n" + - "\a_enable\"\xdd\x05\n" + + "\a_enable\"\xb1\x06\n" + "\x17AddValkeyExporterParams\x12)\n" + "\fpmm_agent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\n" + "pmmAgentId\x12'\n" + @@ -12107,10 +12376,11 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\atls_key\x18\r \x01(\tR\x06tlsKey\x12%\n" + "\x0eagent_password\x18\x0e \x01(\tR\ragentPassword\x12'\n" + "\x0fexpose_exporter\x18\x0f \x01(\bR\x0eexposeExporter\x123\n" + - "\tlog_level\x18\x10 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x1a?\n" + + "\tlog_level\x18\x10 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12R\n" + + "\x12connection_timeout\x18\x11 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xe8\x06\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xbc\a\n" + "\x1aChangeValkeyExporterParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01\x12;\n" + "\rcustom_labels\x18\x02 \x01(\v2\x11.common.StringMapH\x01R\fcustomLabels\x88\x01\x01\x123\n" + @@ -12128,7 +12398,8 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x0eagent_password\x18\r \x01(\tH\n" + "R\ragentPassword\x88\x01\x01\x12,\n" + "\x0fexpose_exporter\x18\x0e \x01(\bH\vR\x0eexposeExporter\x88\x01\x01\x128\n" + - "\tlog_level\x18\x0f \x01(\x0e2\x16.inventory.v1.LogLevelH\fR\blogLevel\x88\x01\x01B\t\n" + + "\tlog_level\x18\x0f \x01(\x0e2\x16.inventory.v1.LogLevelH\fR\blogLevel\x88\x01\x01\x12R\n" + + "\x12connection_timeout\x18\x10 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeoutB\t\n" + "\a_enableB\x10\n" + "\x0e_custom_labelsB\x16\n" + "\x14_enable_push_metricsB\v\n" + @@ -12371,271 +12642,298 @@ var file_inventory_v1_agents_proto_depIdxs = []int32{ 108, // 4: inventory.v1.NodeExporter.status:type_name -> inventory.v1.AgentStatus 109, // 5: inventory.v1.NodeExporter.log_level:type_name -> inventory.v1.LogLevel 110, // 6: inventory.v1.NodeExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 70, // 7: inventory.v1.MySQLdExporter.custom_labels:type_name -> inventory.v1.MySQLdExporter.CustomLabelsEntry - 108, // 8: inventory.v1.MySQLdExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 9: inventory.v1.MySQLdExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 10: inventory.v1.MySQLdExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 71, // 11: inventory.v1.MySQLdExporter.extra_dsn_params:type_name -> inventory.v1.MySQLdExporter.ExtraDsnParamsEntry - 72, // 12: inventory.v1.MongoDBExporter.custom_labels:type_name -> inventory.v1.MongoDBExporter.CustomLabelsEntry - 108, // 13: inventory.v1.MongoDBExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 14: inventory.v1.MongoDBExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 15: inventory.v1.MongoDBExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 73, // 16: inventory.v1.PostgresExporter.custom_labels:type_name -> inventory.v1.PostgresExporter.CustomLabelsEntry - 108, // 17: inventory.v1.PostgresExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 18: inventory.v1.PostgresExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 19: inventory.v1.PostgresExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 74, // 20: inventory.v1.ProxySQLExporter.custom_labels:type_name -> inventory.v1.ProxySQLExporter.CustomLabelsEntry - 108, // 21: inventory.v1.ProxySQLExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 22: inventory.v1.ProxySQLExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 23: inventory.v1.ProxySQLExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 75, // 24: inventory.v1.ValkeyExporter.custom_labels:type_name -> inventory.v1.ValkeyExporter.CustomLabelsEntry - 108, // 25: inventory.v1.ValkeyExporter.status:type_name -> inventory.v1.AgentStatus - 110, // 26: inventory.v1.ValkeyExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 76, // 27: inventory.v1.QANMySQLPerfSchemaAgent.custom_labels:type_name -> inventory.v1.QANMySQLPerfSchemaAgent.CustomLabelsEntry - 108, // 28: inventory.v1.QANMySQLPerfSchemaAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 29: inventory.v1.QANMySQLPerfSchemaAgent.log_level:type_name -> inventory.v1.LogLevel - 77, // 30: inventory.v1.QANMySQLPerfSchemaAgent.extra_dsn_params:type_name -> inventory.v1.QANMySQLPerfSchemaAgent.ExtraDsnParamsEntry - 78, // 31: inventory.v1.QANMySQLSlowlogAgent.custom_labels:type_name -> inventory.v1.QANMySQLSlowlogAgent.CustomLabelsEntry - 108, // 32: inventory.v1.QANMySQLSlowlogAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 33: inventory.v1.QANMySQLSlowlogAgent.log_level:type_name -> inventory.v1.LogLevel - 79, // 34: inventory.v1.QANMySQLSlowlogAgent.extra_dsn_params:type_name -> inventory.v1.QANMySQLSlowlogAgent.ExtraDsnParamsEntry - 80, // 35: inventory.v1.QANMongoDBProfilerAgent.custom_labels:type_name -> inventory.v1.QANMongoDBProfilerAgent.CustomLabelsEntry - 108, // 36: inventory.v1.QANMongoDBProfilerAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 37: inventory.v1.QANMongoDBProfilerAgent.log_level:type_name -> inventory.v1.LogLevel - 81, // 38: inventory.v1.QANMongoDBMongologAgent.custom_labels:type_name -> inventory.v1.QANMongoDBMongologAgent.CustomLabelsEntry - 108, // 39: inventory.v1.QANMongoDBMongologAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 40: inventory.v1.QANMongoDBMongologAgent.log_level:type_name -> inventory.v1.LogLevel - 111, // 41: inventory.v1.RTAOptions.collect_interval:type_name -> google.protobuf.Duration - 82, // 42: inventory.v1.RTAMongoDBAgent.custom_labels:type_name -> inventory.v1.RTAMongoDBAgent.CustomLabelsEntry - 14, // 43: inventory.v1.RTAMongoDBAgent.rta_options:type_name -> inventory.v1.RTAOptions - 108, // 44: inventory.v1.RTAMongoDBAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 45: inventory.v1.RTAMongoDBAgent.log_level:type_name -> inventory.v1.LogLevel - 83, // 46: inventory.v1.QANPostgreSQLPgStatementsAgent.custom_labels:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent.CustomLabelsEntry - 108, // 47: inventory.v1.QANPostgreSQLPgStatementsAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 48: inventory.v1.QANPostgreSQLPgStatementsAgent.log_level:type_name -> inventory.v1.LogLevel - 84, // 49: inventory.v1.QANPostgreSQLPgStatMonitorAgent.custom_labels:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent.CustomLabelsEntry - 108, // 50: inventory.v1.QANPostgreSQLPgStatMonitorAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 51: inventory.v1.QANPostgreSQLPgStatMonitorAgent.log_level:type_name -> inventory.v1.LogLevel - 85, // 52: inventory.v1.RDSExporter.custom_labels:type_name -> inventory.v1.RDSExporter.CustomLabelsEntry - 108, // 53: inventory.v1.RDSExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 54: inventory.v1.RDSExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 55: inventory.v1.RDSExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 86, // 56: inventory.v1.ExternalExporter.custom_labels:type_name -> inventory.v1.ExternalExporter.CustomLabelsEntry - 110, // 57: inventory.v1.ExternalExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 108, // 58: inventory.v1.ExternalExporter.status:type_name -> inventory.v1.AgentStatus - 87, // 59: inventory.v1.AzureDatabaseExporter.custom_labels:type_name -> inventory.v1.AzureDatabaseExporter.CustomLabelsEntry - 108, // 60: inventory.v1.AzureDatabaseExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 61: inventory.v1.AzureDatabaseExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 62: inventory.v1.AzureDatabaseExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 112, // 63: inventory.v1.ChangeCommonAgentParams.custom_labels:type_name -> common.StringMap - 110, // 64: inventory.v1.ChangeCommonAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 0, // 65: inventory.v1.ListAgentsRequest.agent_type:type_name -> inventory.v1.AgentType - 1, // 66: inventory.v1.ListAgentsResponse.pmm_agent:type_name -> inventory.v1.PMMAgent - 2, // 67: inventory.v1.ListAgentsResponse.vm_agent:type_name -> inventory.v1.VMAgent - 4, // 68: inventory.v1.ListAgentsResponse.node_exporter:type_name -> inventory.v1.NodeExporter - 5, // 69: inventory.v1.ListAgentsResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 6, // 70: inventory.v1.ListAgentsResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter - 7, // 71: inventory.v1.ListAgentsResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter - 8, // 72: inventory.v1.ListAgentsResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter - 10, // 73: inventory.v1.ListAgentsResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 11, // 74: inventory.v1.ListAgentsResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent - 12, // 75: inventory.v1.ListAgentsResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent - 13, // 76: inventory.v1.ListAgentsResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent - 16, // 77: inventory.v1.ListAgentsResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 17, // 78: inventory.v1.ListAgentsResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent - 19, // 79: inventory.v1.ListAgentsResponse.external_exporter:type_name -> inventory.v1.ExternalExporter - 18, // 80: inventory.v1.ListAgentsResponse.rds_exporter:type_name -> inventory.v1.RDSExporter - 20, // 81: inventory.v1.ListAgentsResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter - 3, // 82: inventory.v1.ListAgentsResponse.nomad_agent:type_name -> inventory.v1.NomadAgent - 9, // 83: inventory.v1.ListAgentsResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter - 15, // 84: inventory.v1.ListAgentsResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent - 1, // 85: inventory.v1.GetAgentResponse.pmm_agent:type_name -> inventory.v1.PMMAgent - 2, // 86: inventory.v1.GetAgentResponse.vmagent:type_name -> inventory.v1.VMAgent - 4, // 87: inventory.v1.GetAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter - 5, // 88: inventory.v1.GetAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 6, // 89: inventory.v1.GetAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter - 7, // 90: inventory.v1.GetAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter - 8, // 91: inventory.v1.GetAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter - 10, // 92: inventory.v1.GetAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 11, // 93: inventory.v1.GetAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent - 12, // 94: inventory.v1.GetAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent - 13, // 95: inventory.v1.GetAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent - 16, // 96: inventory.v1.GetAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 17, // 97: inventory.v1.GetAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent - 19, // 98: inventory.v1.GetAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter - 18, // 99: inventory.v1.GetAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter - 20, // 100: inventory.v1.GetAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter - 3, // 101: inventory.v1.GetAgentResponse.nomad_agent:type_name -> inventory.v1.NomadAgent - 9, // 102: inventory.v1.GetAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter - 15, // 103: inventory.v1.GetAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent - 32, // 104: inventory.v1.AddAgentRequest.pmm_agent:type_name -> inventory.v1.AddPMMAgentParams - 33, // 105: inventory.v1.AddAgentRequest.node_exporter:type_name -> inventory.v1.AddNodeExporterParams - 35, // 106: inventory.v1.AddAgentRequest.mysqld_exporter:type_name -> inventory.v1.AddMySQLdExporterParams - 37, // 107: inventory.v1.AddAgentRequest.mongodb_exporter:type_name -> inventory.v1.AddMongoDBExporterParams - 39, // 108: inventory.v1.AddAgentRequest.postgres_exporter:type_name -> inventory.v1.AddPostgresExporterParams - 41, // 109: inventory.v1.AddAgentRequest.proxysql_exporter:type_name -> inventory.v1.AddProxySQLExporterParams - 57, // 110: inventory.v1.AddAgentRequest.external_exporter:type_name -> inventory.v1.AddExternalExporterParams - 55, // 111: inventory.v1.AddAgentRequest.rds_exporter:type_name -> inventory.v1.AddRDSExporterParams - 59, // 112: inventory.v1.AddAgentRequest.azure_database_exporter:type_name -> inventory.v1.AddAzureDatabaseExporterParams - 43, // 113: inventory.v1.AddAgentRequest.qan_mysql_perfschema_agent:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams - 45, // 114: inventory.v1.AddAgentRequest.qan_mysql_slowlog_agent:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams - 47, // 115: inventory.v1.AddAgentRequest.qan_mongodb_profiler_agent:type_name -> inventory.v1.AddQANMongoDBProfilerAgentParams - 49, // 116: inventory.v1.AddAgentRequest.qan_mongodb_mongolog_agent:type_name -> inventory.v1.AddQANMongoDBMongologAgentParams - 51, // 117: inventory.v1.AddAgentRequest.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.AddQANPostgreSQLPgStatementsAgentParams - 53, // 118: inventory.v1.AddAgentRequest.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams - 62, // 119: inventory.v1.AddAgentRequest.valkey_exporter:type_name -> inventory.v1.AddValkeyExporterParams - 64, // 120: inventory.v1.AddAgentRequest.rta_mongodb_agent:type_name -> inventory.v1.AddRTAMongoDBAgentParams - 1, // 121: inventory.v1.AddAgentResponse.pmm_agent:type_name -> inventory.v1.PMMAgent - 4, // 122: inventory.v1.AddAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter - 5, // 123: inventory.v1.AddAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 6, // 124: inventory.v1.AddAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter - 7, // 125: inventory.v1.AddAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter - 8, // 126: inventory.v1.AddAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter - 19, // 127: inventory.v1.AddAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter - 18, // 128: inventory.v1.AddAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter - 20, // 129: inventory.v1.AddAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter - 10, // 130: inventory.v1.AddAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 11, // 131: inventory.v1.AddAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent - 12, // 132: inventory.v1.AddAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent - 13, // 133: inventory.v1.AddAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent - 16, // 134: inventory.v1.AddAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 17, // 135: inventory.v1.AddAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent - 9, // 136: inventory.v1.AddAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter - 15, // 137: inventory.v1.AddAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent - 34, // 138: inventory.v1.ChangeAgentRequest.node_exporter:type_name -> inventory.v1.ChangeNodeExporterParams - 36, // 139: inventory.v1.ChangeAgentRequest.mysqld_exporter:type_name -> inventory.v1.ChangeMySQLdExporterParams - 38, // 140: inventory.v1.ChangeAgentRequest.mongodb_exporter:type_name -> inventory.v1.ChangeMongoDBExporterParams - 40, // 141: inventory.v1.ChangeAgentRequest.postgres_exporter:type_name -> inventory.v1.ChangePostgresExporterParams - 42, // 142: inventory.v1.ChangeAgentRequest.proxysql_exporter:type_name -> inventory.v1.ChangeProxySQLExporterParams - 58, // 143: inventory.v1.ChangeAgentRequest.external_exporter:type_name -> inventory.v1.ChangeExternalExporterParams - 56, // 144: inventory.v1.ChangeAgentRequest.rds_exporter:type_name -> inventory.v1.ChangeRDSExporterParams - 60, // 145: inventory.v1.ChangeAgentRequest.azure_database_exporter:type_name -> inventory.v1.ChangeAzureDatabaseExporterParams - 44, // 146: inventory.v1.ChangeAgentRequest.qan_mysql_perfschema_agent:type_name -> inventory.v1.ChangeQANMySQLPerfSchemaAgentParams - 46, // 147: inventory.v1.ChangeAgentRequest.qan_mysql_slowlog_agent:type_name -> inventory.v1.ChangeQANMySQLSlowlogAgentParams - 48, // 148: inventory.v1.ChangeAgentRequest.qan_mongodb_profiler_agent:type_name -> inventory.v1.ChangeQANMongoDBProfilerAgentParams - 50, // 149: inventory.v1.ChangeAgentRequest.qan_mongodb_mongolog_agent:type_name -> inventory.v1.ChangeQANMongoDBMongologAgentParams - 52, // 150: inventory.v1.ChangeAgentRequest.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams - 54, // 151: inventory.v1.ChangeAgentRequest.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams - 61, // 152: inventory.v1.ChangeAgentRequest.nomad_agent:type_name -> inventory.v1.ChangeNomadAgentParams - 63, // 153: inventory.v1.ChangeAgentRequest.valkey_exporter:type_name -> inventory.v1.ChangeValkeyExporterParams - 65, // 154: inventory.v1.ChangeAgentRequest.rta_mongodb_agent:type_name -> inventory.v1.ChangeRTAMongoDBAgentParams - 4, // 155: inventory.v1.ChangeAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter - 5, // 156: inventory.v1.ChangeAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 6, // 157: inventory.v1.ChangeAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter - 7, // 158: inventory.v1.ChangeAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter - 8, // 159: inventory.v1.ChangeAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter - 19, // 160: inventory.v1.ChangeAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter - 18, // 161: inventory.v1.ChangeAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter - 20, // 162: inventory.v1.ChangeAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter - 10, // 163: inventory.v1.ChangeAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 11, // 164: inventory.v1.ChangeAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent - 12, // 165: inventory.v1.ChangeAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent - 13, // 166: inventory.v1.ChangeAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent - 16, // 167: inventory.v1.ChangeAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 17, // 168: inventory.v1.ChangeAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent - 3, // 169: inventory.v1.ChangeAgentResponse.nomad_agent:type_name -> inventory.v1.NomadAgent - 9, // 170: inventory.v1.ChangeAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter - 15, // 171: inventory.v1.ChangeAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent - 88, // 172: inventory.v1.AddPMMAgentParams.custom_labels:type_name -> inventory.v1.AddPMMAgentParams.CustomLabelsEntry - 89, // 173: inventory.v1.AddNodeExporterParams.custom_labels:type_name -> inventory.v1.AddNodeExporterParams.CustomLabelsEntry - 109, // 174: inventory.v1.AddNodeExporterParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 175: inventory.v1.ChangeNodeExporterParams.custom_labels:type_name -> common.StringMap - 110, // 176: inventory.v1.ChangeNodeExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 177: inventory.v1.ChangeNodeExporterParams.log_level:type_name -> inventory.v1.LogLevel - 90, // 178: inventory.v1.AddMySQLdExporterParams.custom_labels:type_name -> inventory.v1.AddMySQLdExporterParams.CustomLabelsEntry - 109, // 179: inventory.v1.AddMySQLdExporterParams.log_level:type_name -> inventory.v1.LogLevel - 91, // 180: inventory.v1.AddMySQLdExporterParams.extra_dsn_params:type_name -> inventory.v1.AddMySQLdExporterParams.ExtraDsnParamsEntry - 112, // 181: inventory.v1.ChangeMySQLdExporterParams.custom_labels:type_name -> common.StringMap - 110, // 182: inventory.v1.ChangeMySQLdExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 183: inventory.v1.ChangeMySQLdExporterParams.log_level:type_name -> inventory.v1.LogLevel - 92, // 184: inventory.v1.AddMongoDBExporterParams.custom_labels:type_name -> inventory.v1.AddMongoDBExporterParams.CustomLabelsEntry - 109, // 185: inventory.v1.AddMongoDBExporterParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 186: inventory.v1.ChangeMongoDBExporterParams.custom_labels:type_name -> common.StringMap - 110, // 187: inventory.v1.ChangeMongoDBExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 188: inventory.v1.ChangeMongoDBExporterParams.log_level:type_name -> inventory.v1.LogLevel - 93, // 189: inventory.v1.AddPostgresExporterParams.custom_labels:type_name -> inventory.v1.AddPostgresExporterParams.CustomLabelsEntry - 109, // 190: inventory.v1.AddPostgresExporterParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 191: inventory.v1.ChangePostgresExporterParams.custom_labels:type_name -> common.StringMap - 110, // 192: inventory.v1.ChangePostgresExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 193: inventory.v1.ChangePostgresExporterParams.log_level:type_name -> inventory.v1.LogLevel - 94, // 194: inventory.v1.AddProxySQLExporterParams.custom_labels:type_name -> inventory.v1.AddProxySQLExporterParams.CustomLabelsEntry - 109, // 195: inventory.v1.AddProxySQLExporterParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 196: inventory.v1.ChangeProxySQLExporterParams.custom_labels:type_name -> common.StringMap - 110, // 197: inventory.v1.ChangeProxySQLExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 198: inventory.v1.ChangeProxySQLExporterParams.log_level:type_name -> inventory.v1.LogLevel - 95, // 199: inventory.v1.AddQANMySQLPerfSchemaAgentParams.custom_labels:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams.CustomLabelsEntry - 109, // 200: inventory.v1.AddQANMySQLPerfSchemaAgentParams.log_level:type_name -> inventory.v1.LogLevel - 96, // 201: inventory.v1.AddQANMySQLPerfSchemaAgentParams.extra_dsn_params:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams.ExtraDsnParamsEntry - 112, // 202: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.custom_labels:type_name -> common.StringMap - 110, // 203: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 204: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.log_level:type_name -> inventory.v1.LogLevel - 97, // 205: inventory.v1.AddQANMySQLSlowlogAgentParams.custom_labels:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams.CustomLabelsEntry - 109, // 206: inventory.v1.AddQANMySQLSlowlogAgentParams.log_level:type_name -> inventory.v1.LogLevel - 98, // 207: inventory.v1.AddQANMySQLSlowlogAgentParams.extra_dsn_params:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams.ExtraDsnParamsEntry - 112, // 208: inventory.v1.ChangeQANMySQLSlowlogAgentParams.custom_labels:type_name -> common.StringMap - 110, // 209: inventory.v1.ChangeQANMySQLSlowlogAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 210: inventory.v1.ChangeQANMySQLSlowlogAgentParams.log_level:type_name -> inventory.v1.LogLevel - 99, // 211: inventory.v1.AddQANMongoDBProfilerAgentParams.custom_labels:type_name -> inventory.v1.AddQANMongoDBProfilerAgentParams.CustomLabelsEntry - 109, // 212: inventory.v1.AddQANMongoDBProfilerAgentParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 213: inventory.v1.ChangeQANMongoDBProfilerAgentParams.custom_labels:type_name -> common.StringMap - 110, // 214: inventory.v1.ChangeQANMongoDBProfilerAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 215: inventory.v1.ChangeQANMongoDBProfilerAgentParams.log_level:type_name -> inventory.v1.LogLevel - 100, // 216: inventory.v1.AddQANMongoDBMongologAgentParams.custom_labels:type_name -> inventory.v1.AddQANMongoDBMongologAgentParams.CustomLabelsEntry - 109, // 217: inventory.v1.AddQANMongoDBMongologAgentParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 218: inventory.v1.ChangeQANMongoDBMongologAgentParams.custom_labels:type_name -> common.StringMap - 110, // 219: inventory.v1.ChangeQANMongoDBMongologAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 220: inventory.v1.ChangeQANMongoDBMongologAgentParams.log_level:type_name -> inventory.v1.LogLevel - 101, // 221: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.custom_labels:type_name -> inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.CustomLabelsEntry - 109, // 222: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 223: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.custom_labels:type_name -> common.StringMap - 110, // 224: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 225: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.log_level:type_name -> inventory.v1.LogLevel - 102, // 226: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.custom_labels:type_name -> inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.CustomLabelsEntry - 109, // 227: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 228: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.custom_labels:type_name -> common.StringMap - 110, // 229: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 230: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.log_level:type_name -> inventory.v1.LogLevel - 103, // 231: inventory.v1.AddRDSExporterParams.custom_labels:type_name -> inventory.v1.AddRDSExporterParams.CustomLabelsEntry - 109, // 232: inventory.v1.AddRDSExporterParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 233: inventory.v1.ChangeRDSExporterParams.custom_labels:type_name -> common.StringMap - 110, // 234: inventory.v1.ChangeRDSExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 235: inventory.v1.ChangeRDSExporterParams.log_level:type_name -> inventory.v1.LogLevel - 104, // 236: inventory.v1.AddExternalExporterParams.custom_labels:type_name -> inventory.v1.AddExternalExporterParams.CustomLabelsEntry - 112, // 237: inventory.v1.ChangeExternalExporterParams.custom_labels:type_name -> common.StringMap - 110, // 238: inventory.v1.ChangeExternalExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 105, // 239: inventory.v1.AddAzureDatabaseExporterParams.custom_labels:type_name -> inventory.v1.AddAzureDatabaseExporterParams.CustomLabelsEntry - 109, // 240: inventory.v1.AddAzureDatabaseExporterParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 241: inventory.v1.ChangeAzureDatabaseExporterParams.custom_labels:type_name -> common.StringMap - 110, // 242: inventory.v1.ChangeAzureDatabaseExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 243: inventory.v1.ChangeAzureDatabaseExporterParams.log_level:type_name -> inventory.v1.LogLevel - 106, // 244: inventory.v1.AddValkeyExporterParams.custom_labels:type_name -> inventory.v1.AddValkeyExporterParams.CustomLabelsEntry - 109, // 245: inventory.v1.AddValkeyExporterParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 246: inventory.v1.ChangeValkeyExporterParams.custom_labels:type_name -> common.StringMap - 110, // 247: inventory.v1.ChangeValkeyExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 248: inventory.v1.ChangeValkeyExporterParams.log_level:type_name -> inventory.v1.LogLevel - 107, // 249: inventory.v1.AddRTAMongoDBAgentParams.custom_labels:type_name -> inventory.v1.AddRTAMongoDBAgentParams.CustomLabelsEntry - 109, // 250: inventory.v1.AddRTAMongoDBAgentParams.log_level:type_name -> inventory.v1.LogLevel - 14, // 251: inventory.v1.AddRTAMongoDBAgentParams.rta_options:type_name -> inventory.v1.RTAOptions - 112, // 252: inventory.v1.ChangeRTAMongoDBAgentParams.custom_labels:type_name -> common.StringMap - 109, // 253: inventory.v1.ChangeRTAMongoDBAgentParams.log_level:type_name -> inventory.v1.LogLevel - 14, // 254: inventory.v1.ChangeRTAMongoDBAgentParams.rta_options:type_name -> inventory.v1.RTAOptions - 22, // 255: inventory.v1.AgentsService.ListAgents:input_type -> inventory.v1.ListAgentsRequest - 24, // 256: inventory.v1.AgentsService.GetAgent:input_type -> inventory.v1.GetAgentRequest - 26, // 257: inventory.v1.AgentsService.GetAgentLogs:input_type -> inventory.v1.GetAgentLogsRequest - 28, // 258: inventory.v1.AgentsService.AddAgent:input_type -> inventory.v1.AddAgentRequest - 30, // 259: inventory.v1.AgentsService.ChangeAgent:input_type -> inventory.v1.ChangeAgentRequest - 66, // 260: inventory.v1.AgentsService.RemoveAgent:input_type -> inventory.v1.RemoveAgentRequest - 23, // 261: inventory.v1.AgentsService.ListAgents:output_type -> inventory.v1.ListAgentsResponse - 25, // 262: inventory.v1.AgentsService.GetAgent:output_type -> inventory.v1.GetAgentResponse - 27, // 263: inventory.v1.AgentsService.GetAgentLogs:output_type -> inventory.v1.GetAgentLogsResponse - 29, // 264: inventory.v1.AgentsService.AddAgent:output_type -> inventory.v1.AddAgentResponse - 31, // 265: inventory.v1.AgentsService.ChangeAgent:output_type -> inventory.v1.ChangeAgentResponse - 67, // 266: inventory.v1.AgentsService.RemoveAgent:output_type -> inventory.v1.RemoveAgentResponse - 261, // [261:267] is the sub-list for method output_type - 255, // [255:261] is the sub-list for method input_type - 255, // [255:255] is the sub-list for extension type_name - 255, // [255:255] is the sub-list for extension extendee - 0, // [0:255] is the sub-list for field type_name + 111, // 7: inventory.v1.NodeExporter.connection_timeout:type_name -> google.protobuf.Duration + 70, // 8: inventory.v1.MySQLdExporter.custom_labels:type_name -> inventory.v1.MySQLdExporter.CustomLabelsEntry + 108, // 9: inventory.v1.MySQLdExporter.status:type_name -> inventory.v1.AgentStatus + 109, // 10: inventory.v1.MySQLdExporter.log_level:type_name -> inventory.v1.LogLevel + 110, // 11: inventory.v1.MySQLdExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 71, // 12: inventory.v1.MySQLdExporter.extra_dsn_params:type_name -> inventory.v1.MySQLdExporter.ExtraDsnParamsEntry + 111, // 13: inventory.v1.MySQLdExporter.connection_timeout:type_name -> google.protobuf.Duration + 72, // 14: inventory.v1.MongoDBExporter.custom_labels:type_name -> inventory.v1.MongoDBExporter.CustomLabelsEntry + 108, // 15: inventory.v1.MongoDBExporter.status:type_name -> inventory.v1.AgentStatus + 109, // 16: inventory.v1.MongoDBExporter.log_level:type_name -> inventory.v1.LogLevel + 110, // 17: inventory.v1.MongoDBExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 111, // 18: inventory.v1.MongoDBExporter.connection_timeout:type_name -> google.protobuf.Duration + 73, // 19: inventory.v1.PostgresExporter.custom_labels:type_name -> inventory.v1.PostgresExporter.CustomLabelsEntry + 108, // 20: inventory.v1.PostgresExporter.status:type_name -> inventory.v1.AgentStatus + 109, // 21: inventory.v1.PostgresExporter.log_level:type_name -> inventory.v1.LogLevel + 110, // 22: inventory.v1.PostgresExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 111, // 23: inventory.v1.PostgresExporter.connection_timeout:type_name -> google.protobuf.Duration + 74, // 24: inventory.v1.ProxySQLExporter.custom_labels:type_name -> inventory.v1.ProxySQLExporter.CustomLabelsEntry + 108, // 25: inventory.v1.ProxySQLExporter.status:type_name -> inventory.v1.AgentStatus + 109, // 26: inventory.v1.ProxySQLExporter.log_level:type_name -> inventory.v1.LogLevel + 110, // 27: inventory.v1.ProxySQLExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 111, // 28: inventory.v1.ProxySQLExporter.connection_timeout:type_name -> google.protobuf.Duration + 75, // 29: inventory.v1.ValkeyExporter.custom_labels:type_name -> inventory.v1.ValkeyExporter.CustomLabelsEntry + 108, // 30: inventory.v1.ValkeyExporter.status:type_name -> inventory.v1.AgentStatus + 110, // 31: inventory.v1.ValkeyExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 111, // 32: inventory.v1.ValkeyExporter.connection_timeout:type_name -> google.protobuf.Duration + 76, // 33: inventory.v1.QANMySQLPerfSchemaAgent.custom_labels:type_name -> inventory.v1.QANMySQLPerfSchemaAgent.CustomLabelsEntry + 108, // 34: inventory.v1.QANMySQLPerfSchemaAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 35: inventory.v1.QANMySQLPerfSchemaAgent.log_level:type_name -> inventory.v1.LogLevel + 77, // 36: inventory.v1.QANMySQLPerfSchemaAgent.extra_dsn_params:type_name -> inventory.v1.QANMySQLPerfSchemaAgent.ExtraDsnParamsEntry + 78, // 37: inventory.v1.QANMySQLSlowlogAgent.custom_labels:type_name -> inventory.v1.QANMySQLSlowlogAgent.CustomLabelsEntry + 108, // 38: inventory.v1.QANMySQLSlowlogAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 39: inventory.v1.QANMySQLSlowlogAgent.log_level:type_name -> inventory.v1.LogLevel + 79, // 40: inventory.v1.QANMySQLSlowlogAgent.extra_dsn_params:type_name -> inventory.v1.QANMySQLSlowlogAgent.ExtraDsnParamsEntry + 80, // 41: inventory.v1.QANMongoDBProfilerAgent.custom_labels:type_name -> inventory.v1.QANMongoDBProfilerAgent.CustomLabelsEntry + 108, // 42: inventory.v1.QANMongoDBProfilerAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 43: inventory.v1.QANMongoDBProfilerAgent.log_level:type_name -> inventory.v1.LogLevel + 81, // 44: inventory.v1.QANMongoDBMongologAgent.custom_labels:type_name -> inventory.v1.QANMongoDBMongologAgent.CustomLabelsEntry + 108, // 45: inventory.v1.QANMongoDBMongologAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 46: inventory.v1.QANMongoDBMongologAgent.log_level:type_name -> inventory.v1.LogLevel + 111, // 47: inventory.v1.RTAOptions.collect_interval:type_name -> google.protobuf.Duration + 82, // 48: inventory.v1.RTAMongoDBAgent.custom_labels:type_name -> inventory.v1.RTAMongoDBAgent.CustomLabelsEntry + 14, // 49: inventory.v1.RTAMongoDBAgent.rta_options:type_name -> inventory.v1.RTAOptions + 108, // 50: inventory.v1.RTAMongoDBAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 51: inventory.v1.RTAMongoDBAgent.log_level:type_name -> inventory.v1.LogLevel + 83, // 52: inventory.v1.QANPostgreSQLPgStatementsAgent.custom_labels:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent.CustomLabelsEntry + 108, // 53: inventory.v1.QANPostgreSQLPgStatementsAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 54: inventory.v1.QANPostgreSQLPgStatementsAgent.log_level:type_name -> inventory.v1.LogLevel + 84, // 55: inventory.v1.QANPostgreSQLPgStatMonitorAgent.custom_labels:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent.CustomLabelsEntry + 108, // 56: inventory.v1.QANPostgreSQLPgStatMonitorAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 57: inventory.v1.QANPostgreSQLPgStatMonitorAgent.log_level:type_name -> inventory.v1.LogLevel + 85, // 58: inventory.v1.RDSExporter.custom_labels:type_name -> inventory.v1.RDSExporter.CustomLabelsEntry + 108, // 59: inventory.v1.RDSExporter.status:type_name -> inventory.v1.AgentStatus + 109, // 60: inventory.v1.RDSExporter.log_level:type_name -> inventory.v1.LogLevel + 110, // 61: inventory.v1.RDSExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 111, // 62: inventory.v1.RDSExporter.connection_timeout:type_name -> google.protobuf.Duration + 86, // 63: inventory.v1.ExternalExporter.custom_labels:type_name -> inventory.v1.ExternalExporter.CustomLabelsEntry + 110, // 64: inventory.v1.ExternalExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 108, // 65: inventory.v1.ExternalExporter.status:type_name -> inventory.v1.AgentStatus + 111, // 66: inventory.v1.ExternalExporter.connection_timeout:type_name -> google.protobuf.Duration + 87, // 67: inventory.v1.AzureDatabaseExporter.custom_labels:type_name -> inventory.v1.AzureDatabaseExporter.CustomLabelsEntry + 108, // 68: inventory.v1.AzureDatabaseExporter.status:type_name -> inventory.v1.AgentStatus + 109, // 69: inventory.v1.AzureDatabaseExporter.log_level:type_name -> inventory.v1.LogLevel + 110, // 70: inventory.v1.AzureDatabaseExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 111, // 71: inventory.v1.AzureDatabaseExporter.connection_timeout:type_name -> google.protobuf.Duration + 112, // 72: inventory.v1.ChangeCommonAgentParams.custom_labels:type_name -> common.StringMap + 110, // 73: inventory.v1.ChangeCommonAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 0, // 74: inventory.v1.ListAgentsRequest.agent_type:type_name -> inventory.v1.AgentType + 1, // 75: inventory.v1.ListAgentsResponse.pmm_agent:type_name -> inventory.v1.PMMAgent + 2, // 76: inventory.v1.ListAgentsResponse.vm_agent:type_name -> inventory.v1.VMAgent + 4, // 77: inventory.v1.ListAgentsResponse.node_exporter:type_name -> inventory.v1.NodeExporter + 5, // 78: inventory.v1.ListAgentsResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 6, // 79: inventory.v1.ListAgentsResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter + 7, // 80: inventory.v1.ListAgentsResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter + 8, // 81: inventory.v1.ListAgentsResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter + 10, // 82: inventory.v1.ListAgentsResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 11, // 83: inventory.v1.ListAgentsResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent + 12, // 84: inventory.v1.ListAgentsResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent + 13, // 85: inventory.v1.ListAgentsResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent + 16, // 86: inventory.v1.ListAgentsResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 17, // 87: inventory.v1.ListAgentsResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent + 19, // 88: inventory.v1.ListAgentsResponse.external_exporter:type_name -> inventory.v1.ExternalExporter + 18, // 89: inventory.v1.ListAgentsResponse.rds_exporter:type_name -> inventory.v1.RDSExporter + 20, // 90: inventory.v1.ListAgentsResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter + 3, // 91: inventory.v1.ListAgentsResponse.nomad_agent:type_name -> inventory.v1.NomadAgent + 9, // 92: inventory.v1.ListAgentsResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter + 15, // 93: inventory.v1.ListAgentsResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent + 1, // 94: inventory.v1.GetAgentResponse.pmm_agent:type_name -> inventory.v1.PMMAgent + 2, // 95: inventory.v1.GetAgentResponse.vmagent:type_name -> inventory.v1.VMAgent + 4, // 96: inventory.v1.GetAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter + 5, // 97: inventory.v1.GetAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 6, // 98: inventory.v1.GetAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter + 7, // 99: inventory.v1.GetAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter + 8, // 100: inventory.v1.GetAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter + 10, // 101: inventory.v1.GetAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 11, // 102: inventory.v1.GetAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent + 12, // 103: inventory.v1.GetAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent + 13, // 104: inventory.v1.GetAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent + 16, // 105: inventory.v1.GetAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 17, // 106: inventory.v1.GetAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent + 19, // 107: inventory.v1.GetAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter + 18, // 108: inventory.v1.GetAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter + 20, // 109: inventory.v1.GetAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter + 3, // 110: inventory.v1.GetAgentResponse.nomad_agent:type_name -> inventory.v1.NomadAgent + 9, // 111: inventory.v1.GetAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter + 15, // 112: inventory.v1.GetAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent + 32, // 113: inventory.v1.AddAgentRequest.pmm_agent:type_name -> inventory.v1.AddPMMAgentParams + 33, // 114: inventory.v1.AddAgentRequest.node_exporter:type_name -> inventory.v1.AddNodeExporterParams + 35, // 115: inventory.v1.AddAgentRequest.mysqld_exporter:type_name -> inventory.v1.AddMySQLdExporterParams + 37, // 116: inventory.v1.AddAgentRequest.mongodb_exporter:type_name -> inventory.v1.AddMongoDBExporterParams + 39, // 117: inventory.v1.AddAgentRequest.postgres_exporter:type_name -> inventory.v1.AddPostgresExporterParams + 41, // 118: inventory.v1.AddAgentRequest.proxysql_exporter:type_name -> inventory.v1.AddProxySQLExporterParams + 57, // 119: inventory.v1.AddAgentRequest.external_exporter:type_name -> inventory.v1.AddExternalExporterParams + 55, // 120: inventory.v1.AddAgentRequest.rds_exporter:type_name -> inventory.v1.AddRDSExporterParams + 59, // 121: inventory.v1.AddAgentRequest.azure_database_exporter:type_name -> inventory.v1.AddAzureDatabaseExporterParams + 43, // 122: inventory.v1.AddAgentRequest.qan_mysql_perfschema_agent:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams + 45, // 123: inventory.v1.AddAgentRequest.qan_mysql_slowlog_agent:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams + 47, // 124: inventory.v1.AddAgentRequest.qan_mongodb_profiler_agent:type_name -> inventory.v1.AddQANMongoDBProfilerAgentParams + 49, // 125: inventory.v1.AddAgentRequest.qan_mongodb_mongolog_agent:type_name -> inventory.v1.AddQANMongoDBMongologAgentParams + 51, // 126: inventory.v1.AddAgentRequest.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.AddQANPostgreSQLPgStatementsAgentParams + 53, // 127: inventory.v1.AddAgentRequest.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams + 62, // 128: inventory.v1.AddAgentRequest.valkey_exporter:type_name -> inventory.v1.AddValkeyExporterParams + 64, // 129: inventory.v1.AddAgentRequest.rta_mongodb_agent:type_name -> inventory.v1.AddRTAMongoDBAgentParams + 1, // 130: inventory.v1.AddAgentResponse.pmm_agent:type_name -> inventory.v1.PMMAgent + 4, // 131: inventory.v1.AddAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter + 5, // 132: inventory.v1.AddAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 6, // 133: inventory.v1.AddAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter + 7, // 134: inventory.v1.AddAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter + 8, // 135: inventory.v1.AddAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter + 19, // 136: inventory.v1.AddAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter + 18, // 137: inventory.v1.AddAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter + 20, // 138: inventory.v1.AddAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter + 10, // 139: inventory.v1.AddAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 11, // 140: inventory.v1.AddAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent + 12, // 141: inventory.v1.AddAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent + 13, // 142: inventory.v1.AddAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent + 16, // 143: inventory.v1.AddAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 17, // 144: inventory.v1.AddAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent + 9, // 145: inventory.v1.AddAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter + 15, // 146: inventory.v1.AddAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent + 34, // 147: inventory.v1.ChangeAgentRequest.node_exporter:type_name -> inventory.v1.ChangeNodeExporterParams + 36, // 148: inventory.v1.ChangeAgentRequest.mysqld_exporter:type_name -> inventory.v1.ChangeMySQLdExporterParams + 38, // 149: inventory.v1.ChangeAgentRequest.mongodb_exporter:type_name -> inventory.v1.ChangeMongoDBExporterParams + 40, // 150: inventory.v1.ChangeAgentRequest.postgres_exporter:type_name -> inventory.v1.ChangePostgresExporterParams + 42, // 151: inventory.v1.ChangeAgentRequest.proxysql_exporter:type_name -> inventory.v1.ChangeProxySQLExporterParams + 58, // 152: inventory.v1.ChangeAgentRequest.external_exporter:type_name -> inventory.v1.ChangeExternalExporterParams + 56, // 153: inventory.v1.ChangeAgentRequest.rds_exporter:type_name -> inventory.v1.ChangeRDSExporterParams + 60, // 154: inventory.v1.ChangeAgentRequest.azure_database_exporter:type_name -> inventory.v1.ChangeAzureDatabaseExporterParams + 44, // 155: inventory.v1.ChangeAgentRequest.qan_mysql_perfschema_agent:type_name -> inventory.v1.ChangeQANMySQLPerfSchemaAgentParams + 46, // 156: inventory.v1.ChangeAgentRequest.qan_mysql_slowlog_agent:type_name -> inventory.v1.ChangeQANMySQLSlowlogAgentParams + 48, // 157: inventory.v1.ChangeAgentRequest.qan_mongodb_profiler_agent:type_name -> inventory.v1.ChangeQANMongoDBProfilerAgentParams + 50, // 158: inventory.v1.ChangeAgentRequest.qan_mongodb_mongolog_agent:type_name -> inventory.v1.ChangeQANMongoDBMongologAgentParams + 52, // 159: inventory.v1.ChangeAgentRequest.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams + 54, // 160: inventory.v1.ChangeAgentRequest.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams + 61, // 161: inventory.v1.ChangeAgentRequest.nomad_agent:type_name -> inventory.v1.ChangeNomadAgentParams + 63, // 162: inventory.v1.ChangeAgentRequest.valkey_exporter:type_name -> inventory.v1.ChangeValkeyExporterParams + 65, // 163: inventory.v1.ChangeAgentRequest.rta_mongodb_agent:type_name -> inventory.v1.ChangeRTAMongoDBAgentParams + 4, // 164: inventory.v1.ChangeAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter + 5, // 165: inventory.v1.ChangeAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 6, // 166: inventory.v1.ChangeAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter + 7, // 167: inventory.v1.ChangeAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter + 8, // 168: inventory.v1.ChangeAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter + 19, // 169: inventory.v1.ChangeAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter + 18, // 170: inventory.v1.ChangeAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter + 20, // 171: inventory.v1.ChangeAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter + 10, // 172: inventory.v1.ChangeAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 11, // 173: inventory.v1.ChangeAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent + 12, // 174: inventory.v1.ChangeAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent + 13, // 175: inventory.v1.ChangeAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent + 16, // 176: inventory.v1.ChangeAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 17, // 177: inventory.v1.ChangeAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent + 3, // 178: inventory.v1.ChangeAgentResponse.nomad_agent:type_name -> inventory.v1.NomadAgent + 9, // 179: inventory.v1.ChangeAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter + 15, // 180: inventory.v1.ChangeAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent + 88, // 181: inventory.v1.AddPMMAgentParams.custom_labels:type_name -> inventory.v1.AddPMMAgentParams.CustomLabelsEntry + 89, // 182: inventory.v1.AddNodeExporterParams.custom_labels:type_name -> inventory.v1.AddNodeExporterParams.CustomLabelsEntry + 109, // 183: inventory.v1.AddNodeExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 184: inventory.v1.AddNodeExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 185: inventory.v1.ChangeNodeExporterParams.custom_labels:type_name -> common.StringMap + 110, // 186: inventory.v1.ChangeNodeExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 187: inventory.v1.ChangeNodeExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 188: inventory.v1.ChangeNodeExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 90, // 189: inventory.v1.AddMySQLdExporterParams.custom_labels:type_name -> inventory.v1.AddMySQLdExporterParams.CustomLabelsEntry + 109, // 190: inventory.v1.AddMySQLdExporterParams.log_level:type_name -> inventory.v1.LogLevel + 91, // 191: inventory.v1.AddMySQLdExporterParams.extra_dsn_params:type_name -> inventory.v1.AddMySQLdExporterParams.ExtraDsnParamsEntry + 111, // 192: inventory.v1.AddMySQLdExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 193: inventory.v1.ChangeMySQLdExporterParams.custom_labels:type_name -> common.StringMap + 110, // 194: inventory.v1.ChangeMySQLdExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 195: inventory.v1.ChangeMySQLdExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 196: inventory.v1.ChangeMySQLdExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 92, // 197: inventory.v1.AddMongoDBExporterParams.custom_labels:type_name -> inventory.v1.AddMongoDBExporterParams.CustomLabelsEntry + 109, // 198: inventory.v1.AddMongoDBExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 199: inventory.v1.AddMongoDBExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 200: inventory.v1.ChangeMongoDBExporterParams.custom_labels:type_name -> common.StringMap + 110, // 201: inventory.v1.ChangeMongoDBExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 202: inventory.v1.ChangeMongoDBExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 203: inventory.v1.ChangeMongoDBExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 93, // 204: inventory.v1.AddPostgresExporterParams.custom_labels:type_name -> inventory.v1.AddPostgresExporterParams.CustomLabelsEntry + 109, // 205: inventory.v1.AddPostgresExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 206: inventory.v1.AddPostgresExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 207: inventory.v1.ChangePostgresExporterParams.custom_labels:type_name -> common.StringMap + 110, // 208: inventory.v1.ChangePostgresExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 209: inventory.v1.ChangePostgresExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 210: inventory.v1.ChangePostgresExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 94, // 211: inventory.v1.AddProxySQLExporterParams.custom_labels:type_name -> inventory.v1.AddProxySQLExporterParams.CustomLabelsEntry + 109, // 212: inventory.v1.AddProxySQLExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 213: inventory.v1.AddProxySQLExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 214: inventory.v1.ChangeProxySQLExporterParams.custom_labels:type_name -> common.StringMap + 110, // 215: inventory.v1.ChangeProxySQLExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 216: inventory.v1.ChangeProxySQLExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 217: inventory.v1.ChangeProxySQLExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 95, // 218: inventory.v1.AddQANMySQLPerfSchemaAgentParams.custom_labels:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams.CustomLabelsEntry + 109, // 219: inventory.v1.AddQANMySQLPerfSchemaAgentParams.log_level:type_name -> inventory.v1.LogLevel + 96, // 220: inventory.v1.AddQANMySQLPerfSchemaAgentParams.extra_dsn_params:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams.ExtraDsnParamsEntry + 112, // 221: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.custom_labels:type_name -> common.StringMap + 110, // 222: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 223: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.log_level:type_name -> inventory.v1.LogLevel + 97, // 224: inventory.v1.AddQANMySQLSlowlogAgentParams.custom_labels:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams.CustomLabelsEntry + 109, // 225: inventory.v1.AddQANMySQLSlowlogAgentParams.log_level:type_name -> inventory.v1.LogLevel + 98, // 226: inventory.v1.AddQANMySQLSlowlogAgentParams.extra_dsn_params:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams.ExtraDsnParamsEntry + 112, // 227: inventory.v1.ChangeQANMySQLSlowlogAgentParams.custom_labels:type_name -> common.StringMap + 110, // 228: inventory.v1.ChangeQANMySQLSlowlogAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 229: inventory.v1.ChangeQANMySQLSlowlogAgentParams.log_level:type_name -> inventory.v1.LogLevel + 99, // 230: inventory.v1.AddQANMongoDBProfilerAgentParams.custom_labels:type_name -> inventory.v1.AddQANMongoDBProfilerAgentParams.CustomLabelsEntry + 109, // 231: inventory.v1.AddQANMongoDBProfilerAgentParams.log_level:type_name -> inventory.v1.LogLevel + 112, // 232: inventory.v1.ChangeQANMongoDBProfilerAgentParams.custom_labels:type_name -> common.StringMap + 110, // 233: inventory.v1.ChangeQANMongoDBProfilerAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 234: inventory.v1.ChangeQANMongoDBProfilerAgentParams.log_level:type_name -> inventory.v1.LogLevel + 100, // 235: inventory.v1.AddQANMongoDBMongologAgentParams.custom_labels:type_name -> inventory.v1.AddQANMongoDBMongologAgentParams.CustomLabelsEntry + 109, // 236: inventory.v1.AddQANMongoDBMongologAgentParams.log_level:type_name -> inventory.v1.LogLevel + 112, // 237: inventory.v1.ChangeQANMongoDBMongologAgentParams.custom_labels:type_name -> common.StringMap + 110, // 238: inventory.v1.ChangeQANMongoDBMongologAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 239: inventory.v1.ChangeQANMongoDBMongologAgentParams.log_level:type_name -> inventory.v1.LogLevel + 101, // 240: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.custom_labels:type_name -> inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.CustomLabelsEntry + 109, // 241: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.log_level:type_name -> inventory.v1.LogLevel + 112, // 242: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.custom_labels:type_name -> common.StringMap + 110, // 243: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 244: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.log_level:type_name -> inventory.v1.LogLevel + 102, // 245: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.custom_labels:type_name -> inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.CustomLabelsEntry + 109, // 246: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.log_level:type_name -> inventory.v1.LogLevel + 112, // 247: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.custom_labels:type_name -> common.StringMap + 110, // 248: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 249: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.log_level:type_name -> inventory.v1.LogLevel + 103, // 250: inventory.v1.AddRDSExporterParams.custom_labels:type_name -> inventory.v1.AddRDSExporterParams.CustomLabelsEntry + 109, // 251: inventory.v1.AddRDSExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 252: inventory.v1.AddRDSExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 253: inventory.v1.ChangeRDSExporterParams.custom_labels:type_name -> common.StringMap + 110, // 254: inventory.v1.ChangeRDSExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 255: inventory.v1.ChangeRDSExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 256: inventory.v1.ChangeRDSExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 104, // 257: inventory.v1.AddExternalExporterParams.custom_labels:type_name -> inventory.v1.AddExternalExporterParams.CustomLabelsEntry + 111, // 258: inventory.v1.AddExternalExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 259: inventory.v1.ChangeExternalExporterParams.custom_labels:type_name -> common.StringMap + 110, // 260: inventory.v1.ChangeExternalExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 111, // 261: inventory.v1.ChangeExternalExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 105, // 262: inventory.v1.AddAzureDatabaseExporterParams.custom_labels:type_name -> inventory.v1.AddAzureDatabaseExporterParams.CustomLabelsEntry + 109, // 263: inventory.v1.AddAzureDatabaseExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 264: inventory.v1.AddAzureDatabaseExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 265: inventory.v1.ChangeAzureDatabaseExporterParams.custom_labels:type_name -> common.StringMap + 110, // 266: inventory.v1.ChangeAzureDatabaseExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 267: inventory.v1.ChangeAzureDatabaseExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 268: inventory.v1.ChangeAzureDatabaseExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 106, // 269: inventory.v1.AddValkeyExporterParams.custom_labels:type_name -> inventory.v1.AddValkeyExporterParams.CustomLabelsEntry + 109, // 270: inventory.v1.AddValkeyExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 271: inventory.v1.AddValkeyExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 272: inventory.v1.ChangeValkeyExporterParams.custom_labels:type_name -> common.StringMap + 110, // 273: inventory.v1.ChangeValkeyExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 274: inventory.v1.ChangeValkeyExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 275: inventory.v1.ChangeValkeyExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 107, // 276: inventory.v1.AddRTAMongoDBAgentParams.custom_labels:type_name -> inventory.v1.AddRTAMongoDBAgentParams.CustomLabelsEntry + 109, // 277: inventory.v1.AddRTAMongoDBAgentParams.log_level:type_name -> inventory.v1.LogLevel + 14, // 278: inventory.v1.AddRTAMongoDBAgentParams.rta_options:type_name -> inventory.v1.RTAOptions + 112, // 279: inventory.v1.ChangeRTAMongoDBAgentParams.custom_labels:type_name -> common.StringMap + 109, // 280: inventory.v1.ChangeRTAMongoDBAgentParams.log_level:type_name -> inventory.v1.LogLevel + 14, // 281: inventory.v1.ChangeRTAMongoDBAgentParams.rta_options:type_name -> inventory.v1.RTAOptions + 22, // 282: inventory.v1.AgentsService.ListAgents:input_type -> inventory.v1.ListAgentsRequest + 24, // 283: inventory.v1.AgentsService.GetAgent:input_type -> inventory.v1.GetAgentRequest + 26, // 284: inventory.v1.AgentsService.GetAgentLogs:input_type -> inventory.v1.GetAgentLogsRequest + 28, // 285: inventory.v1.AgentsService.AddAgent:input_type -> inventory.v1.AddAgentRequest + 30, // 286: inventory.v1.AgentsService.ChangeAgent:input_type -> inventory.v1.ChangeAgentRequest + 66, // 287: inventory.v1.AgentsService.RemoveAgent:input_type -> inventory.v1.RemoveAgentRequest + 23, // 288: inventory.v1.AgentsService.ListAgents:output_type -> inventory.v1.ListAgentsResponse + 25, // 289: inventory.v1.AgentsService.GetAgent:output_type -> inventory.v1.GetAgentResponse + 27, // 290: inventory.v1.AgentsService.GetAgentLogs:output_type -> inventory.v1.GetAgentLogsResponse + 29, // 291: inventory.v1.AgentsService.AddAgent:output_type -> inventory.v1.AddAgentResponse + 31, // 292: inventory.v1.AgentsService.ChangeAgent:output_type -> inventory.v1.ChangeAgentResponse + 67, // 293: inventory.v1.AgentsService.RemoveAgent:output_type -> inventory.v1.RemoveAgentResponse + 288, // [288:294] is the sub-list for method output_type + 282, // [282:288] is the sub-list for method input_type + 282, // [282:282] is the sub-list for extension type_name + 282, // [282:282] is the sub-list for extension extendee + 0, // [0:282] is the sub-list for field type_name } func init() { file_inventory_v1_agents_proto_init() } diff --git a/api/inventory/v1/agents.pb.validate.go b/api/inventory/v1/agents.pb.validate.go index 7e45f186227..136152848f2 100644 --- a/api/inventory/v1/agents.pb.validate.go +++ b/api/inventory/v1/agents.pb.validate.go @@ -437,6 +437,35 @@ func (m *NodeExporter) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetConnectionTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return NodeExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return NodeExporterMultiError(errors) } @@ -607,6 +636,35 @@ func (m *MySQLdExporter) validate(all bool) error { // no validation rules for ExtraDsnParams + if all { + switch v := interface{}(m.GetConnectionTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MySQLdExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MySQLdExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MySQLdExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return MySQLdExporterMultiError(errors) } @@ -768,6 +826,35 @@ func (m *MongoDBExporter) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetConnectionTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MongoDBExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MongoDBExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MongoDBExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return MongoDBExporterMultiError(errors) } @@ -929,6 +1016,35 @@ func (m *PostgresExporter) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetConnectionTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, PostgresExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, PostgresExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PostgresExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return PostgresExporterMultiError(errors) } @@ -1086,6 +1202,35 @@ func (m *ProxySQLExporter) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetConnectionTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ProxySQLExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ProxySQLExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ProxySQLExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return ProxySQLExporterMultiError(errors) } @@ -1241,6 +1386,35 @@ func (m *ValkeyExporter) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetConnectionTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ValkeyExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ValkeyExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ValkeyExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return ValkeyExporterMultiError(errors) } @@ -2466,6 +2640,35 @@ func (m *RDSExporter) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetConnectionTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RDSExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RDSExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RDSExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return RDSExporterMultiError(errors) } @@ -2620,6 +2823,35 @@ func (m *ExternalExporter) validate(all bool) error { // no validation rules for Status + if all { + switch v := interface{}(m.GetConnectionTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ExternalExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ExternalExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExternalExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return ExternalExporterMultiError(errors) } @@ -2773,6 +3005,35 @@ func (m *AzureDatabaseExporter) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetConnectionTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AzureDatabaseExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AzureDatabaseExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AzureDatabaseExporterValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AzureDatabaseExporterMultiError(errors) } @@ -8474,6 +8735,36 @@ func (m *AddNodeExporterParams) validate(all bool) error { // no validation rules for ExposeExporter + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddNodeExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddNodeExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddNodeExporterParamsMultiError(errors) } @@ -8605,14 +8896,44 @@ func (m *ChangeNodeExporterParams) validate(all bool) error { } } - if m.Enable != nil { - // no validation rules for Enable - } + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = ChangeNodeExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { - if m.CustomLabels != nil { - if all { - switch v := interface{}(m.GetCustomLabels()).(type) { - case interface{ ValidateAll() error }: + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := ChangeNodeExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + + if m.Enable != nil { + // no validation rules for Enable + } + + if m.CustomLabels != nil { + if all { + switch v := interface{}(m.GetCustomLabels()).(type) { + case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { errors = append(errors, ChangeNodeExporterParamsValidationError{ field: "CustomLabels", @@ -8815,6 +9136,36 @@ func (m *AddMySQLdExporterParams) validate(all bool) error { // no validation rules for ExtraDsnParams + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddMySQLdExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddMySQLdExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddMySQLdExporterParamsMultiError(errors) } @@ -8946,6 +9297,36 @@ func (m *ChangeMySQLdExporterParams) validate(all bool) error { } } + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = ChangeMySQLdExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := ChangeMySQLdExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -9191,6 +9572,36 @@ func (m *AddMongoDBExporterParams) validate(all bool) error { // no validation rules for EnableAllCollectors + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddMongoDBExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddMongoDBExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddMongoDBExporterParamsMultiError(errors) } @@ -9322,6 +9733,36 @@ func (m *ChangeMongoDBExporterParams) validate(all bool) error { } } + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = ChangeMongoDBExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := ChangeMongoDBExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -9585,6 +10026,36 @@ func (m *AddPostgresExporterParams) validate(all bool) error { // no validation rules for MaxExporterConnections + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddPostgresExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddPostgresExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddPostgresExporterParamsMultiError(errors) } @@ -9716,6 +10187,36 @@ func (m *ChangePostgresExporterParams) validate(all bool) error { } } + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = ChangePostgresExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := ChangePostgresExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -9961,6 +10462,36 @@ func (m *AddProxySQLExporterParams) validate(all bool) error { // no validation rules for ExposeExporter + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddProxySQLExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddProxySQLExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddProxySQLExporterParamsMultiError(errors) } @@ -10092,6 +10623,36 @@ func (m *ChangeProxySQLExporterParams) validate(all bool) error { } } + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = ChangeProxySQLExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := ChangeProxySQLExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -12570,6 +13131,36 @@ func (m *AddRDSExporterParams) validate(all bool) error { // no validation rules for LogLevel + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddRDSExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddRDSExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddRDSExporterParamsMultiError(errors) } @@ -12701,6 +13292,36 @@ func (m *ChangeRDSExporterParams) validate(all bool) error { } } + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = ChangeRDSExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := ChangeRDSExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -12900,6 +13521,36 @@ func (m *AddExternalExporterParams) validate(all bool) error { // no validation rules for TlsSkipVerify + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddExternalExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddExternalExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddExternalExporterParamsMultiError(errors) } @@ -13031,6 +13682,36 @@ func (m *ChangeExternalExporterParams) validate(all bool) error { } } + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = ChangeExternalExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := ChangeExternalExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -13240,6 +13921,36 @@ func (m *AddAzureDatabaseExporterParams) validate(all bool) error { // no validation rules for LogLevel + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddAzureDatabaseExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddAzureDatabaseExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddAzureDatabaseExporterParamsMultiError(errors) } @@ -13373,6 +14084,36 @@ func (m *ChangeAzureDatabaseExporterParams) validate(all bool) error { } } + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = ChangeAzureDatabaseExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := ChangeAzureDatabaseExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -13704,6 +14445,36 @@ func (m *AddValkeyExporterParams) validate(all bool) error { // no validation rules for LogLevel + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddValkeyExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddValkeyExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddValkeyExporterParamsMultiError(errors) } @@ -13843,6 +14614,36 @@ func (m *ChangeValkeyExporterParams) validate(all bool) error { } } + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = ChangeValkeyExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := ChangeValkeyExporterParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if m.Enable != nil { // no validation rules for Enable } diff --git a/api/inventory/v1/agents.proto b/api/inventory/v1/agents.proto index 05cd9b11959..0084ff84b87 100644 --- a/api/inventory/v1/agents.proto +++ b/api/inventory/v1/agents.proto @@ -129,6 +129,8 @@ message NodeExporter { bool expose_exporter = 14; // Metrics resolution for this agent. common.MetricsResolutions metrics_resolutions = 15; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 16; } // MySQLdExporter runs on Generic or Container Node and exposes MySQL Service metrics. @@ -186,6 +188,8 @@ message MySQLdExporter { common.MetricsResolutions metrics_resolutions = 26; // Extra DSN parameters for MySQL connection. map extra_dsn_params = 27; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 28; } // MongoDBExporter runs on Generic or Container Node and exposes MongoDB Service metrics. @@ -236,6 +240,8 @@ message MongoDBExporter { common.MetricsResolutions metrics_resolutions = 28; // Environment variable names passed to the exporter. repeated string environment_variable_names = 29; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 30; } // PostgresExporter runs on Generic or Container Node and exposes PostgreSQL Service metrics. @@ -281,6 +287,8 @@ message PostgresExporter { int32 max_exporter_connections = 26; // Metrics resolution for this agent. common.MetricsResolutions metrics_resolutions = 27; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 28; } // ProxySQLExporter runs on Generic or Container Node and exposes ProxySQL Service metrics. @@ -322,6 +330,8 @@ message ProxySQLExporter { bool expose_exporter = 24; // Metrics resolution for this agent. common.MetricsResolutions metrics_resolutions = 25; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 26; } // ValkeyExporter runs on Generic or Container Node and exposes Valkey Service metrics. @@ -361,6 +371,8 @@ message ValkeyExporter { bool expose_exporter = 23; // Metrics resolution for this agent. common.MetricsResolutions metrics_resolutions = 24; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 25; } // QANMySQLPerfSchemaAgent runs within pmm-agent and sends MySQL Query Analytics data to the PMM Server. @@ -677,6 +689,8 @@ message RDSExporter { int32 auto_discovery_limit = 25; // Metrics resolution for this agent. common.MetricsResolutions metrics_resolutions = 26; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 27; } // ExternalExporter runs on any Node type, including Remote Node. @@ -709,6 +723,8 @@ message ExternalExporter { bool tls_skip_verify = 13; // Actual Agent status. AgentStatus status = 14; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 15; } // AzureDatabaseExporter runs on Generic or Container Node and exposes RemoteAzure Node metrics. @@ -744,6 +760,8 @@ message AzureDatabaseExporter { LogLevel log_level = 14; // Metrics resolution for this agent. common.MetricsResolutions metrics_resolutions = 15; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 16; } // ChangeCommonAgentParams contains parameters that can be changed for all Agents. @@ -963,6 +981,10 @@ message AddNodeExporterParams { LogLevel log_level = 5; // Expose the node_exporter process on all public interfaces bool expose_exporter = 6; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 7 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message ChangeNodeExporterParams { @@ -980,6 +1002,10 @@ message ChangeNodeExporterParams { optional LogLevel log_level = 6; // Expose the node_exporter process on all public interfaces. optional bool expose_exporter = 7; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 8 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } // Add/Change MySQLdExporter @@ -1023,6 +1049,10 @@ message AddMySQLdExporterParams { bool expose_exporter = 17; // Extra DSN parameters for MySQL connection. map extra_dsn_params = 18; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 19 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message ChangeMySQLdExporterParams { @@ -1060,6 +1090,10 @@ message ChangeMySQLdExporterParams { optional LogLevel log_level = 16; // Optionally expose the exporter process on all public interfaces. optional bool expose_exporter = 17; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 18 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } // Add/Change MongoDBExporter @@ -1113,6 +1147,10 @@ message AddMongoDBExporterParams { repeated string environment_variable_names = 21; // Enable all collectors. bool enable_all_collectors = 22; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 23 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message ChangeMongoDBExporterParams { @@ -1158,6 +1196,10 @@ message ChangeMongoDBExporterParams { optional LogLevel log_level = 20; // Optionally expose the exporter process on all public interfaces. optional bool expose_exporter = 21; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 22 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } // Add/Change PostgresExporter @@ -1199,6 +1241,10 @@ message AddPostgresExporterParams { bool expose_exporter = 17; // Maximum number of connections that exporter can open to the database instance. int32 max_exporter_connections = 18; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 19 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message ChangePostgresExporterParams { @@ -1238,6 +1284,10 @@ message ChangePostgresExporterParams { optional bool expose_exporter = 17; // Maximum number of connections that exporter can open to the database instance. optional int32 max_exporter_connections = 18; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 19 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } // Add/Change ProxySQLExporter @@ -1269,6 +1319,10 @@ message AddProxySQLExporterParams { LogLevel log_level = 12; // Optionally expose the exporter process on all public interfaces bool expose_exporter = 13; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 14 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message ChangeProxySQLExporterParams { @@ -1296,6 +1350,10 @@ message ChangeProxySQLExporterParams { optional LogLevel log_level = 11; // Optionally expose the exporter process on all public interfaces. optional bool expose_exporter = 12; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 13 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } // Add/Change QANMySQLPerfSchemaAgent @@ -1742,6 +1800,10 @@ message AddRDSExporterParams { bool push_metrics = 9; // Log level for exporter. LogLevel log_level = 10; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 11 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message ChangeRDSExporterParams { @@ -1763,6 +1825,10 @@ message ChangeRDSExporterParams { optional bool disable_enhanced_metrics = 8; // Log level for exporter. optional LogLevel log_level = 9; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 10 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } // Add/Change ExternalExporter @@ -1791,6 +1857,10 @@ message AddExternalExporterParams { bool push_metrics = 11; // Skip TLS certificate and hostname verification. bool tls_skip_verify = 12; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 13 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message ChangeExternalExporterParams { @@ -1810,6 +1880,10 @@ message ChangeExternalExporterParams { optional string metrics_path = 7; // Listen port for scraping metrics. optional uint32 listen_port = 8; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 9 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } // Add/Change AzureDatabaseExporter @@ -1839,6 +1913,10 @@ message AddAzureDatabaseExporterParams { bool push_metrics = 11; // Log level for exporter. LogLevel log_level = 12; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 13 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message ChangeAzureDatabaseExporterParams { @@ -1862,6 +1940,10 @@ message ChangeAzureDatabaseExporterParams { optional string azure_resource_group = 9; // Log level for exporter. optional LogLevel log_level = 11; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 12 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message ChangeNomadAgentParams { @@ -1904,6 +1986,10 @@ message AddValkeyExporterParams { bool expose_exporter = 15; // Log level for exporter. LogLevel log_level = 16; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 17 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message ChangeValkeyExporterParams { @@ -1937,6 +2023,10 @@ message ChangeValkeyExporterParams { optional bool expose_exporter = 14; // Log level for exporter. optional LogLevel log_level = 15; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 16 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } // Add/Change RTAMongoDBAgent diff --git a/api/inventory/v1/json/client/agents_service/add_agent_responses.go b/api/inventory/v1/json/client/agents_service/add_agent_responses.go index b11c2f86fc3..bc1753364b5 100644 --- a/api/inventory/v1/json/client/agents_service/add_agent_responses.go +++ b/api/inventory/v1/json/client/agents_service/add_agent_responses.go @@ -2529,6 +2529,9 @@ type AddAgentOKBodyAzureDatabaseExporter struct { // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddAgentOKBodyAzureDatabaseExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2844,6 +2847,9 @@ type AddAgentOKBodyExternalExporter struct { // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] Status *string `json:"status,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddAgentOKBodyExternalExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3123,6 +3129,9 @@ type AddAgentOKBodyMongodbExporter struct { // Environment variable names passed to the exporter. EnvironmentVariableNames []string `json:"environment_variable_names"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddAgentOKBodyMongodbExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3470,6 +3479,9 @@ type AddAgentOKBodyMysqldExporter struct { // Extra DSN parameters for MySQL connection. ExtraDsnParams map[string]string `json:"extra_dsn_params,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddAgentOKBodyMysqldExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3782,6 +3794,9 @@ type AddAgentOKBodyNodeExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddAgentOKBodyNodeExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -4161,6 +4176,9 @@ type AddAgentOKBodyPostgresExporter struct { // Maximum number of connections that exporter can open to the database instance. MaxExporterConnections int32 `json:"max_exporter_connections,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddAgentOKBodyPostgresExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -4485,6 +4503,9 @@ type AddAgentOKBodyProxysqlExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddAgentOKBodyProxysqlExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -6108,6 +6129,9 @@ type AddAgentOKBodyRDSExporter struct { // Limit of databases for auto-discovery. AutoDiscoveryLimit int32 `json:"auto_discovery_limit,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddAgentOKBodyRDSExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -6729,6 +6753,9 @@ type AddAgentOKBodyValkeyExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddAgentOKBodyValkeyExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -6976,6 +7003,9 @@ type AddAgentParamsBodyAzureDatabaseExporter struct { // - LOG_LEVEL_UNSPECIFIED: Auto // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` + + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add agent params body azure database exporter @@ -7103,6 +7133,9 @@ type AddAgentParamsBodyExternalExporter struct { // Skip TLS certificate and hostname verification. TLSSkipVerify bool `json:"tls_skip_verify,omitempty"` + + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add agent params body external exporter @@ -7210,6 +7243,9 @@ type AddAgentParamsBodyMongodbExporter struct { // Enable all collectors. EnableAllCollectors bool `json:"enable_all_collectors,omitempty"` + + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add agent params body mongodb exporter @@ -7366,6 +7402,9 @@ type AddAgentParamsBodyMysqldExporter struct { // Extra DSN parameters for MySQL connection. ExtraDsnParams map[string]string `json:"extra_dsn_params,omitempty"` + + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add agent params body mysqld exporter @@ -7484,6 +7523,9 @@ type AddAgentParamsBodyNodeExporter struct { // Expose the node_exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add agent params body node exporter @@ -7678,6 +7720,9 @@ type AddAgentParamsBodyPostgresExporter struct { // Maximum number of connections that exporter can open to the database instance. MaxExporterConnections int32 `json:"max_exporter_connections,omitempty"` + + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add agent params body postgres exporter @@ -7817,6 +7862,9 @@ type AddAgentParamsBodyProxysqlExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add agent params body proxysql exporter @@ -8828,6 +8876,9 @@ type AddAgentParamsBodyRDSExporter struct { // - LOG_LEVEL_UNSPECIFIED: Auto // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` + + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add agent params body RDS exporter @@ -9218,6 +9269,9 @@ type AddAgentParamsBodyValkeyExporter struct { // - LOG_LEVEL_UNSPECIFIED: Auto // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` + + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add agent params body valkey exporter diff --git a/api/inventory/v1/json/client/agents_service/change_agent_responses.go b/api/inventory/v1/json/client/agents_service/change_agent_responses.go index efd1d7e7a74..b1387a84fa4 100644 --- a/api/inventory/v1/json/client/agents_service/change_agent_responses.go +++ b/api/inventory/v1/json/client/agents_service/change_agent_responses.go @@ -2529,6 +2529,9 @@ type ChangeAgentOKBodyAzureDatabaseExporter struct { // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ChangeAgentOKBodyAzureDatabaseExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2844,6 +2847,9 @@ type ChangeAgentOKBodyExternalExporter struct { // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] Status *string `json:"status,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ChangeAgentOKBodyExternalExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3123,6 +3129,9 @@ type ChangeAgentOKBodyMongodbExporter struct { // Environment variable names passed to the exporter. EnvironmentVariableNames []string `json:"environment_variable_names"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ChangeAgentOKBodyMongodbExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3470,6 +3479,9 @@ type ChangeAgentOKBodyMysqldExporter struct { // Extra DSN parameters for MySQL connection. ExtraDsnParams map[string]string `json:"extra_dsn_params,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ChangeAgentOKBodyMysqldExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3782,6 +3794,9 @@ type ChangeAgentOKBodyNodeExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ChangeAgentOKBodyNodeExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -4242,6 +4257,9 @@ type ChangeAgentOKBodyPostgresExporter struct { // Maximum number of connections that exporter can open to the database instance. MaxExporterConnections int32 `json:"max_exporter_connections,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ChangeAgentOKBodyPostgresExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -4566,6 +4584,9 @@ type ChangeAgentOKBodyProxysqlExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ChangeAgentOKBodyProxysqlExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -6189,6 +6210,9 @@ type ChangeAgentOKBodyRDSExporter struct { // Limit of databases for auto-discovery. AutoDiscoveryLimit int32 `json:"auto_discovery_limit,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ChangeAgentOKBodyRDSExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -6810,6 +6834,9 @@ type ChangeAgentOKBodyValkeyExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ChangeAgentOKBodyValkeyExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -7046,6 +7073,9 @@ type ChangeAgentParamsBodyAzureDatabaseExporter struct { // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // custom labels CustomLabels *ChangeAgentParamsBodyAzureDatabaseExporterCustomLabels `json:"custom_labels,omitempty"` @@ -7362,6 +7392,9 @@ type ChangeAgentParamsBodyExternalExporter struct { // Listen port for scraping metrics. ListenPort *int64 `json:"listen_port,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // custom labels CustomLabels *ChangeAgentParamsBodyExternalExporterCustomLabels `json:"custom_labels,omitempty"` @@ -7662,6 +7695,9 @@ type ChangeAgentParamsBodyMongodbExporter struct { // Optionally expose the exporter process on all public interfaces. ExposeExporter *bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // custom labels CustomLabels *ChangeAgentParamsBodyMongodbExporterCustomLabels `json:"custom_labels,omitempty"` @@ -8008,6 +8044,9 @@ type ChangeAgentParamsBodyMysqldExporter struct { // Optionally expose the exporter process on all public interfaces. ExposeExporter *bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // custom labels CustomLabels *ChangeAgentParamsBodyMysqldExporterCustomLabels `json:"custom_labels,omitempty"` @@ -8324,6 +8363,9 @@ type ChangeAgentParamsBodyNodeExporter struct { // Expose the node_exporter process on all public interfaces. ExposeExporter *bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // custom labels CustomLabels *ChangeAgentParamsBodyNodeExporterCustomLabels `json:"custom_labels,omitempty"` @@ -8710,6 +8752,9 @@ type ChangeAgentParamsBodyPostgresExporter struct { // Maximum number of connections that exporter can open to the database instance. MaxExporterConnections *int32 `json:"max_exporter_connections,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // custom labels CustomLabels *ChangeAgentParamsBodyPostgresExporterCustomLabels `json:"custom_labels,omitempty"` @@ -9041,6 +9086,9 @@ type ChangeAgentParamsBodyProxysqlExporter struct { // Optionally expose the exporter process on all public interfaces. ExposeExporter *bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // custom labels CustomLabels *ChangeAgentParamsBodyProxysqlExporterCustomLabels `json:"custom_labels,omitempty"` @@ -11409,6 +11457,9 @@ type ChangeAgentParamsBodyRDSExporter struct { // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // custom labels CustomLabels *ChangeAgentParamsBodyRDSExporterCustomLabels `json:"custom_labels,omitempty"` @@ -12074,6 +12125,9 @@ type ChangeAgentParamsBodyValkeyExporter struct { // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // custom labels CustomLabels *ChangeAgentParamsBodyValkeyExporterCustomLabels `json:"custom_labels,omitempty"` diff --git a/api/inventory/v1/json/client/agents_service/get_agent_responses.go b/api/inventory/v1/json/client/agents_service/get_agent_responses.go index f0befcd1b48..b933f9d8c3f 100644 --- a/api/inventory/v1/json/client/agents_service/get_agent_responses.go +++ b/api/inventory/v1/json/client/agents_service/get_agent_responses.go @@ -1615,6 +1615,9 @@ type GetAgentOKBodyAzureDatabaseExporter struct { // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *GetAgentOKBodyAzureDatabaseExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -1930,6 +1933,9 @@ type GetAgentOKBodyExternalExporter struct { // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] Status *string `json:"status,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *GetAgentOKBodyExternalExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2209,6 +2215,9 @@ type GetAgentOKBodyMongodbExporter struct { // Environment variable names passed to the exporter. EnvironmentVariableNames []string `json:"environment_variable_names"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *GetAgentOKBodyMongodbExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2556,6 +2565,9 @@ type GetAgentOKBodyMysqldExporter struct { // Extra DSN parameters for MySQL connection. ExtraDsnParams map[string]string `json:"extra_dsn_params,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *GetAgentOKBodyMysqldExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2868,6 +2880,9 @@ type GetAgentOKBodyNodeExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *GetAgentOKBodyNodeExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3377,6 +3392,9 @@ type GetAgentOKBodyPostgresExporter struct { // Maximum number of connections that exporter can open to the database instance. MaxExporterConnections int32 `json:"max_exporter_connections,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *GetAgentOKBodyPostgresExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3701,6 +3719,9 @@ type GetAgentOKBodyProxysqlExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *GetAgentOKBodyProxysqlExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -5324,6 +5345,9 @@ type GetAgentOKBodyRDSExporter struct { // Limit of databases for auto-discovery. AutoDiscoveryLimit int32 `json:"auto_discovery_limit,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *GetAgentOKBodyRDSExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -5945,6 +5969,9 @@ type GetAgentOKBodyValkeyExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *GetAgentOKBodyValkeyExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } diff --git a/api/inventory/v1/json/client/agents_service/list_agents_responses.go b/api/inventory/v1/json/client/agents_service/list_agents_responses.go index 33502ed0d27..734c5395d01 100644 --- a/api/inventory/v1/json/client/agents_service/list_agents_responses.go +++ b/api/inventory/v1/json/client/agents_service/list_agents_responses.go @@ -1786,6 +1786,9 @@ type ListAgentsOKBodyAzureDatabaseExporterItems0 struct { // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ListAgentsOKBodyAzureDatabaseExporterItems0MetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2101,6 +2104,9 @@ type ListAgentsOKBodyExternalExporterItems0 struct { // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] Status *string `json:"status,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ListAgentsOKBodyExternalExporterItems0MetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2380,6 +2386,9 @@ type ListAgentsOKBodyMongodbExporterItems0 struct { // Environment variable names passed to the exporter. EnvironmentVariableNames []string `json:"environment_variable_names"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ListAgentsOKBodyMongodbExporterItems0MetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2727,6 +2736,9 @@ type ListAgentsOKBodyMysqldExporterItems0 struct { // Extra DSN parameters for MySQL connection. ExtraDsnParams map[string]string `json:"extra_dsn_params,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ListAgentsOKBodyMysqldExporterItems0MetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3039,6 +3051,9 @@ type ListAgentsOKBodyNodeExporterItems0 struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ListAgentsOKBodyNodeExporterItems0MetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3548,6 +3563,9 @@ type ListAgentsOKBodyPostgresExporterItems0 struct { // Maximum number of connections that exporter can open to the database instance. MaxExporterConnections int32 `json:"max_exporter_connections,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ListAgentsOKBodyPostgresExporterItems0MetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3872,6 +3890,9 @@ type ListAgentsOKBodyProxysqlExporterItems0 struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ListAgentsOKBodyProxysqlExporterItems0MetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -5495,6 +5516,9 @@ type ListAgentsOKBodyRDSExporterItems0 struct { // Limit of databases for auto-discovery. AutoDiscoveryLimit int32 `json:"auto_discovery_limit,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ListAgentsOKBodyRDSExporterItems0MetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -6245,6 +6269,9 @@ type ListAgentsOKBodyValkeyExporterItems0 struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *ListAgentsOKBodyValkeyExporterItems0MetricsResolutions `json:"metrics_resolutions,omitempty"` } diff --git a/api/inventory/v1/json/v1.json b/api/inventory/v1/json/v1.json index 18b9a0b485c..05a8bbccc16 100644 --- a/api/inventory/v1/json/v1.json +++ b/api/inventory/v1/json/v1.json @@ -273,6 +273,11 @@ } }, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } } }, @@ -448,6 +453,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } } }, @@ -610,6 +620,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } } }, @@ -757,6 +772,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } } }, @@ -892,6 +912,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } } }, @@ -1661,6 +1686,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } } }, @@ -1789,6 +1819,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } } }, @@ -1906,6 +1941,11 @@ } }, "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } } }, @@ -2077,6 +2117,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } } }, @@ -2296,6 +2341,11 @@ "type": "boolean", "title": "Expose the node_exporter process on all public interfaces", "x-order": 5 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 6 } }, "x-order": 1 @@ -2412,6 +2462,11 @@ "type": "string" }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 2 @@ -2551,6 +2606,11 @@ "description": "Enable all collectors.", "type": "boolean", "x-order": 21 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 22 } }, "x-order": 3 @@ -2665,6 +2725,11 @@ "type": "integer", "format": "int32", "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 4 @@ -2752,6 +2817,11 @@ "type": "boolean", "title": "Optionally expose the exporter process on all public interfaces", "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 5 @@ -2812,6 +2882,11 @@ "description": "Skip TLS certificate and hostname verification.", "type": "boolean", "x-order": 9 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 10 } }, "x-order": 6 @@ -2881,6 +2956,11 @@ "LOG_LEVEL_DEBUG" ], "x-order": 9 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 10 } }, "x-order": 7 @@ -2960,6 +3040,11 @@ "LOG_LEVEL_DEBUG" ], "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 8 @@ -3649,6 +3734,11 @@ "LOG_LEVEL_DEBUG" ], "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 15 @@ -3902,6 +3992,11 @@ } }, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 1 @@ -4074,6 +4169,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 2 @@ -4233,6 +4333,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 3 @@ -4377,6 +4482,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 4 @@ -4509,6 +4619,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 5 @@ -4618,6 +4733,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 6 @@ -4743,6 +4863,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 7 @@ -4857,6 +4982,11 @@ } }, "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 8 @@ -5613,6 +5743,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -5957,6 +6092,11 @@ } }, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 2 @@ -6129,6 +6269,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 3 @@ -6288,6 +6433,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 4 @@ -6432,6 +6582,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 5 @@ -6564,6 +6719,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 6 @@ -7312,6 +7472,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 13 @@ -7437,6 +7602,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 14 @@ -7551,6 +7721,11 @@ } }, "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 15 @@ -7716,6 +7891,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 17 @@ -7951,6 +8131,11 @@ "type": "boolean", "x-nullable": true, "x-order": 6 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 7 } }, "x-order": 0 @@ -8097,6 +8282,11 @@ "type": "boolean", "x-nullable": true, "x-order": 16 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 17 } }, "x-order": 1 @@ -8269,6 +8459,11 @@ "type": "boolean", "x-nullable": true, "x-order": 20 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 21 } }, "x-order": 2 @@ -8422,6 +8617,11 @@ "format": "int32", "x-nullable": true, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 3 @@ -8537,6 +8737,11 @@ "type": "boolean", "x-nullable": true, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 4 @@ -8617,6 +8822,11 @@ "format": "int64", "x-nullable": true, "x-order": 7 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 8 } }, "x-order": 5 @@ -8712,6 +8922,11 @@ ], "x-nullable": true, "x-order": 8 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 9 } }, "x-order": 6 @@ -8813,6 +9028,11 @@ ], "x-nullable": true, "x-order": 9 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 10 } }, "x-order": 7 @@ -9763,6 +9983,11 @@ ], "x-nullable": true, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -9989,6 +10214,11 @@ } }, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 0 @@ -10161,6 +10391,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 1 @@ -10320,6 +10555,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 2 @@ -10464,6 +10704,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 3 @@ -10596,6 +10841,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 4 @@ -10705,6 +10955,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 5 @@ -10830,6 +11085,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 6 @@ -10944,6 +11204,11 @@ } }, "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 7 @@ -11748,6 +12013,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 diff --git a/api/management/v1/agent.pb.go b/api/management/v1/agent.pb.go index 8225cca8957..d2a3e28d084 100644 --- a/api/management/v1/agent.pb.go +++ b/api/management/v1/agent.pb.go @@ -13,6 +13,7 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" v1 "github.com/percona/pmm/api/inventory/v1" @@ -171,9 +172,11 @@ type UniversalAgent struct { // Options for connecting to Valkey. ValkeyOptions *UniversalAgent_ValkeyOptions `protobuf:"bytes,41,opt,name=valkey_options,json=valkeyOptions,proto3" json:"valkey_options,omitempty"` // Real-Time Analytics options. - RtaOptions *v1.RTAOptions `protobuf:"bytes,42,opt,name=rta_options,json=rtaOptions,proto3" json:"rta_options,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + RtaOptions *v1.RTAOptions `protobuf:"bytes,42,opt,name=rta_options,json=rtaOptions,proto3" json:"rta_options,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,43,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UniversalAgent) Reset() { @@ -500,6 +503,13 @@ func (x *UniversalAgent) GetRtaOptions() *v1.RTAOptions { return nil } +func (x *UniversalAgent) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ListAgentsRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // Return only Agents that relate to a specific ServiceID. @@ -1089,7 +1099,7 @@ var File_management_v1_agent_proto protoreflect.FileDescriptor const file_management_v1_agent_proto_rawDesc = "" + "\n" + - "\x19management/v1/agent.proto\x12\rmanagement.v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\"\xca\x18\n" + + "\x19management/v1/agent.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\"\x94\x19\n" + "\x0eUniversalAgent\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x121\n" + "\x15is_agent_password_set\x18\x02 \x01(\bR\x12isAgentPasswordSet\x12\x1d\n" + @@ -1141,7 +1151,8 @@ const file_management_v1_agent_proto_rawDesc = "" + "\x0fexpose_exporter\x18( \x01(\bR\x0eexposeExporter\x12R\n" + "\x0evalkey_options\x18) \x01(\v2+.management.v1.UniversalAgent.ValkeyOptionsR\rvalkeyOptions\x129\n" + "\vrta_options\x18* \x01(\v2\x18.inventory.v1.RTAOptionsR\n" + - "rtaOptions\x1a\xe0\x01\n" + + "rtaOptions\x12H\n" + + "\x12connection_timeout\x18+ \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a\xe0\x01\n" + "\fMySQLOptions\x12#\n" + "\x0eis_tls_key_set\x18\x01 \x01(\bR\visTlsKeySet\x12h\n" + "\x10extra_dsn_params\x18\x02 \x03(\v2>.management.v1.UniversalAgent.MySQLOptions.ExtraDsnParamsEntryR\x0eextraDsnParams\x1aA\n" + @@ -1226,6 +1237,7 @@ var ( (*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp (v1.LogLevel)(0), // 15: inventory.v1.LogLevel (*v1.RTAOptions)(nil), // 16: inventory.v1.RTAOptions + (*durationpb.Duration)(nil), // 17: google.protobuf.Duration } ) @@ -1240,15 +1252,16 @@ var file_management_v1_agent_proto_depIdxs = []int32{ 14, // 7: management.v1.UniversalAgent.updated_at:type_name -> google.protobuf.Timestamp 11, // 8: management.v1.UniversalAgent.valkey_options:type_name -> management.v1.UniversalAgent.ValkeyOptions 16, // 9: management.v1.UniversalAgent.rta_options:type_name -> inventory.v1.RTAOptions - 1, // 10: management.v1.ListAgentsResponse.agents:type_name -> management.v1.UniversalAgent - 0, // 11: management.v1.AgentVersions.severity:type_name -> management.v1.UpdateSeverity - 4, // 12: management.v1.ListAgentVersionsResponse.agent_versions:type_name -> management.v1.AgentVersions - 13, // 13: management.v1.UniversalAgent.MySQLOptions.extra_dsn_params:type_name -> management.v1.UniversalAgent.MySQLOptions.ExtraDsnParamsEntry - 14, // [14:14] is the sub-list for method output_type - 14, // [14:14] is the sub-list for method input_type - 14, // [14:14] is the sub-list for extension type_name - 14, // [14:14] is the sub-list for extension extendee - 0, // [0:14] is the sub-list for field type_name + 17, // 10: management.v1.UniversalAgent.connection_timeout:type_name -> google.protobuf.Duration + 1, // 11: management.v1.ListAgentsResponse.agents:type_name -> management.v1.UniversalAgent + 0, // 12: management.v1.AgentVersions.severity:type_name -> management.v1.UpdateSeverity + 4, // 13: management.v1.ListAgentVersionsResponse.agent_versions:type_name -> management.v1.AgentVersions + 13, // 14: management.v1.UniversalAgent.MySQLOptions.extra_dsn_params:type_name -> management.v1.UniversalAgent.MySQLOptions.ExtraDsnParamsEntry + 15, // [15:15] is the sub-list for method output_type + 15, // [15:15] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_management_v1_agent_proto_init() } diff --git a/api/management/v1/agent.pb.validate.go b/api/management/v1/agent.pb.validate.go index a278a0a189b..47de65d289c 100644 --- a/api/management/v1/agent.pb.validate.go +++ b/api/management/v1/agent.pb.validate.go @@ -359,6 +359,35 @@ func (m *UniversalAgent) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetConnectionTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UniversalAgentValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UniversalAgentValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UniversalAgentValidationError{ + field: "ConnectionTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return UniversalAgentMultiError(errors) } diff --git a/api/management/v1/agent.proto b/api/management/v1/agent.proto index 7069a28324f..b05c4abe7fb 100644 --- a/api/management/v1/agent.proto +++ b/api/management/v1/agent.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package management.v1; +import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "inventory/v1/agents.proto"; import "inventory/v1/log_level.proto"; @@ -142,6 +143,8 @@ message UniversalAgent { ValkeyOptions valkey_options = 41; // Real-Time Analytics options. inventory.v1.RTAOptions rta_options = 42; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 43; } message ListAgentsRequest { diff --git a/api/management/v1/azure.pb.go b/api/management/v1/azure.pb.go index fdd2f154751..d47c2d76ad7 100644 --- a/api/management/v1/azure.pb.go +++ b/api/management/v1/azure.pb.go @@ -14,6 +14,7 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" ) const ( @@ -375,9 +376,11 @@ 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=management.v1.DiscoverAzureDatabaseType" json:"type,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Type DiscoverAzureDatabaseType `protobuf:"varint,25,opt,name=type,proto3,enum=management.v1.DiscoverAzureDatabaseType" json:"type,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,26,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddAzureDatabaseRequest) Reset() { @@ -585,6 +588,13 @@ func (x *AddAzureDatabaseRequest) GetType() DiscoverAzureDatabaseType { return DiscoverAzureDatabaseType_DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED } +func (x *AddAzureDatabaseRequest) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type AddAzureDatabaseResponse struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -625,7 +635,7 @@ var File_management_v1_azure_proto protoreflect.FileDescriptor const file_management_v1_azure_proto_rawDesc = "" + "\n" + - "\x19management/v1/azure.proto\x12\rmanagement.v1\x1a\x17validate/validate.proto\"\xf6\x01\n" + + "\x19management/v1/azure.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x17validate/validate.proto\"\xf6\x01\n" + "\x1cDiscoverAzureDatabaseRequest\x12/\n" + "\x0fazure_client_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\razureClientId\x127\n" + "\x13azure_client_secret\x18\x02 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x11azureClientSecret\x12/\n" + @@ -646,7 +656,7 @@ const file_management_v1_azure_proto_rawDesc = "" + "node_model\x18\n" + " \x01(\tR\tnodeModel\"\x85\x01\n" + "\x1dDiscoverAzureDatabaseResponse\x12d\n" + - "\x17azure_database_instance\x18\x01 \x03(\v2,.management.v1.DiscoverAzureDatabaseInstanceR\x15azureDatabaseInstance\"\x96\t\n" + + "\x17azure_database_instance\x18\x01 \x03(\v2,.management.v1.DiscoverAzureDatabaseInstanceR\x15azureDatabaseInstance\"\xea\t\n" + "\x17AddAzureDatabaseRequest\x12\x1f\n" + "\x06region\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x06region\x12\x0e\n" + "\x02az\x18\x02 \x01(\tR\x02az\x12(\n" + @@ -675,7 +685,8 @@ const file_management_v1_azure_proto_rawDesc = "" + "\x0ftls_skip_verify\x18\x16 \x01(\bR\rtlsSkipVerify\x124\n" + "\x16disable_query_examples\x18\x17 \x01(\bR\x14disableQueryExamples\x12?\n" + "\x1ctablestats_group_table_limit\x18\x18 \x01(\x05R\x19tablestatsGroupTableLimit\x12<\n" + - "\x04type\x18\x19 \x01(\x0e2(.management.v1.DiscoverAzureDatabaseTypeR\x04type\x1a?\n" + + "\x04type\x18\x19 \x01(\x0e2(.management.v1.DiscoverAzureDatabaseTypeR\x04type\x12R\n" + + "\x12connection_timeout\x18\x1a \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x1a\n" + @@ -710,6 +721,7 @@ var ( (*AddAzureDatabaseRequest)(nil), // 4: management.v1.AddAzureDatabaseRequest (*AddAzureDatabaseResponse)(nil), // 5: management.v1.AddAzureDatabaseResponse nil, // 6: management.v1.AddAzureDatabaseRequest.CustomLabelsEntry + (*durationpb.Duration)(nil), // 7: google.protobuf.Duration } ) @@ -718,11 +730,12 @@ var file_management_v1_azure_proto_depIdxs = []int32{ 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 - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name + 7, // 4: management.v1.AddAzureDatabaseRequest.connection_timeout:type_name -> google.protobuf.Duration + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name } func init() { file_management_v1_azure_proto_init() } diff --git a/api/management/v1/azure.pb.validate.go b/api/management/v1/azure.pb.validate.go index 6d5787b2687..77c7d042509 100644 --- a/api/management/v1/azure.pb.validate.go +++ b/api/management/v1/azure.pb.validate.go @@ -604,6 +604,36 @@ func (m *AddAzureDatabaseRequest) validate(all bool) error { // no validation rules for Type + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddAzureDatabaseRequestValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddAzureDatabaseRequestValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddAzureDatabaseRequestMultiError(errors) } diff --git a/api/management/v1/azure.proto b/api/management/v1/azure.proto index b99503aa2ec..32f691b3ee0 100644 --- a/api/management/v1/azure.proto +++ b/api/management/v1/azure.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package management.v1; +import "google/protobuf/duration.proto"; import "validate/validate.proto"; // DiscoverAzureDatabaseRequest discover azure databases request. @@ -109,6 +110,10 @@ message AddAzureDatabaseRequest { int32 tablestats_group_table_limit = 24; // Azure database resource type (mysql, maria, postgres) DiscoverAzureDatabaseType type = 25; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 26 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message AddAzureDatabaseResponse {} diff --git a/api/management/v1/external.pb.go b/api/management/v1/external.pb.go index 1f2612371ce..cd62e06086e 100644 --- a/api/management/v1/external.pb.go +++ b/api/management/v1/external.pb.go @@ -14,6 +14,7 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" v1 "github.com/percona/pmm/api/inventory/v1" ) @@ -76,8 +77,10 @@ type AddExternalServiceParams struct { SkipConnectionCheck bool `protobuf:"varint,18,opt,name=skip_connection_check,json=skipConnectionCheck,proto3" json:"skip_connection_check,omitempty"` // Skip TLS certificate and hostname validation. TlsSkipVerify bool `protobuf:"varint,19,opt,name=tls_skip_verify,json=tlsSkipVerify,proto3" json:"tls_skip_verify,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,20,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddExternalServiceParams) Reset() { @@ -243,6 +246,13 @@ func (x *AddExternalServiceParams) GetTlsSkipVerify() bool { return false } +func (x *AddExternalServiceParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ExternalServiceResult struct { state protoimpl.MessageState `protogen:"open.v1"` Service *v1.ExternalService `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` @@ -299,7 +309,7 @@ var File_management_v1_external_proto protoreflect.FileDescriptor const file_management_v1_external_proto_rawDesc = "" + "\n" + - "\x1cmanagement/v1/external.proto\x12\rmanagement.v1\x1a\x19inventory/v1/agents.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xce\x06\n" + + "\x1cmanagement/v1/external.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xa2\a\n" + "\x18AddExternalServiceParams\x12%\n" + "\x0fruns_on_node_id\x18\x01 \x01(\tR\frunsOnNodeId\x12\x1b\n" + "\tnode_name\x18\x02 \x01(\tR\bnodeName\x127\n" + @@ -321,7 +331,8 @@ const file_management_v1_external_proto_rawDesc = "" + "\x05group\x18\x10 \x01(\tR\x05group\x12=\n" + "\fmetrics_mode\x18\x11 \x01(\x0e2\x1a.management.v1.MetricsModeR\vmetricsMode\x122\n" + "\x15skip_connection_check\x18\x12 \x01(\bR\x13skipConnectionCheck\x12&\n" + - "\x0ftls_skip_verify\x18\x13 \x01(\bR\rtlsSkipVerify\x1a?\n" + + "\x0ftls_skip_verify\x18\x13 \x01(\bR\rtlsSkipVerify\x12R\n" + + "\x12connection_timeout\x18\x14 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x9d\x01\n" + @@ -350,8 +361,9 @@ var ( nil, // 2: management.v1.AddExternalServiceParams.CustomLabelsEntry (*AddNodeParams)(nil), // 3: management.v1.AddNodeParams (MetricsMode)(0), // 4: management.v1.MetricsMode - (*v1.ExternalService)(nil), // 5: inventory.v1.ExternalService - (*v1.ExternalExporter)(nil), // 6: inventory.v1.ExternalExporter + (*durationpb.Duration)(nil), // 5: google.protobuf.Duration + (*v1.ExternalService)(nil), // 6: inventory.v1.ExternalService + (*v1.ExternalExporter)(nil), // 7: inventory.v1.ExternalExporter } ) @@ -359,13 +371,14 @@ var file_management_v1_external_proto_depIdxs = []int32{ 3, // 0: management.v1.AddExternalServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddExternalServiceParams.custom_labels:type_name -> management.v1.AddExternalServiceParams.CustomLabelsEntry 4, // 2: management.v1.AddExternalServiceParams.metrics_mode:type_name -> management.v1.MetricsMode - 5, // 3: management.v1.ExternalServiceResult.service:type_name -> inventory.v1.ExternalService - 6, // 4: management.v1.ExternalServiceResult.external_exporter:type_name -> inventory.v1.ExternalExporter - 5, // [5:5] is the sub-list for method output_type - 5, // [5:5] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 5, // 3: management.v1.AddExternalServiceParams.connection_timeout:type_name -> google.protobuf.Duration + 6, // 4: management.v1.ExternalServiceResult.service:type_name -> inventory.v1.ExternalService + 7, // 5: management.v1.ExternalServiceResult.external_exporter:type_name -> inventory.v1.ExternalExporter + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_management_v1_external_proto_init() } diff --git a/api/management/v1/external.pb.validate.go b/api/management/v1/external.pb.validate.go index 232949e1810..1c9415d2587 100644 --- a/api/management/v1/external.pb.validate.go +++ b/api/management/v1/external.pb.validate.go @@ -140,6 +140,36 @@ func (m *AddExternalServiceParams) validate(all bool) error { // no validation rules for TlsSkipVerify + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddExternalServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddExternalServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddExternalServiceParamsMultiError(errors) } diff --git a/api/management/v1/external.proto b/api/management/v1/external.proto index 7030f0364ee..efe8308e278 100644 --- a/api/management/v1/external.proto +++ b/api/management/v1/external.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package management.v1; +import "google/protobuf/duration.proto"; import "inventory/v1/agents.proto"; import "inventory/v1/services.proto"; import "management/v1/metrics.proto"; @@ -63,6 +64,10 @@ message AddExternalServiceParams { bool skip_connection_check = 18; // Skip TLS certificate and hostname validation. bool tls_skip_verify = 19; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 20 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message ExternalServiceResult { diff --git a/api/management/v1/json/client/management_service/add_azure_database_responses.go b/api/management/v1/json/client/management_service/add_azure_database_responses.go index 947f66d7e84..146d4ebb4f9 100644 --- a/api/management/v1/json/client/management_service/add_azure_database_responses.go +++ b/api/management/v1/json/client/management_service/add_azure_database_responses.go @@ -272,6 +272,9 @@ type AddAzureDatabaseBody struct { // - DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL: PostgreSQL type: microsoft.dbformysql // Enum: ["DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED","DISCOVER_AZURE_DATABASE_TYPE_MYSQL","DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL"] Type *string `json:"type,omitempty"` + + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add azure database body diff --git a/api/management/v1/json/client/management_service/add_service_responses.go b/api/management/v1/json/client/management_service/add_service_responses.go index 40d004ff770..c818725913c 100644 --- a/api/management/v1/json/client/management_service/add_service_responses.go +++ b/api/management/v1/json/client/management_service/add_service_responses.go @@ -1645,6 +1645,9 @@ type AddServiceOKBodyExternalExternalExporter struct { // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] Status *string `json:"status,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddServiceOKBodyExternalExternalExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2126,6 +2129,9 @@ type AddServiceOKBodyHaproxyExternalExporter struct { // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] Status *string `json:"status,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddServiceOKBodyHaproxyExternalExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2794,6 +2800,9 @@ type AddServiceOKBodyMongodbMongodbExporter struct { // Environment variable names passed to the exporter. EnvironmentVariableNames []string `json:"environment_variable_names"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddServiceOKBodyMongodbMongodbExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -4211,6 +4220,9 @@ type AddServiceOKBodyMysqlMysqldExporter struct { // Extra DSN parameters for MySQL connection. ExtraDsnParams map[string]string `json:"extra_dsn_params,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddServiceOKBodyMysqlMysqldExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -5350,6 +5362,9 @@ type AddServiceOKBodyPostgresqlPostgresExporter struct { // Maximum number of connections that exporter can open to the database instance. MaxExporterConnections int32 `json:"max_exporter_connections,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddServiceOKBodyPostgresqlPostgresExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -6337,6 +6352,9 @@ type AddServiceOKBodyProxysqlProxysqlExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddServiceOKBodyProxysqlProxysqlExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -7335,6 +7353,9 @@ type AddServiceOKBodyRDSMysqldExporter struct { // Extra DSN parameters for MySQL connection. ExtraDsnParams map[string]string `json:"extra_dsn_params,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddServiceOKBodyRDSMysqldExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -7799,6 +7820,9 @@ type AddServiceOKBodyRDSPostgresqlExporter struct { // Maximum number of connections that exporter can open to the database instance. MaxExporterConnections int32 `json:"max_exporter_connections,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddServiceOKBodyRDSPostgresqlExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -8559,6 +8583,9 @@ type AddServiceOKBodyRDSRDSExporter struct { // Limit of databases for auto-discovery. AutoDiscoveryLimit int32 `json:"auto_discovery_limit,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddServiceOKBodyRDSRDSExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -9107,6 +9134,9 @@ type AddServiceOKBodyValkeyValkeyExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // metrics resolutions MetricsResolutions *AddServiceOKBodyValkeyValkeyExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -9379,6 +9409,9 @@ type AddServiceParamsBodyExternal struct { // Skip TLS certificate and hostname validation. TLSSkipVerify bool `json:"tls_skip_verify,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // add node AddNode *AddServiceParamsBodyExternalAddNode `json:"add_node,omitempty"` } @@ -10110,6 +10143,9 @@ type AddServiceParamsBodyMongodb struct { // If true, adds Real-Time Analytics agent for the provided service. RtaMongodbAgent bool `json:"rta_mongodb_agent,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // add node AddNode *AddServiceParamsBodyMongodbAddNode `json:"add_node,omitempty"` } @@ -10559,6 +10595,9 @@ type AddServiceParamsBodyMysql struct { // extra DSN parameters to be used for connecting to MySQL. ExtraDsnParams map[string]string `json:"extra_dsn_params,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // add node AddNode *AddServiceParamsBodyMysqlAddNode `json:"add_node,omitempty"` } @@ -11004,6 +11043,9 @@ type AddServiceParamsBodyPostgresql struct { // Maximum number of connections that exporter can open to the database instance. MaxExporterConnections int32 `json:"max_exporter_connections,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // add node AddNode *AddServiceParamsBodyPostgresqlAddNode `json:"add_node,omitempty"` } @@ -11416,6 +11458,9 @@ type AddServiceParamsBodyProxysql struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // add node AddNode *AddServiceParamsBodyProxysqlAddNode `json:"add_node,omitempty"` } @@ -11861,6 +11906,9 @@ type AddServiceParamsBodyRDS struct { // Maximum number of exporter connections to PostgreSQL instance. MaxPostgresqlExporterConnections int32 `json:"max_postgresql_exporter_connections,omitempty"` + + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add service params body RDS @@ -12080,6 +12128,9 @@ type AddServiceParamsBodyValkey struct { // Custom password for exporter endpoint /metrics. AgentPassword string `json:"agent_password,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // add node AddNode *AddServiceParamsBodyValkeyAddNode `json:"add_node,omitempty"` } diff --git a/api/management/v1/json/client/management_service/list_agents_responses.go b/api/management/v1/json/client/management_service/list_agents_responses.go index 2da78ec1324..d2fa4d5f15a 100644 --- a/api/management/v1/json/client/management_service/list_agents_responses.go +++ b/api/management/v1/json/client/management_service/list_agents_responses.go @@ -650,6 +650,9 @@ type ListAgentsOKBodyAgentsItems0 struct { // valkey options ValkeyOptions any `json:"valkey_options,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // azure options AzureOptions *ListAgentsOKBodyAgentsItems0AzureOptions `json:"azure_options,omitempty"` 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 d9fcccd96b2..eda5dcfb6a3 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 @@ -910,6 +910,9 @@ type ListServicesOKBodyServicesItems0AgentsItems0 struct { // valkey options ValkeyOptions any `json:"valkey_options,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` + // azure options AzureOptions *ListServicesOKBodyServicesItems0AgentsItems0AzureOptions `json:"azure_options,omitempty"` diff --git a/api/management/v1/json/client/management_service/register_node_responses.go b/api/management/v1/json/client/management_service/register_node_responses.go index f4c682e05e9..1b03576ee0d 100644 --- a/api/management/v1/json/client/management_service/register_node_responses.go +++ b/api/management/v1/json/client/management_service/register_node_responses.go @@ -248,6 +248,9 @@ type RegisterNodeBody struct { // AWS instance ID. InstanceID string `json:"instance_id,omitempty"` + + // Connection timeout for exporter (if set). + ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this register node body diff --git a/api/management/v1/json/v1.json b/api/management/v1/json/v1.json index 77060c656b4..4f50186376c 100644 --- a/api/management/v1/json/v1.json +++ b/api/management/v1/json/v1.json @@ -385,6 +385,11 @@ } }, "x-order": 41 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 42 } } }, @@ -954,6 +959,11 @@ "description": "AWS instance ID.", "type": "string", "x-order": 16 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 17 } } } @@ -1939,6 +1949,11 @@ } }, "x-order": 41 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 42 } } }, @@ -2276,6 +2291,11 @@ "type": "string" }, "x-order": 32 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 33 } }, "x-order": 0 @@ -2552,6 +2572,11 @@ "description": "If true, adds Real-Time Analytics agent for the provided service.", "type": "boolean", "x-order": 34 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 35 } }, "x-order": 1 @@ -2813,6 +2838,11 @@ "type": "integer", "format": "int32", "x-order": 32 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 33 } }, "x-order": 2 @@ -3016,6 +3046,11 @@ "type": "boolean", "title": "Optionally expose the exporter process on all public interfaces", "x-order": 21 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 22 } }, "x-order": 3 @@ -3356,6 +3391,11 @@ "description": "Skip TLS certificate and hostname validation.", "type": "boolean", "x-order": 18 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 19 } }, "x-order": 5 @@ -3551,6 +3591,11 @@ "type": "integer", "format": "int32", "x-order": 33 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 34 } }, "x-order": 6 @@ -3761,6 +3806,11 @@ "description": "Custom password for exporter endpoint /metrics.", "type": "string", "x-order": 23 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 24 } }, "x-order": 7 @@ -4020,6 +4070,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 1 @@ -4513,6 +4568,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 1 @@ -5017,6 +5077,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 1 @@ -5425,6 +5490,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 1 @@ -5585,6 +5655,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 1 @@ -5761,6 +5836,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 1 @@ -5942,6 +6022,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 1 @@ -6188,6 +6273,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 3 @@ -6534,6 +6624,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 6 @@ -6820,6 +6915,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 1 @@ -7015,6 +7115,11 @@ "DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL" ], "x-order": 24 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 25 } } } diff --git a/api/management/v1/mongodb.pb.go b/api/management/v1/mongodb.pb.go index 5fc9584c35c..2947756f69e 100644 --- a/api/management/v1/mongodb.pb.go +++ b/api/management/v1/mongodb.pb.go @@ -14,6 +14,7 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" v1 "github.com/percona/pmm/api/inventory/v1" ) @@ -109,8 +110,10 @@ type AddMongoDBServiceParams struct { EnvironmentVariableNames []string `protobuf:"bytes,36,rep,name=environment_variable_names,json=environmentVariableNames,proto3" json:"environment_variable_names,omitempty"` // If true, adds Real-Time Analytics agent for the provided service. RtaMongodbAgent bool `protobuf:"varint,37,opt,name=rta_mongodb_agent,json=rtaMongodbAgent,proto3" json:"rta_mongodb_agent,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,38,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddMongoDBServiceParams) Reset() { @@ -388,6 +391,13 @@ func (x *AddMongoDBServiceParams) GetRtaMongodbAgent() bool { return false } +func (x *AddMongoDBServiceParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type MongoDBServiceResult struct { state protoimpl.MessageState `protogen:"open.v1"` Service *v1.MongoDBService `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` @@ -468,7 +478,7 @@ var File_management_v1_mongodb_proto protoreflect.FileDescriptor const file_management_v1_mongodb_proto_rawDesc = "" + "\n" + - "\x1bmanagement/v1/mongodb.proto\x12\rmanagement.v1\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xed\f\n" + + "\x1bmanagement/v1/mongodb.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xc1\r\n" + "\x17AddMongoDBServiceParams\x12\x17\n" + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12\x1b\n" + "\tnode_name\x18\x02 \x01(\tR\bnodeName\x127\n" + @@ -506,7 +516,8 @@ const file_management_v1_mongodb_proto_rawDesc = "" + "\tlog_level\x18! \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + "\x0fexpose_exporter\x18\" \x01(\bR\x0eexposeExporter\x12<\n" + "\x1aenvironment_variable_names\x18$ \x03(\tR\x18environmentVariableNames\x12*\n" + - "\x11rta_mongodb_agent\x18% \x01(\bR\x0frtaMongodbAgent\x1a?\n" + + "\x11rta_mongodb_agent\x18% \x01(\bR\x0frtaMongodbAgent\x12R\n" + + "\x12connection_timeout\x18& \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01J\x04\b\b\x10\tR\x17query_examples_disabled\"\x95\x03\n" + @@ -539,11 +550,12 @@ var ( (*AddNodeParams)(nil), // 3: management.v1.AddNodeParams (MetricsMode)(0), // 4: management.v1.MetricsMode (v1.LogLevel)(0), // 5: inventory.v1.LogLevel - (*v1.MongoDBService)(nil), // 6: inventory.v1.MongoDBService - (*v1.MongoDBExporter)(nil), // 7: inventory.v1.MongoDBExporter - (*v1.QANMongoDBProfilerAgent)(nil), // 8: inventory.v1.QANMongoDBProfilerAgent - (*v1.QANMongoDBMongologAgent)(nil), // 9: inventory.v1.QANMongoDBMongologAgent - (*v1.RTAMongoDBAgent)(nil), // 10: inventory.v1.RTAMongoDBAgent + (*durationpb.Duration)(nil), // 6: google.protobuf.Duration + (*v1.MongoDBService)(nil), // 7: inventory.v1.MongoDBService + (*v1.MongoDBExporter)(nil), // 8: inventory.v1.MongoDBExporter + (*v1.QANMongoDBProfilerAgent)(nil), // 9: inventory.v1.QANMongoDBProfilerAgent + (*v1.QANMongoDBMongologAgent)(nil), // 10: inventory.v1.QANMongoDBMongologAgent + (*v1.RTAMongoDBAgent)(nil), // 11: inventory.v1.RTAMongoDBAgent } ) @@ -552,16 +564,17 @@ var file_management_v1_mongodb_proto_depIdxs = []int32{ 2, // 1: management.v1.AddMongoDBServiceParams.custom_labels:type_name -> management.v1.AddMongoDBServiceParams.CustomLabelsEntry 4, // 2: management.v1.AddMongoDBServiceParams.metrics_mode:type_name -> management.v1.MetricsMode 5, // 3: management.v1.AddMongoDBServiceParams.log_level:type_name -> inventory.v1.LogLevel - 6, // 4: management.v1.MongoDBServiceResult.service:type_name -> inventory.v1.MongoDBService - 7, // 5: management.v1.MongoDBServiceResult.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter - 8, // 6: management.v1.MongoDBServiceResult.qan_mongodb_profiler:type_name -> inventory.v1.QANMongoDBProfilerAgent - 9, // 7: management.v1.MongoDBServiceResult.qan_mongodb_mongolog:type_name -> inventory.v1.QANMongoDBMongologAgent - 10, // 8: management.v1.MongoDBServiceResult.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent - 9, // [9:9] is the sub-list for method output_type - 9, // [9:9] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name + 6, // 4: management.v1.AddMongoDBServiceParams.connection_timeout:type_name -> google.protobuf.Duration + 7, // 5: management.v1.MongoDBServiceResult.service:type_name -> inventory.v1.MongoDBService + 8, // 6: management.v1.MongoDBServiceResult.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter + 9, // 7: management.v1.MongoDBServiceResult.qan_mongodb_profiler:type_name -> inventory.v1.QANMongoDBProfilerAgent + 10, // 8: management.v1.MongoDBServiceResult.qan_mongodb_mongolog:type_name -> inventory.v1.QANMongoDBMongologAgent + 11, // 9: management.v1.MongoDBServiceResult.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent + 10, // [10:10] is the sub-list for method output_type + 10, // [10:10] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name } func init() { file_management_v1_mongodb_proto_init() } diff --git a/api/management/v1/mongodb.pb.validate.go b/api/management/v1/mongodb.pb.validate.go index 3a2ef1fc711..7059a5d79b4 100644 --- a/api/management/v1/mongodb.pb.validate.go +++ b/api/management/v1/mongodb.pb.validate.go @@ -170,6 +170,36 @@ func (m *AddMongoDBServiceParams) validate(all bool) error { // no validation rules for RtaMongodbAgent + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddMongoDBServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddMongoDBServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddMongoDBServiceParamsMultiError(errors) } diff --git a/api/management/v1/mongodb.proto b/api/management/v1/mongodb.proto index e9350342675..c17db9a69b5 100644 --- a/api/management/v1/mongodb.proto +++ b/api/management/v1/mongodb.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package management.v1; +import "google/protobuf/duration.proto"; import "inventory/v1/agents.proto"; import "inventory/v1/log_level.proto"; import "inventory/v1/services.proto"; @@ -97,6 +98,10 @@ message AddMongoDBServiceParams { repeated string environment_variable_names = 36; // If true, adds Real-Time Analytics agent for the provided service. bool rta_mongodb_agent = 37; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 38 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message MongoDBServiceResult { diff --git a/api/management/v1/mysql.pb.go b/api/management/v1/mysql.pb.go index 880618f4403..db2a903795a 100644 --- a/api/management/v1/mysql.pb.go +++ b/api/management/v1/mysql.pb.go @@ -14,6 +14,7 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" v1 "github.com/percona/pmm/api/inventory/v1" ) @@ -105,8 +106,10 @@ type AddMySQLServiceParams struct { ExposeExporter bool `protobuf:"varint,32,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` // extra DSN parameters to be used for connecting to MySQL. ExtraDsnParams map[string]string `protobuf:"bytes,33,rep,name=extra_dsn_params,json=extraDsnParams,proto3" json:"extra_dsn_params,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,34,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddMySQLServiceParams) Reset() { @@ -370,6 +373,13 @@ func (x *AddMySQLServiceParams) GetExtraDsnParams() map[string]string { return nil } +func (x *AddMySQLServiceParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type MySQLServiceResult struct { state protoimpl.MessageState `protogen:"open.v1"` Service *v1.MySQLService `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` @@ -451,7 +461,7 @@ var File_management_v1_mysql_proto protoreflect.FileDescriptor const file_management_v1_mysql_proto_rawDesc = "" + "\n" + - "\x19management/v1/mysql.proto\x12\rmanagement.v1\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xa6\f\n" + + "\x19management/v1/mysql.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xfa\f\n" + "\x15AddMySQLServiceParams\x12\x17\n" + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12\x1b\n" + "\tnode_name\x18\x02 \x01(\tR\bnodeName\x127\n" + @@ -487,7 +497,8 @@ const file_management_v1_mysql_proto_rawDesc = "" + "\x0eagent_password\x18\x1e \x01(\tR\ragentPassword\x123\n" + "\tlog_level\x18\x1f \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + "\x0fexpose_exporter\x18 \x01(\bR\x0eexposeExporter\x12b\n" + - "\x10extra_dsn_params\x18! \x03(\v28.management.v1.AddMySQLServiceParams.ExtraDsnParamsEntryR\x0eextraDsnParams\x1a?\n" + + "\x10extra_dsn_params\x18! \x03(\v28.management.v1.AddMySQLServiceParams.ExtraDsnParamsEntryR\x0eextraDsnParams\x12R\n" + + "\x12connection_timeout\x18\" \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1aA\n" + @@ -526,10 +537,11 @@ var ( (*AddNodeParams)(nil), // 4: management.v1.AddNodeParams (MetricsMode)(0), // 5: management.v1.MetricsMode (v1.LogLevel)(0), // 6: inventory.v1.LogLevel - (*v1.MySQLService)(nil), // 7: inventory.v1.MySQLService - (*v1.MySQLdExporter)(nil), // 8: inventory.v1.MySQLdExporter - (*v1.QANMySQLPerfSchemaAgent)(nil), // 9: inventory.v1.QANMySQLPerfSchemaAgent - (*v1.QANMySQLSlowlogAgent)(nil), // 10: inventory.v1.QANMySQLSlowlogAgent + (*durationpb.Duration)(nil), // 7: google.protobuf.Duration + (*v1.MySQLService)(nil), // 8: inventory.v1.MySQLService + (*v1.MySQLdExporter)(nil), // 9: inventory.v1.MySQLdExporter + (*v1.QANMySQLPerfSchemaAgent)(nil), // 10: inventory.v1.QANMySQLPerfSchemaAgent + (*v1.QANMySQLSlowlogAgent)(nil), // 11: inventory.v1.QANMySQLSlowlogAgent } ) @@ -539,15 +551,16 @@ var file_management_v1_mysql_proto_depIdxs = []int32{ 5, // 2: management.v1.AddMySQLServiceParams.metrics_mode:type_name -> management.v1.MetricsMode 6, // 3: management.v1.AddMySQLServiceParams.log_level:type_name -> inventory.v1.LogLevel 3, // 4: management.v1.AddMySQLServiceParams.extra_dsn_params:type_name -> management.v1.AddMySQLServiceParams.ExtraDsnParamsEntry - 7, // 5: management.v1.MySQLServiceResult.service:type_name -> inventory.v1.MySQLService - 8, // 6: management.v1.MySQLServiceResult.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 9, // 7: management.v1.MySQLServiceResult.qan_mysql_perfschema:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 10, // 8: management.v1.MySQLServiceResult.qan_mysql_slowlog:type_name -> inventory.v1.QANMySQLSlowlogAgent - 9, // [9:9] is the sub-list for method output_type - 9, // [9:9] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name + 7, // 5: management.v1.AddMySQLServiceParams.connection_timeout:type_name -> google.protobuf.Duration + 8, // 6: management.v1.MySQLServiceResult.service:type_name -> inventory.v1.MySQLService + 9, // 7: management.v1.MySQLServiceResult.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 10, // 8: management.v1.MySQLServiceResult.qan_mysql_perfschema:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 11, // 9: management.v1.MySQLServiceResult.qan_mysql_slowlog:type_name -> inventory.v1.QANMySQLSlowlogAgent + 10, // [10:10] is the sub-list for method output_type + 10, // [10:10] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name } func init() { file_management_v1_mysql_proto_init() } diff --git a/api/management/v1/mysql.pb.validate.go b/api/management/v1/mysql.pb.validate.go index da50d9a1db8..76aa04485db 100644 --- a/api/management/v1/mysql.pb.validate.go +++ b/api/management/v1/mysql.pb.validate.go @@ -179,6 +179,36 @@ func (m *AddMySQLServiceParams) validate(all bool) error { // no validation rules for ExtraDsnParams + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddMySQLServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddMySQLServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddMySQLServiceParamsMultiError(errors) } diff --git a/api/management/v1/mysql.proto b/api/management/v1/mysql.proto index 918e6606df3..ba3f9c63df5 100644 --- a/api/management/v1/mysql.proto +++ b/api/management/v1/mysql.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package management.v1; +import "google/protobuf/duration.proto"; import "inventory/v1/agents.proto"; import "inventory/v1/log_level.proto"; import "inventory/v1/services.proto"; @@ -90,6 +91,10 @@ message AddMySQLServiceParams { bool expose_exporter = 32; // extra DSN parameters to be used for connecting to MySQL. map extra_dsn_params = 33; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 34 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message MySQLServiceResult { diff --git a/api/management/v1/node.pb.go b/api/management/v1/node.pb.go index 8915b579dfd..c6cfaefe593 100644 --- a/api/management/v1/node.pb.go +++ b/api/management/v1/node.pb.go @@ -14,6 +14,7 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" v1 "github.com/percona/pmm/api/inventory/v1" @@ -247,9 +248,11 @@ type RegisterNodeRequest struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `protobuf:"varint,16,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` // AWS instance ID. - InstanceId string `protobuf:"bytes,17,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + InstanceId string `protobuf:"bytes,17,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,18,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RegisterNodeRequest) Reset() { @@ -401,6 +404,13 @@ func (x *RegisterNodeRequest) GetInstanceId() string { return "" } +func (x *RegisterNodeRequest) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type RegisterNodeResponse struct { state protoimpl.MessageState `protogen:"open.v1"` GenericNode *v1.GenericNode `protobuf:"bytes,1,opt,name=generic_node,json=genericNode,proto3" json:"generic_node,omitempty"` @@ -1103,7 +1113,7 @@ var File_management_v1_node_proto protoreflect.FileDescriptor const file_management_v1_node_proto_rawDesc = "" + "\n" + - "\x18management/v1/node.proto\x12\rmanagement.v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19inventory/v1/agents.proto\x1a\x18inventory/v1/nodes.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x17validate/validate.proto\"\xc8\x03\n" + + "\x18management/v1/node.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19inventory/v1/agents.proto\x1a\x18inventory/v1/nodes.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x17validate/validate.proto\"\xc8\x03\n" + "\rAddNodeParams\x123\n" + "\tnode_type\x18\x01 \x01(\x0e2\x16.inventory.v1.NodeTypeR\bnodeType\x12$\n" + "\tnode_name\x18\x02 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\bnodeName\x12\x1d\n" + @@ -1120,7 +1130,7 @@ const file_management_v1_node_proto_rawDesc = "" + " \x03(\v2..management.v1.AddNodeParams.CustomLabelsEntryR\fcustomLabels\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xed\x05\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xc1\x06\n" + "\x13RegisterNodeRequest\x123\n" + "\tnode_type\x18\x01 \x01(\x0e2\x16.inventory.v1.NodeTypeR\bnodeType\x12$\n" + "\tnode_name\x18\x02 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\bnodeName\x12\x18\n" + @@ -1144,7 +1154,8 @@ const file_management_v1_node_proto_rawDesc = "" + "\x0eagent_password\x18\x0f \x01(\tR\ragentPassword\x12'\n" + "\x0fexpose_exporter\x18\x10 \x01(\bR\x0eexposeExporter\x12\x1f\n" + "\vinstance_id\x18\x11 \x01(\tR\n" + - "instanceId\x1a?\n" + + "instanceId\x12R\n" + + "\x12connection_timeout\x18\x12 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xfd\x01\n" + @@ -1248,10 +1259,11 @@ var ( nil, // 15: management.v1.UniversalNode.CustomLabelsEntry (v1.NodeType)(0), // 16: inventory.v1.NodeType (MetricsMode)(0), // 17: management.v1.MetricsMode - (*v1.GenericNode)(nil), // 18: inventory.v1.GenericNode - (*v1.ContainerNode)(nil), // 19: inventory.v1.ContainerNode - (*v1.PMMAgent)(nil), // 20: inventory.v1.PMMAgent - (*timestamppb.Timestamp)(nil), // 21: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 18: google.protobuf.Duration + (*v1.GenericNode)(nil), // 19: inventory.v1.GenericNode + (*v1.ContainerNode)(nil), // 20: inventory.v1.ContainerNode + (*v1.PMMAgent)(nil), // 21: inventory.v1.PMMAgent + (*timestamppb.Timestamp)(nil), // 22: google.protobuf.Timestamp } ) @@ -1261,23 +1273,24 @@ var file_management_v1_node_proto_depIdxs = []int32{ 16, // 2: management.v1.RegisterNodeRequest.node_type:type_name -> inventory.v1.NodeType 12, // 3: management.v1.RegisterNodeRequest.custom_labels:type_name -> management.v1.RegisterNodeRequest.CustomLabelsEntry 17, // 4: management.v1.RegisterNodeRequest.metrics_mode:type_name -> management.v1.MetricsMode - 18, // 5: management.v1.RegisterNodeResponse.generic_node:type_name -> inventory.v1.GenericNode - 19, // 6: management.v1.RegisterNodeResponse.container_node:type_name -> inventory.v1.ContainerNode - 20, // 7: management.v1.RegisterNodeResponse.pmm_agent:type_name -> inventory.v1.PMMAgent - 15, // 8: management.v1.UniversalNode.custom_labels:type_name -> management.v1.UniversalNode.CustomLabelsEntry - 21, // 9: management.v1.UniversalNode.created_at:type_name -> google.protobuf.Timestamp - 21, // 10: management.v1.UniversalNode.updated_at:type_name -> google.protobuf.Timestamp - 0, // 11: management.v1.UniversalNode.status:type_name -> management.v1.UniversalNode.Status - 14, // 12: management.v1.UniversalNode.agents:type_name -> management.v1.UniversalNode.Agent - 13, // 13: management.v1.UniversalNode.services:type_name -> management.v1.UniversalNode.Service - 16, // 14: management.v1.ListNodesRequest.node_type:type_name -> inventory.v1.NodeType - 6, // 15: management.v1.ListNodesResponse.nodes:type_name -> management.v1.UniversalNode - 6, // 16: management.v1.GetNodeResponse.node:type_name -> management.v1.UniversalNode - 17, // [17:17] is the sub-list for method output_type - 17, // [17:17] is the sub-list for method input_type - 17, // [17:17] is the sub-list for extension type_name - 17, // [17:17] is the sub-list for extension extendee - 0, // [0:17] is the sub-list for field type_name + 18, // 5: management.v1.RegisterNodeRequest.connection_timeout:type_name -> google.protobuf.Duration + 19, // 6: management.v1.RegisterNodeResponse.generic_node:type_name -> inventory.v1.GenericNode + 20, // 7: management.v1.RegisterNodeResponse.container_node:type_name -> inventory.v1.ContainerNode + 21, // 8: management.v1.RegisterNodeResponse.pmm_agent:type_name -> inventory.v1.PMMAgent + 15, // 9: management.v1.UniversalNode.custom_labels:type_name -> management.v1.UniversalNode.CustomLabelsEntry + 22, // 10: management.v1.UniversalNode.created_at:type_name -> google.protobuf.Timestamp + 22, // 11: management.v1.UniversalNode.updated_at:type_name -> google.protobuf.Timestamp + 0, // 12: management.v1.UniversalNode.status:type_name -> management.v1.UniversalNode.Status + 14, // 13: management.v1.UniversalNode.agents:type_name -> management.v1.UniversalNode.Agent + 13, // 14: management.v1.UniversalNode.services:type_name -> management.v1.UniversalNode.Service + 16, // 15: management.v1.ListNodesRequest.node_type:type_name -> inventory.v1.NodeType + 6, // 16: management.v1.ListNodesResponse.nodes:type_name -> management.v1.UniversalNode + 6, // 17: management.v1.GetNodeResponse.node:type_name -> management.v1.UniversalNode + 18, // [18:18] is the sub-list for method output_type + 18, // [18:18] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name } func init() { file_management_v1_node_proto_init() } diff --git a/api/management/v1/node.pb.validate.go b/api/management/v1/node.pb.validate.go index 62a389ade8a..a7632faa339 100644 --- a/api/management/v1/node.pb.validate.go +++ b/api/management/v1/node.pb.validate.go @@ -231,6 +231,36 @@ func (m *RegisterNodeRequest) validate(all bool) error { // no validation rules for InstanceId + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = RegisterNodeRequestValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := RegisterNodeRequestValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return RegisterNodeRequestMultiError(errors) } diff --git a/api/management/v1/node.proto b/api/management/v1/node.proto index 74b16d47f3a..b2c80ce00ee 100644 --- a/api/management/v1/node.proto +++ b/api/management/v1/node.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package management.v1; +import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "inventory/v1/agents.proto"; import "inventory/v1/nodes.proto"; @@ -69,6 +70,10 @@ message RegisterNodeRequest { bool expose_exporter = 16; // AWS instance ID. string instance_id = 17; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 18 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message RegisterNodeResponse { diff --git a/api/management/v1/postgresql.pb.go b/api/management/v1/postgresql.pb.go index 20b9fe29eaf..050a2db5132 100644 --- a/api/management/v1/postgresql.pb.go +++ b/api/management/v1/postgresql.pb.go @@ -14,6 +14,7 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" v1 "github.com/percona/pmm/api/inventory/v1" ) @@ -101,8 +102,10 @@ type AddPostgreSQLServiceParams struct { ExposeExporter bool `protobuf:"varint,32,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` // Maximum number of connections that exporter can open to the database instance. MaxExporterConnections int32 `protobuf:"varint,33,opt,name=max_exporter_connections,json=maxExporterConnections,proto3" json:"max_exporter_connections,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,34,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddPostgreSQLServiceParams) Reset() { @@ -366,6 +369,13 @@ func (x *AddPostgreSQLServiceParams) GetMaxExporterConnections() int32 { return 0 } +func (x *AddPostgreSQLServiceParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type PostgreSQLServiceResult struct { state protoimpl.MessageState `protogen:"open.v1"` Service *v1.PostgreSQLService `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` @@ -447,7 +457,7 @@ var File_management_v1_postgresql_proto protoreflect.FileDescriptor const file_management_v1_postgresql_proto_rawDesc = "" + "\n" + - "\x1emanagement/v1/postgresql.proto\x12\rmanagement.v1\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xd7\v\n" + + "\x1emanagement/v1/postgresql.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xab\f\n" + "\x1aAddPostgreSQLServiceParams\x12\x17\n" + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12\x1b\n" + "\tnode_name\x18\x02 \x01(\tR\bnodeName\x127\n" + @@ -483,7 +493,8 @@ const file_management_v1_postgresql_proto_rawDesc = "" + "\tlog_level\x18\x1e \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x120\n" + "\x14auto_discovery_limit\x18\x1f \x01(\x05R\x12autoDiscoveryLimit\x12'\n" + "\x0fexpose_exporter\x18 \x01(\bR\x0eexposeExporter\x128\n" + - "\x18max_exporter_connections\x18! \x01(\x05R\x16maxExporterConnections\x1a?\n" + + "\x18max_exporter_connections\x18! \x01(\x05R\x16maxExporterConnections\x12R\n" + + "\x12connection_timeout\x18\" \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xb0\x03\n" + @@ -516,27 +527,29 @@ var ( (*AddNodeParams)(nil), // 3: management.v1.AddNodeParams (MetricsMode)(0), // 4: management.v1.MetricsMode (v1.LogLevel)(0), // 5: inventory.v1.LogLevel - (*v1.PostgreSQLService)(nil), // 6: inventory.v1.PostgreSQLService - (*v1.PostgresExporter)(nil), // 7: inventory.v1.PostgresExporter - (*v1.QANPostgreSQLPgStatementsAgent)(nil), // 8: inventory.v1.QANPostgreSQLPgStatementsAgent - (*v1.QANPostgreSQLPgStatMonitorAgent)(nil), // 9: inventory.v1.QANPostgreSQLPgStatMonitorAgent + (*durationpb.Duration)(nil), // 6: google.protobuf.Duration + (*v1.PostgreSQLService)(nil), // 7: inventory.v1.PostgreSQLService + (*v1.PostgresExporter)(nil), // 8: inventory.v1.PostgresExporter + (*v1.QANPostgreSQLPgStatementsAgent)(nil), // 9: inventory.v1.QANPostgreSQLPgStatementsAgent + (*v1.QANPostgreSQLPgStatMonitorAgent)(nil), // 10: inventory.v1.QANPostgreSQLPgStatMonitorAgent } ) var file_management_v1_postgresql_proto_depIdxs = []int32{ - 3, // 0: management.v1.AddPostgreSQLServiceParams.add_node:type_name -> management.v1.AddNodeParams - 2, // 1: management.v1.AddPostgreSQLServiceParams.custom_labels:type_name -> management.v1.AddPostgreSQLServiceParams.CustomLabelsEntry - 4, // 2: management.v1.AddPostgreSQLServiceParams.metrics_mode:type_name -> management.v1.MetricsMode - 5, // 3: management.v1.AddPostgreSQLServiceParams.log_level:type_name -> inventory.v1.LogLevel - 6, // 4: management.v1.PostgreSQLServiceResult.service:type_name -> inventory.v1.PostgreSQLService - 7, // 5: management.v1.PostgreSQLServiceResult.postgres_exporter:type_name -> inventory.v1.PostgresExporter - 8, // 6: management.v1.PostgreSQLServiceResult.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 9, // 7: management.v1.PostgreSQLServiceResult.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent - 8, // [8:8] is the sub-list for method output_type - 8, // [8:8] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 3, // 0: management.v1.AddPostgreSQLServiceParams.add_node:type_name -> management.v1.AddNodeParams + 2, // 1: management.v1.AddPostgreSQLServiceParams.custom_labels:type_name -> management.v1.AddPostgreSQLServiceParams.CustomLabelsEntry + 4, // 2: management.v1.AddPostgreSQLServiceParams.metrics_mode:type_name -> management.v1.MetricsMode + 5, // 3: management.v1.AddPostgreSQLServiceParams.log_level:type_name -> inventory.v1.LogLevel + 6, // 4: management.v1.AddPostgreSQLServiceParams.connection_timeout:type_name -> google.protobuf.Duration + 7, // 5: management.v1.PostgreSQLServiceResult.service:type_name -> inventory.v1.PostgreSQLService + 8, // 6: management.v1.PostgreSQLServiceResult.postgres_exporter:type_name -> inventory.v1.PostgresExporter + 9, // 7: management.v1.PostgreSQLServiceResult.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 10, // 8: management.v1.PostgreSQLServiceResult.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_management_v1_postgresql_proto_init() } diff --git a/api/management/v1/postgresql.pb.validate.go b/api/management/v1/postgresql.pb.validate.go index bb9a930bb42..45a90559cab 100644 --- a/api/management/v1/postgresql.pb.validate.go +++ b/api/management/v1/postgresql.pb.validate.go @@ -179,6 +179,36 @@ func (m *AddPostgreSQLServiceParams) validate(all bool) error { // no validation rules for MaxExporterConnections + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddPostgreSQLServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddPostgreSQLServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddPostgreSQLServiceParamsMultiError(errors) } diff --git a/api/management/v1/postgresql.proto b/api/management/v1/postgresql.proto index c81d9966800..17ad77e7704 100644 --- a/api/management/v1/postgresql.proto +++ b/api/management/v1/postgresql.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package management.v1; +import "google/protobuf/duration.proto"; import "inventory/v1/agents.proto"; import "inventory/v1/log_level.proto"; import "inventory/v1/services.proto"; @@ -86,6 +87,10 @@ message AddPostgreSQLServiceParams { bool expose_exporter = 32; // Maximum number of connections that exporter can open to the database instance. int32 max_exporter_connections = 33; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 34 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message PostgreSQLServiceResult { diff --git a/api/management/v1/proxysql.pb.go b/api/management/v1/proxysql.pb.go index df8c4011336..05a8acdbb09 100644 --- a/api/management/v1/proxysql.pb.go +++ b/api/management/v1/proxysql.pb.go @@ -14,6 +14,7 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" v1 "github.com/percona/pmm/api/inventory/v1" ) @@ -79,8 +80,10 @@ type AddProxySQLServiceParams struct { LogLevel v1.LogLevel `protobuf:"varint,22,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` // Optionally expose the exporter process on all public interfaces ExposeExporter bool `protobuf:"varint,23,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,24,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddProxySQLServiceParams) Reset() { @@ -267,6 +270,13 @@ func (x *AddProxySQLServiceParams) GetExposeExporter() bool { return false } +func (x *AddProxySQLServiceParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ProxySQLServiceResult struct { state protoimpl.MessageState `protogen:"open.v1"` Service *v1.ProxySQLService `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` @@ -323,7 +333,7 @@ var File_management_v1_proxysql_proto protoreflect.FileDescriptor const file_management_v1_proxysql_proto_rawDesc = "" + "\n" + - "\x1cmanagement/v1/proxysql.proto\x12\rmanagement.v1\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xce\a\n" + + "\x1cmanagement/v1/proxysql.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xa2\b\n" + "\x18AddProxySQLServiceParams\x12\x17\n" + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12\x1b\n" + "\tnode_name\x18\x02 \x01(\tR\bnodeName\x127\n" + @@ -348,7 +358,8 @@ const file_management_v1_proxysql_proto_rawDesc = "" + "\x12disable_collectors\x18\x14 \x03(\tR\x11disableCollectors\x12%\n" + "\x0eagent_password\x18\x15 \x01(\tR\ragentPassword\x123\n" + "\tlog_level\x18\x16 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + - "\x0fexpose_exporter\x18\x17 \x01(\bR\x0eexposeExporter\x1a?\n" + + "\x0fexpose_exporter\x18\x17 \x01(\bR\x0eexposeExporter\x12R\n" + + "\x12connection_timeout\x18\x18 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x9d\x01\n" + @@ -378,8 +389,9 @@ var ( (*AddNodeParams)(nil), // 3: management.v1.AddNodeParams (MetricsMode)(0), // 4: management.v1.MetricsMode (v1.LogLevel)(0), // 5: inventory.v1.LogLevel - (*v1.ProxySQLService)(nil), // 6: inventory.v1.ProxySQLService - (*v1.ProxySQLExporter)(nil), // 7: inventory.v1.ProxySQLExporter + (*durationpb.Duration)(nil), // 6: google.protobuf.Duration + (*v1.ProxySQLService)(nil), // 7: inventory.v1.ProxySQLService + (*v1.ProxySQLExporter)(nil), // 8: inventory.v1.ProxySQLExporter } ) @@ -388,13 +400,14 @@ var file_management_v1_proxysql_proto_depIdxs = []int32{ 2, // 1: management.v1.AddProxySQLServiceParams.custom_labels:type_name -> management.v1.AddProxySQLServiceParams.CustomLabelsEntry 4, // 2: management.v1.AddProxySQLServiceParams.metrics_mode:type_name -> management.v1.MetricsMode 5, // 3: management.v1.AddProxySQLServiceParams.log_level:type_name -> inventory.v1.LogLevel - 6, // 4: management.v1.ProxySQLServiceResult.service:type_name -> inventory.v1.ProxySQLService - 7, // 5: management.v1.ProxySQLServiceResult.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter - 6, // [6:6] is the sub-list for method output_type - 6, // [6:6] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name + 6, // 4: management.v1.AddProxySQLServiceParams.connection_timeout:type_name -> google.protobuf.Duration + 7, // 5: management.v1.ProxySQLServiceResult.service:type_name -> inventory.v1.ProxySQLService + 8, // 6: management.v1.ProxySQLServiceResult.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter + 7, // [7:7] is the sub-list for method output_type + 7, // [7:7] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name } func init() { file_management_v1_proxysql_proto_init() } diff --git a/api/management/v1/proxysql.pb.validate.go b/api/management/v1/proxysql.pb.validate.go index d9fea3aff85..431520f5b56 100644 --- a/api/management/v1/proxysql.pb.validate.go +++ b/api/management/v1/proxysql.pb.validate.go @@ -157,6 +157,36 @@ func (m *AddProxySQLServiceParams) validate(all bool) error { // no validation rules for ExposeExporter + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddProxySQLServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddProxySQLServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddProxySQLServiceParamsMultiError(errors) } diff --git a/api/management/v1/proxysql.proto b/api/management/v1/proxysql.proto index 71805ec03c3..74cdb3e6fbc 100644 --- a/api/management/v1/proxysql.proto +++ b/api/management/v1/proxysql.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package management.v1; +import "google/protobuf/duration.proto"; import "inventory/v1/agents.proto"; import "inventory/v1/log_level.proto"; import "inventory/v1/services.proto"; @@ -64,6 +65,10 @@ message AddProxySQLServiceParams { inventory.v1.LogLevel log_level = 22; // Optionally expose the exporter process on all public interfaces bool expose_exporter = 23; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 24 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message ProxySQLServiceResult { diff --git a/api/management/v1/rds.pb.go b/api/management/v1/rds.pb.go index 6f8449b00ab..361efc2cd20 100644 --- a/api/management/v1/rds.pb.go +++ b/api/management/v1/rds.pb.go @@ -14,6 +14,7 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" v1 "github.com/percona/pmm/api/inventory/v1" ) @@ -355,8 +356,10 @@ type AddRDSServiceParams struct { DisableCommentsParsing bool `protobuf:"varint,32,opt,name=disable_comments_parsing,json=disableCommentsParsing,proto3" json:"disable_comments_parsing,omitempty"` // Maximum number of exporter connections to PostgreSQL instance. MaxPostgresqlExporterConnections int32 `protobuf:"varint,33,opt,name=max_postgresql_exporter_connections,json=maxPostgresqlExporterConnections,proto3" json:"max_postgresql_exporter_connections,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,35,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddRDSServiceParams) Reset() { @@ -627,6 +630,13 @@ func (x *AddRDSServiceParams) GetMaxPostgresqlExporterConnections() int32 { return 0 } +func (x *AddRDSServiceParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type RDSServiceResult struct { state protoimpl.MessageState `protogen:"open.v1"` Node *v1.RemoteRDSNode `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` @@ -731,7 +741,7 @@ var File_management_v1_rds_proto protoreflect.FileDescriptor const file_management_v1_rds_proto_rawDesc = "" + "\n" + - "\x17management/v1/rds.proto\x12\rmanagement.v1\x1a\x19inventory/v1/agents.proto\x1a\x18inventory/v1/nodes.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x17validate/validate.proto\"\x8c\x02\n" + + "\x17management/v1/rds.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x18inventory/v1/nodes.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x17validate/validate.proto\"\x8c\x02\n" + "\x13DiscoverRDSInstance\x12\x16\n" + "\x06region\x18\x01 \x01(\tR\x06region\x12\x0e\n" + "\x02az\x18\x02 \x01(\tR\x02az\x12\x1f\n" + @@ -747,7 +757,7 @@ const file_management_v1_rds_proto_rawDesc = "" + "\x0eaws_access_key\x18\x01 \x01(\tR\fawsAccessKey\x12$\n" + "\x0eaws_secret_key\x18\x02 \x01(\tR\fawsSecretKey\"^\n" + "\x13DiscoverRDSResponse\x12G\n" + - "\rrds_instances\x18\x01 \x03(\v2\".management.v1.DiscoverRDSInstanceR\frdsInstances\"\x9e\f\n" + + "\rrds_instances\x18\x01 \x03(\v2\".management.v1.DiscoverRDSInstanceR\frdsInstances\"\xf2\f\n" + "\x13AddRDSServiceParams\x12\x1f\n" + "\x06region\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x06region\x12\x0e\n" + "\x02az\x18\x02 \x01(\tR\x02az\x12(\n" + @@ -786,7 +796,8 @@ const file_management_v1_rds_proto_rawDesc = "" + "\bdatabase\x18\x1e \x01(\tR\bdatabase\x120\n" + "\x14auto_discovery_limit\x18\x1f \x01(\x05R\x12autoDiscoveryLimit\x128\n" + "\x18disable_comments_parsing\x18 \x01(\bR\x16disableCommentsParsing\x12M\n" + - "#max_postgresql_exporter_connections\x18! \x01(\x05R maxPostgresqlExporterConnections\x1a?\n" + + "#max_postgresql_exporter_connections\x18! \x01(\x05R maxPostgresqlExporterConnections\x12R\n" + + "\x12connection_timeout\x18# \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xd3\x04\n" + @@ -831,14 +842,15 @@ var ( (*RDSServiceResult)(nil), // 5: management.v1.RDSServiceResult nil, // 6: management.v1.AddRDSServiceParams.CustomLabelsEntry (MetricsMode)(0), // 7: management.v1.MetricsMode - (*v1.RemoteRDSNode)(nil), // 8: inventory.v1.RemoteRDSNode - (*v1.RDSExporter)(nil), // 9: inventory.v1.RDSExporter - (*v1.MySQLService)(nil), // 10: inventory.v1.MySQLService - (*v1.MySQLdExporter)(nil), // 11: inventory.v1.MySQLdExporter - (*v1.QANMySQLPerfSchemaAgent)(nil), // 12: inventory.v1.QANMySQLPerfSchemaAgent - (*v1.PostgreSQLService)(nil), // 13: inventory.v1.PostgreSQLService - (*v1.PostgresExporter)(nil), // 14: inventory.v1.PostgresExporter - (*v1.QANPostgreSQLPgStatementsAgent)(nil), // 15: inventory.v1.QANPostgreSQLPgStatementsAgent + (*durationpb.Duration)(nil), // 8: google.protobuf.Duration + (*v1.RemoteRDSNode)(nil), // 9: inventory.v1.RemoteRDSNode + (*v1.RDSExporter)(nil), // 10: inventory.v1.RDSExporter + (*v1.MySQLService)(nil), // 11: inventory.v1.MySQLService + (*v1.MySQLdExporter)(nil), // 12: inventory.v1.MySQLdExporter + (*v1.QANMySQLPerfSchemaAgent)(nil), // 13: inventory.v1.QANMySQLPerfSchemaAgent + (*v1.PostgreSQLService)(nil), // 14: inventory.v1.PostgreSQLService + (*v1.PostgresExporter)(nil), // 15: inventory.v1.PostgresExporter + (*v1.QANPostgreSQLPgStatementsAgent)(nil), // 16: inventory.v1.QANPostgreSQLPgStatementsAgent } ) @@ -848,19 +860,20 @@ var file_management_v1_rds_proto_depIdxs = []int32{ 0, // 2: management.v1.AddRDSServiceParams.engine:type_name -> management.v1.DiscoverRDSEngine 6, // 3: management.v1.AddRDSServiceParams.custom_labels:type_name -> management.v1.AddRDSServiceParams.CustomLabelsEntry 7, // 4: management.v1.AddRDSServiceParams.metrics_mode:type_name -> management.v1.MetricsMode - 8, // 5: management.v1.RDSServiceResult.node:type_name -> inventory.v1.RemoteRDSNode - 9, // 6: management.v1.RDSServiceResult.rds_exporter:type_name -> inventory.v1.RDSExporter - 10, // 7: management.v1.RDSServiceResult.mysql:type_name -> inventory.v1.MySQLService - 11, // 8: management.v1.RDSServiceResult.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 12, // 9: management.v1.RDSServiceResult.qan_mysql_perfschema:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 13, // 10: management.v1.RDSServiceResult.postgresql:type_name -> inventory.v1.PostgreSQLService - 14, // 11: management.v1.RDSServiceResult.postgresql_exporter:type_name -> inventory.v1.PostgresExporter - 15, // 12: management.v1.RDSServiceResult.qan_postgresql_pgstatements:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 13, // [13:13] is the sub-list for method output_type - 13, // [13:13] is the sub-list for method input_type - 13, // [13:13] is the sub-list for extension type_name - 13, // [13:13] is the sub-list for extension extendee - 0, // [0:13] is the sub-list for field type_name + 8, // 5: management.v1.AddRDSServiceParams.connection_timeout:type_name -> google.protobuf.Duration + 9, // 6: management.v1.RDSServiceResult.node:type_name -> inventory.v1.RemoteRDSNode + 10, // 7: management.v1.RDSServiceResult.rds_exporter:type_name -> inventory.v1.RDSExporter + 11, // 8: management.v1.RDSServiceResult.mysql:type_name -> inventory.v1.MySQLService + 12, // 9: management.v1.RDSServiceResult.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 13, // 10: management.v1.RDSServiceResult.qan_mysql_perfschema:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 14, // 11: management.v1.RDSServiceResult.postgresql:type_name -> inventory.v1.PostgreSQLService + 15, // 12: management.v1.RDSServiceResult.postgresql_exporter:type_name -> inventory.v1.PostgresExporter + 16, // 13: management.v1.RDSServiceResult.qan_postgresql_pgstatements:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 14, // [14:14] is the sub-list for method output_type + 14, // [14:14] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_management_v1_rds_proto_init() } diff --git a/api/management/v1/rds.pb.validate.go b/api/management/v1/rds.pb.validate.go index 920bb97dbf1..08d58fbca96 100644 --- a/api/management/v1/rds.pb.validate.go +++ b/api/management/v1/rds.pb.validate.go @@ -530,6 +530,36 @@ func (m *AddRDSServiceParams) validate(all bool) error { // no validation rules for MaxPostgresqlExporterConnections + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddRDSServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddRDSServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddRDSServiceParamsMultiError(errors) } diff --git a/api/management/v1/rds.proto b/api/management/v1/rds.proto index 2d24e545fb5..a1cd208315b 100644 --- a/api/management/v1/rds.proto +++ b/api/management/v1/rds.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package management.v1; +import "google/protobuf/duration.proto"; import "inventory/v1/agents.proto"; import "inventory/v1/nodes.proto"; import "inventory/v1/services.proto"; @@ -118,6 +119,10 @@ message AddRDSServiceParams { bool disable_comments_parsing = 32; // Maximum number of exporter connections to PostgreSQL instance. int32 max_postgresql_exporter_connections = 33; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 35 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message RDSServiceResult { diff --git a/api/management/v1/valkey.pb.go b/api/management/v1/valkey.pb.go index 37723eea5ec..0cca28bb2cb 100644 --- a/api/management/v1/valkey.pb.go +++ b/api/management/v1/valkey.pb.go @@ -14,6 +14,7 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" v1 "github.com/percona/pmm/api/inventory/v1" ) @@ -83,8 +84,10 @@ type AddValkeyServiceParams struct { TlsKey string `protobuf:"bytes,23,opt,name=tls_key,json=tlsKey,proto3" json:"tls_key,omitempty"` // Custom password for exporter endpoint /metrics. AgentPassword string `protobuf:"bytes,24,opt,name=agent_password,json=agentPassword,proto3" json:"agent_password,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Connection timeout for exporter (if set). + ConnectionTimeout *durationpb.Duration `protobuf:"bytes,25,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddValkeyServiceParams) Reset() { @@ -285,6 +288,13 @@ func (x *AddValkeyServiceParams) GetAgentPassword() string { return "" } +func (x *AddValkeyServiceParams) GetConnectionTimeout() *durationpb.Duration { + if x != nil { + return x.ConnectionTimeout + } + return nil +} + type ValkeyServiceResult struct { state protoimpl.MessageState `protogen:"open.v1"` Service *v1.ValkeyService `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` @@ -341,7 +351,7 @@ var File_management_v1_valkey_proto protoreflect.FileDescriptor const file_management_v1_valkey_proto_rawDesc = "" + "\n" + - "\x1amanagement/v1/valkey.proto\x12\rmanagement.v1\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xf5\a\n" + + "\x1amanagement/v1/valkey.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xc9\b\n" + "\x16AddValkeyServiceParams\x12#\n" + "\anode_id\x18\x01 \x01(\tB\n" + "\xfaB\ar\x05\x10\x01\xd0\x01\x01R\x06nodeId\x12'\n" + @@ -370,7 +380,8 @@ const file_management_v1_valkey_proto_rawDesc = "" + "\x06tls_ca\x18\x15 \x01(\tR\x05tlsCa\x12\x19\n" + "\btls_cert\x18\x16 \x01(\tR\atlsCert\x12\x17\n" + "\atls_key\x18\x17 \x01(\tR\x06tlsKey\x12%\n" + - "\x0eagent_password\x18\x18 \x01(\tR\ragentPassword\x1a?\n" + + "\x0eagent_password\x18\x18 \x01(\tR\ragentPassword\x12R\n" + + "\x12connection_timeout\x18\x19 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x93\x01\n" + @@ -400,8 +411,9 @@ var ( (*AddNodeParams)(nil), // 3: management.v1.AddNodeParams (MetricsMode)(0), // 4: management.v1.MetricsMode (v1.LogLevel)(0), // 5: inventory.v1.LogLevel - (*v1.ValkeyService)(nil), // 6: inventory.v1.ValkeyService - (*v1.ValkeyExporter)(nil), // 7: inventory.v1.ValkeyExporter + (*durationpb.Duration)(nil), // 6: google.protobuf.Duration + (*v1.ValkeyService)(nil), // 7: inventory.v1.ValkeyService + (*v1.ValkeyExporter)(nil), // 8: inventory.v1.ValkeyExporter } ) @@ -410,13 +422,14 @@ var file_management_v1_valkey_proto_depIdxs = []int32{ 2, // 1: management.v1.AddValkeyServiceParams.custom_labels:type_name -> management.v1.AddValkeyServiceParams.CustomLabelsEntry 4, // 2: management.v1.AddValkeyServiceParams.metrics_mode:type_name -> management.v1.MetricsMode 5, // 3: management.v1.AddValkeyServiceParams.log_level:type_name -> inventory.v1.LogLevel - 6, // 4: management.v1.ValkeyServiceResult.service:type_name -> inventory.v1.ValkeyService - 7, // 5: management.v1.ValkeyServiceResult.valkey_exporter:type_name -> inventory.v1.ValkeyExporter - 6, // [6:6] is the sub-list for method output_type - 6, // [6:6] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name + 6, // 4: management.v1.AddValkeyServiceParams.connection_timeout:type_name -> google.protobuf.Duration + 7, // 5: management.v1.ValkeyServiceResult.service:type_name -> inventory.v1.ValkeyService + 8, // 6: management.v1.ValkeyServiceResult.valkey_exporter:type_name -> inventory.v1.ValkeyExporter + 7, // [7:7] is the sub-list for method output_type + 7, // [7:7] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name } func init() { file_management_v1_valkey_proto_init() } diff --git a/api/management/v1/valkey.pb.validate.go b/api/management/v1/valkey.pb.validate.go index 55268da8d34..ba03132cd36 100644 --- a/api/management/v1/valkey.pb.validate.go +++ b/api/management/v1/valkey.pb.validate.go @@ -176,6 +176,36 @@ func (m *AddValkeyServiceParams) validate(all bool) error { // no validation rules for AgentPassword + if d := m.GetConnectionTimeout(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = AddValkeyServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + err := AddValkeyServiceParamsValidationError{ + field: "ConnectionTimeout", + reason: "value must be greater than or equal to 0s", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + if len(errors) > 0 { return AddValkeyServiceParamsMultiError(errors) } diff --git a/api/management/v1/valkey.proto b/api/management/v1/valkey.proto index b51e1da3a45..9fc8949a3d5 100644 --- a/api/management/v1/valkey.proto +++ b/api/management/v1/valkey.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package management.v1; +import "google/protobuf/duration.proto"; import "inventory/v1/agents.proto"; import "inventory/v1/log_level.proto"; import "inventory/v1/services.proto"; @@ -72,6 +73,10 @@ message AddValkeyServiceParams { string tls_key = 23; // Custom password for exporter endpoint /metrics. string agent_password = 24; + // Connection timeout for exporter (if set). + google.protobuf.Duration connection_timeout = 25 [(validate.rules).duration = { + gte: {seconds: 0} + }]; } message ValkeyServiceResult { diff --git a/api/swagger/swagger-dev.json b/api/swagger/swagger-dev.json index 1ca1471e02b..70e6186976a 100644 --- a/api/swagger/swagger-dev.json +++ b/api/swagger/swagger-dev.json @@ -5546,6 +5546,11 @@ } }, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } } }, @@ -5721,6 +5726,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } } }, @@ -5883,6 +5893,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } } }, @@ -6030,6 +6045,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } } }, @@ -6165,6 +6185,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } } }, @@ -6934,6 +6959,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } } }, @@ -7062,6 +7092,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } } }, @@ -7179,6 +7214,11 @@ } }, "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } } }, @@ -7350,6 +7390,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } } }, @@ -7569,6 +7614,11 @@ "type": "boolean", "title": "Expose the node_exporter process on all public interfaces", "x-order": 5 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 6 } }, "x-order": 1 @@ -7685,6 +7735,11 @@ "type": "string" }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 2 @@ -7824,6 +7879,11 @@ "description": "Enable all collectors.", "type": "boolean", "x-order": 21 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 22 } }, "x-order": 3 @@ -7938,6 +7998,11 @@ "type": "integer", "format": "int32", "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 4 @@ -8025,6 +8090,11 @@ "type": "boolean", "title": "Optionally expose the exporter process on all public interfaces", "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 5 @@ -8085,6 +8155,11 @@ "description": "Skip TLS certificate and hostname verification.", "type": "boolean", "x-order": 9 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 10 } }, "x-order": 6 @@ -8154,6 +8229,11 @@ "LOG_LEVEL_DEBUG" ], "x-order": 9 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 10 } }, "x-order": 7 @@ -8233,6 +8313,11 @@ "LOG_LEVEL_DEBUG" ], "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 8 @@ -8922,6 +9007,11 @@ "LOG_LEVEL_DEBUG" ], "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 15 @@ -9175,6 +9265,11 @@ } }, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 1 @@ -9347,6 +9442,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 2 @@ -9506,6 +9606,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 3 @@ -9650,6 +9755,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 4 @@ -9782,6 +9892,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 5 @@ -9891,6 +10006,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 6 @@ -10016,6 +10136,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 7 @@ -10130,6 +10255,11 @@ } }, "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 8 @@ -10886,6 +11016,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -11230,6 +11365,11 @@ } }, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 2 @@ -11402,6 +11542,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 3 @@ -11561,6 +11706,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 4 @@ -11705,6 +11855,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 5 @@ -11837,6 +11992,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 6 @@ -12585,6 +12745,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 13 @@ -12710,6 +12875,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 14 @@ -12824,6 +12994,11 @@ } }, "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 15 @@ -12989,6 +13164,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 17 @@ -13224,6 +13404,11 @@ "type": "boolean", "x-nullable": true, "x-order": 6 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 7 } }, "x-order": 0 @@ -13370,6 +13555,11 @@ "type": "boolean", "x-nullable": true, "x-order": 16 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 17 } }, "x-order": 1 @@ -13542,6 +13732,11 @@ "type": "boolean", "x-nullable": true, "x-order": 20 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 21 } }, "x-order": 2 @@ -13695,6 +13890,11 @@ "format": "int32", "x-nullable": true, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 3 @@ -13810,6 +14010,11 @@ "type": "boolean", "x-nullable": true, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 4 @@ -13890,6 +14095,11 @@ "format": "int64", "x-nullable": true, "x-order": 7 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 8 } }, "x-order": 5 @@ -13985,6 +14195,11 @@ ], "x-nullable": true, "x-order": 8 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 9 } }, "x-order": 6 @@ -14086,6 +14301,11 @@ ], "x-nullable": true, "x-order": 9 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 10 } }, "x-order": 7 @@ -15036,6 +15256,11 @@ ], "x-nullable": true, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -15262,6 +15487,11 @@ } }, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 0 @@ -15434,6 +15664,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 1 @@ -15593,6 +15828,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 2 @@ -15737,6 +15977,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 3 @@ -15869,6 +16114,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 4 @@ -15978,6 +16228,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 5 @@ -16103,6 +16358,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 6 @@ -16217,6 +16477,11 @@ } }, "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 7 @@ -17021,6 +17286,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -21606,6 +21876,11 @@ } }, "x-order": 41 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 42 } } }, @@ -22175,6 +22450,11 @@ "description": "AWS instance ID.", "type": "string", "x-order": 16 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 17 } } } @@ -23160,6 +23440,11 @@ } }, "x-order": 41 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 42 } } }, @@ -23497,6 +23782,11 @@ "type": "string" }, "x-order": 32 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 33 } }, "x-order": 0 @@ -23773,6 +24063,11 @@ "description": "If true, adds Real-Time Analytics agent for the provided service.", "type": "boolean", "x-order": 34 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 35 } }, "x-order": 1 @@ -24034,6 +24329,11 @@ "type": "integer", "format": "int32", "x-order": 32 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 33 } }, "x-order": 2 @@ -24237,6 +24537,11 @@ "type": "boolean", "title": "Optionally expose the exporter process on all public interfaces", "x-order": 21 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 22 } }, "x-order": 3 @@ -24577,6 +24882,11 @@ "description": "Skip TLS certificate and hostname validation.", "type": "boolean", "x-order": 18 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 19 } }, "x-order": 5 @@ -24772,6 +25082,11 @@ "type": "integer", "format": "int32", "x-order": 33 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 34 } }, "x-order": 6 @@ -24982,6 +25297,11 @@ "description": "Custom password for exporter endpoint /metrics.", "type": "string", "x-order": 23 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 24 } }, "x-order": 7 @@ -25241,6 +25561,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 1 @@ -25734,6 +26059,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 1 @@ -26238,6 +26568,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 1 @@ -26646,6 +26981,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 1 @@ -26806,6 +27146,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 1 @@ -26982,6 +27327,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 1 @@ -27163,6 +27513,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 1 @@ -27409,6 +27764,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 3 @@ -27755,6 +28115,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 6 @@ -28041,6 +28406,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 1 @@ -28236,6 +28606,11 @@ "DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL" ], "x-order": 24 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 25 } } } diff --git a/api/swagger/swagger.json b/api/swagger/swagger.json index 6650f3b8266..703a0fc83a4 100644 --- a/api/swagger/swagger.json +++ b/api/swagger/swagger.json @@ -4588,6 +4588,11 @@ } }, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } } }, @@ -4763,6 +4768,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } } }, @@ -4925,6 +4935,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } } }, @@ -5072,6 +5087,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } } }, @@ -5207,6 +5227,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } } }, @@ -5976,6 +6001,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } } }, @@ -6104,6 +6134,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } } }, @@ -6221,6 +6256,11 @@ } }, "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } } }, @@ -6392,6 +6432,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } } }, @@ -6611,6 +6656,11 @@ "type": "boolean", "title": "Expose the node_exporter process on all public interfaces", "x-order": 5 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 6 } }, "x-order": 1 @@ -6727,6 +6777,11 @@ "type": "string" }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 2 @@ -6866,6 +6921,11 @@ "description": "Enable all collectors.", "type": "boolean", "x-order": 21 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 22 } }, "x-order": 3 @@ -6980,6 +7040,11 @@ "type": "integer", "format": "int32", "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 4 @@ -7067,6 +7132,11 @@ "type": "boolean", "title": "Optionally expose the exporter process on all public interfaces", "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 5 @@ -7127,6 +7197,11 @@ "description": "Skip TLS certificate and hostname verification.", "type": "boolean", "x-order": 9 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 10 } }, "x-order": 6 @@ -7196,6 +7271,11 @@ "LOG_LEVEL_DEBUG" ], "x-order": 9 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 10 } }, "x-order": 7 @@ -7275,6 +7355,11 @@ "LOG_LEVEL_DEBUG" ], "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 8 @@ -7964,6 +8049,11 @@ "LOG_LEVEL_DEBUG" ], "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 15 @@ -8217,6 +8307,11 @@ } }, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 1 @@ -8389,6 +8484,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 2 @@ -8548,6 +8648,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 3 @@ -8692,6 +8797,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 4 @@ -8824,6 +8934,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 5 @@ -8933,6 +9048,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 6 @@ -9058,6 +9178,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 7 @@ -9172,6 +9297,11 @@ } }, "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 8 @@ -9928,6 +10058,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -10272,6 +10407,11 @@ } }, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 2 @@ -10444,6 +10584,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 3 @@ -10603,6 +10748,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 4 @@ -10747,6 +10897,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 5 @@ -10879,6 +11034,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 6 @@ -11627,6 +11787,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 13 @@ -11752,6 +11917,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 14 @@ -11866,6 +12036,11 @@ } }, "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 15 @@ -12031,6 +12206,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 17 @@ -12266,6 +12446,11 @@ "type": "boolean", "x-nullable": true, "x-order": 6 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 7 } }, "x-order": 0 @@ -12412,6 +12597,11 @@ "type": "boolean", "x-nullable": true, "x-order": 16 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 17 } }, "x-order": 1 @@ -12584,6 +12774,11 @@ "type": "boolean", "x-nullable": true, "x-order": 20 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 21 } }, "x-order": 2 @@ -12737,6 +12932,11 @@ "format": "int32", "x-nullable": true, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 3 @@ -12852,6 +13052,11 @@ "type": "boolean", "x-nullable": true, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 4 @@ -12932,6 +13137,11 @@ "format": "int64", "x-nullable": true, "x-order": 7 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 8 } }, "x-order": 5 @@ -13027,6 +13237,11 @@ ], "x-nullable": true, "x-order": 8 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 9 } }, "x-order": 6 @@ -13128,6 +13343,11 @@ ], "x-nullable": true, "x-order": 9 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 10 } }, "x-order": 7 @@ -14078,6 +14298,11 @@ ], "x-nullable": true, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -14304,6 +14529,11 @@ } }, "x-order": 11 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } }, "x-order": 0 @@ -14476,6 +14706,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 1 @@ -14635,6 +14870,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 2 @@ -14779,6 +15019,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 3 @@ -14911,6 +15156,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 4 @@ -15020,6 +15270,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 5 @@ -15145,6 +15400,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 6 @@ -15259,6 +15519,11 @@ } }, "x-order": 12 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 7 @@ -16063,6 +16328,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -20648,6 +20918,11 @@ } }, "x-order": 41 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 42 } } }, @@ -21217,6 +21492,11 @@ "description": "AWS instance ID.", "type": "string", "x-order": 16 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 17 } } } @@ -22202,6 +22482,11 @@ } }, "x-order": 41 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 42 } } }, @@ -22539,6 +22824,11 @@ "type": "string" }, "x-order": 32 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 33 } }, "x-order": 0 @@ -22815,6 +23105,11 @@ "description": "If true, adds Real-Time Analytics agent for the provided service.", "type": "boolean", "x-order": 34 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 35 } }, "x-order": 1 @@ -23076,6 +23371,11 @@ "type": "integer", "format": "int32", "x-order": 32 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 33 } }, "x-order": 2 @@ -23279,6 +23579,11 @@ "type": "boolean", "title": "Optionally expose the exporter process on all public interfaces", "x-order": 21 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 22 } }, "x-order": 3 @@ -23619,6 +23924,11 @@ "description": "Skip TLS certificate and hostname validation.", "type": "boolean", "x-order": 18 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 19 } }, "x-order": 5 @@ -23814,6 +24124,11 @@ "type": "integer", "format": "int32", "x-order": 33 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 34 } }, "x-order": 6 @@ -24024,6 +24339,11 @@ "description": "Custom password for exporter endpoint /metrics.", "type": "string", "x-order": 23 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 24 } }, "x-order": 7 @@ -24283,6 +24603,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 1 @@ -24776,6 +25101,11 @@ "type": "string" }, "x-order": 19 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 1 @@ -25280,6 +25610,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 1 @@ -25688,6 +26023,11 @@ } }, "x-order": 15 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 1 @@ -25848,6 +26188,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 1 @@ -26024,6 +26369,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 1 @@ -26205,6 +26555,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 1 @@ -26451,6 +26806,11 @@ "type": "string" }, "x-order": 22 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 3 @@ -26797,6 +27157,11 @@ } }, "x-order": 17 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 6 @@ -27083,6 +27448,11 @@ } }, "x-order": 14 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 1 @@ -27278,6 +27648,11 @@ "DISCOVER_AZURE_DATABASE_TYPE_POSTGRESQL" ], "x-order": 24 + }, + "connection_timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 25 } } } diff --git a/build/packages/rpm/server/SPECS/percona-dashboards.spec b/build/packages/rpm/server/SPECS/percona-dashboards.spec index ff370b9ac17..84894723690 100644 --- a/build/packages/rpm/server/SPECS/percona-dashboards.spec +++ b/build/packages/rpm/server/SPECS/percona-dashboards.spec @@ -6,10 +6,10 @@ %global commit ad4af6808bcd361284e8eb8cd1f36b1e98e32bce %global shortcommit %(c=%{commit}; echo ${c:0:7}) %define build_timestamp %(date -u +"%y%m%d%H%M") -%define release 23 +%define release 24 %define rpm_release %{release}.%{build_timestamp}.%{shortcommit}%{?dist} -%define clickhouse_datasource_version 4.14.1 +%define clickhouse_datasource_version 4.15.0 %define polystat_panel_version 2.1.16 %ifarch x86_64 @@ -66,6 +66,9 @@ echo %{version} > %{buildroot}%{_datadir}/%{name}/VERSION %changelog +* Sat Apr 18 2026 Alex Demidoff - 3.0.0-24 +- PMM-14944 Bump clickhouse datasource plugin to 4.15.0 + * Tue Mar 17 2026 Alex Demidoff - 3.0.0-23 - PMM-14837 Move dashboards to the monorepo diff --git a/documentation/docs/reference/index.md b/documentation/docs/reference/index.md index 3a47cccd8e1..9e89d72b0db 100644 --- a/documentation/docs/reference/index.md +++ b/documentation/docs/reference/index.md @@ -45,12 +45,12 @@ PMM Server includes the following tools: - QAN App is a web application for visualizing collected Query Analytics data, which is part of the PMM Server's UI. -- Metrics Monitor provides a historical view of metrics that are critical to a MySQL or MongoDB server instance. It includes the following: +- Metrics Monitoring provides a historical view of and analysis of metrics that are critical to PostgreSQL, MySQL, MongoDB or Valkey/Redis server instances. It includes the following: - [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics) is a scalable time-series database. - [ClickHouse](https://clickhouse.com) is a third-party column-oriented database that facilitates the Query Analytics functionality. - [Grafana](http://docs.grafana.org) is a third-party dashboard and graph engine for visualizing data aggregated in an intuitive web interface. - - [PMM Dashboards](https://github.com/percona/pmm/tree/v3/dashboards) is a set of metrics dashboards developed by Percona. + - [PMM Dashboards](https://github.com/percona/pmm/tree/v3/dashboards) is a set of monitoring dashboards developed by Percona. ### PMM Client diff --git a/documentation/docs/use/commands/pmm-agent.md b/documentation/docs/use/commands/pmm-agent.md index dae66839c5d..66583902d11 100644 --- a/documentation/docs/use/commands/pmm-agent.md +++ b/documentation/docs/use/commands/pmm-agent.md @@ -39,17 +39,21 @@ Most options can be set via environment variables (shown in parentheses). | `--server-insecure-tls` | `PMM_AGENT_SERVER_INSECURE_TLS` | Skip PMM Server TLS certificate validation. | `--az=AZ` | `PMM_AGENT_SETUP_AZ` | Node availability zone. | `--config-file=path_to/pmm-agent.yaml` | `PMM_AGENT_CONFIG_FILE` | Configuration file path and name. +| `--config-file-key-file` | `PMM_AGENT_CONFIG_FILE_KEY_FILE` | Path to RSA private key for config file encryption. See [Encrypt the PMM Client configuration file](../../admin/security/client_config_encryption.md). +| `--config-file-key-password` | `PMM_AGENT_CONFIG_FILE_KEY_PASSWORD`| Password for the RSA private key (if password-protected). | `--container-id=CONTAINER-ID` | `PMM_AGENT_SETUP_CONTAINER_ID` | Container ID. | `--container-name=CONTAINER-NAME` | `PMM_AGENT_SETUP_CONTAINER_NAME` | Container name. | `--debug` | `PMM_AGENT_DEBUG` | Enable debug output. | `--distro=distro` | `PMM_AGENT_SETUP_DISTRO` | Node OS distribution (default is auto-detected). | `--force` | `PMM_AGENT_SETUP_FORCE` | Remove Node with that name and all dependent Services and Agents (if existing). -| `--id=...` | `PMM_AGENT_ID` | ID of this pmm-agent. +| `--id=...` | `PMM_AGENT_ID` | ID of this pmm-agent. | `--listen-address=LISTEN-ADDRESS` | `PMM_AGENT_LISTEN_ADDRESS` | Agent local API address. | `--listen-port=LISTEN-PORT` | `PMM_AGENT_LISTEN_PORT` | Agent local API port. | `--machine-id=machine-id` | `PMM_AGENT_SETUP_MACHINE_ID` | Node machine ID (default is auto-detected). | `--metrics-mode=auto` | `PMM_AGENT_SETUP_METRICS_MODE` | Metrics flow mode for agents node-exporter. Can be `push` (agent will push metrics), `pull` (server scrapes metrics from agent) or `auto` (chosen by server). | `--node-model=NODE-MODEL` | `PMM_AGENT_SETUP_NODE_MODEL` | Node model. +| `--proc-mounts-path=PATH` | `PMM_AGENT_SETUP_PROC_MOUNTS_PATH` | Path to the `proc/mounts` file used by the `node_exporter`. +| `--expose-exporter` | | If you enable this flag, any IP address on the local network and anywhere on the internet can access node exporter endpoints. If the flag is disabled, node exporter endpoints can be accessed only locally.| | `--paths-base=PATH` | `PMM_AGENT_PATHS_BASE` | Base path for PMM client, where all binaries, tools and collectors are located. If not set, default is `/usr/local/percona/pmm`. | `--paths-exporters_base=PATH` | `PMM_AGENT_PATHS_EXPORTERS_BASE` | Base path for exporters to use. If not set, or set to a relative path, uses value of `--paths-base` prepended to it. | `--paths-mongodb_exporter=PATH` | `PMM_AGENT_PATHS_MONGODB_EXPORTER` | Path to `mongodb_exporter`. @@ -66,11 +70,8 @@ Most options can be set via environment variables (shown in parentheses). | `--region=REGION` | `PMM_AGENT_SETUP_REGION` | Node region. | `--skip-registration` | `PMM_AGENT_SETUP_SKIP_REGISTRATION` | Skip registration on PMM Server. | `--trace` | `PMM_AGENT_TRACE` | Enable trace output (implies `--debug`). -| `-h`, `--help` | | Show help (synonym for `pmm-agent help`). | `--version` | | Show application version, PMM version, time-stamp, git commit hash and branch. -| `--expose-exporter` | | If you enable this flag, any IP address on the local network and anywhere on the internet can access node exporter endpoints. If the flag is disabled, node exporter endpoints can be accessed only locally.| -| `--config-file-key-file` | `PMM_AGENT_CONFIG_FILE_KEY_FILE` | Path to RSA private key for config file encryption. See [Encrypt the PMM Client configuration file](../../admin/security/client_config_encryption.md). | -| `--config-file-key-password` | `PMM_AGENT_CONFIG_FILE_KEY_PASSWORD` | Password for the RSA private key (if password-protected). | +| `-h`, `--help` | | Show help (synonym for `pmm-agent help`). ## Config file diff --git a/managed/models/agent_helpers.go b/managed/models/agent_helpers.go index 8796bfa0b34..00234ec6aa4 100644 --- a/managed/models/agent_helpers.go +++ b/managed/models/agent_helpers.go @@ -669,6 +669,7 @@ func CreateNodeExporter(q *reform.Querier, disableCollectors []string, agentPassword *string, logLevel string, + connectionTimeout *time.Duration, ) (*Agent, error) { // TODO merge into CreateAgent @@ -691,6 +692,7 @@ func CreateNodeExporter(q *reform.Querier, ExposeExporter: exposeExporter, PushMetrics: pushMetrics, DisabledCollectors: disableCollectors, + ConnectionTimeout: connectionTimeout, }, LogLevel: pointer.ToStringOrNil(logLevel), } @@ -719,6 +721,8 @@ type CreateExternalExporterParams struct { CustomLabels map[string]string PushMetrics bool TLSSkipVerify bool + // Connection timeout for exporter (if set). + ConnectionTimeout *time.Duration } // CreateExternalExporter creates ExternalExporter. @@ -765,6 +769,7 @@ func CreateExternalExporter(q *reform.Querier, params *CreateExternalExporterPar if metricsPath == "" { metricsPath = "/metrics" } + row := &Agent{ PMMAgentID: pmmAgentID, AgentID: id, @@ -775,9 +780,10 @@ func CreateExternalExporter(q *reform.Querier, params *CreateExternalExporterPar Password: pointer.ToStringOrNil(params.Password), ListenPort: pointer.ToUint16(uint16(params.ListenPort)), ExporterOptions: ExporterOptions{ - PushMetrics: params.PushMetrics, - MetricsPath: metricsPath, - MetricsScheme: scheme, + PushMetrics: params.PushMetrics, + MetricsPath: metricsPath, + MetricsScheme: scheme, + ConnectionTimeout: params.ConnectionTimeout, }, TLSSkipVerify: params.TLSSkipVerify, } @@ -940,6 +946,11 @@ func CreateAgent(q *reform.Querier, agentType AgentType, params *CreateAgentPara } } + exporterOptions := params.ExporterOptions + if pointer.GetDuration(exporterOptions.ConnectionTimeout) == 0 { + exporterOptions.ConnectionTimeout = nil + } + row := &Agent{ AgentID: id, AgentType: agentType, @@ -951,7 +962,7 @@ func CreateAgent(q *reform.Querier, agentType AgentType, params *CreateAgentPara AgentPassword: pointer.ToStringOrNil(params.AgentPassword), TLS: params.TLS, TLSSkipVerify: params.TLSSkipVerify, - ExporterOptions: params.ExporterOptions, + ExporterOptions: exporterOptions, QANOptions: params.QANOptions, AWSOptions: params.AWSOptions, AzureOptions: params.AzureOptions, @@ -1025,6 +1036,7 @@ type ChangeExporterOptions struct { MetricsScheme *string MetricsPath *string MetricsResolutions *ChangeMetricsResolutionsParams + ConnectionTimeout *time.Duration } // ChangeQANOptions contains QANOptions fields that can be changed. @@ -1185,6 +1197,14 @@ func ChangeAgent(q *reform.Querier, agentID string, params *ChangeAgentParams) ( if params.ExporterOptions.MetricsPath != nil { row.ExporterOptions.MetricsPath = *params.ExporterOptions.MetricsPath } + + if params.ExporterOptions.ConnectionTimeout != nil { + if pointer.GetDuration(params.ExporterOptions.ConnectionTimeout) == 0 { + row.ExporterOptions.ConnectionTimeout = nil + } else { + row.ExporterOptions.ConnectionTimeout = params.ExporterOptions.ConnectionTimeout + } + } } // Update database connection fields diff --git a/managed/models/agent_helpers_test.go b/managed/models/agent_helpers_test.go index e4aa4524570..f3421a56c9f 100644 --- a/managed/models/agent_helpers_test.go +++ b/managed/models/agent_helpers_test.go @@ -514,6 +514,21 @@ func TestAgentHelpers(t *testing.T) { UpdatedAt: now, }, agent) }) + t.Run("With connection timeout", func(t *testing.T) { + q, teardown := setup(t) + defer teardown(t) + + connectionTimeout := 3 * time.Second + agent, err := models.CreateExternalExporter(q, &models.CreateExternalExporterParams{ + RunsOnNodeID: "N1", + ServiceID: "S1", + ListenPort: 9104, + ConnectionTimeout: pointer.ToDuration(connectionTimeout), + }) + require.NoError(t, err) + require.NotNil(t, agent.ExporterOptions.ConnectionTimeout) + assert.Equal(t, connectionTimeout, *agent.ExporterOptions.ConnectionTimeout) + }) t.Run("Invalid listen port", func(t *testing.T) { q, teardown := setup(t) defer teardown(t) @@ -735,6 +750,33 @@ func TestAgentHelpers(t *testing.T) { require.NoError(t, err) assert.Equal(t, "https", persistedAgent.ExporterOptions.MetricsScheme) assert.Equal(t, "/custom-metrics", persistedAgent.ExporterOptions.MetricsPath) + + // Test setting and then clearing connection timeout back to default/unset. + agent, err = models.ChangeAgent(q, "A5", &models.ChangeAgentParams{ + ExporterOptions: &models.ChangeExporterOptions{ + ConnectionTimeout: pointer.ToDuration(7 * time.Second), + }, + }) + require.NoError(t, err) + require.NotNil(t, agent.ExporterOptions.ConnectionTimeout) + assert.Equal(t, 7*time.Second, *agent.ExporterOptions.ConnectionTimeout) + + persistedAgent, err = models.FindAgentByID(q, "A5") + require.NoError(t, err) + require.NotNil(t, persistedAgent.ExporterOptions.ConnectionTimeout) + assert.Equal(t, 7*time.Second, *persistedAgent.ExporterOptions.ConnectionTimeout) + + agent, err = models.ChangeAgent(q, "A5", &models.ChangeAgentParams{ + ExporterOptions: &models.ChangeExporterOptions{ + ConnectionTimeout: pointer.ToDuration(0), + }, + }) + require.NoError(t, err) + assert.Nil(t, agent.ExporterOptions.ConnectionTimeout) + + persistedAgent, err = models.FindAgentByID(q, "A5") + require.NoError(t, err) + assert.Nil(t, persistedAgent.ExporterOptions.ConnectionTimeout) }) t.Run("ChangeMetricsResolutions", func(t *testing.T) { diff --git a/managed/models/agent_model.go b/managed/models/agent_model.go index 75840e8e8de..d8700dc5893 100644 --- a/managed/models/agent_model.go +++ b/managed/models/agent_model.go @@ -51,11 +51,13 @@ const ( // AgentStatusUnknown indicates we know nothing about agent because it is not connected. AgentStatusUnknown = "AGENT_STATUS_UNKNOWN" // AgentStatusDone indicates thay the agent has either been stopped or disabled. - agentStatusDone = "AGENT_STATUS_DONE" - tcp = "tcp" - trueStr = "true" - unix = "unix" - skipVerify = "skip-verify" + agentStatusDone = "AGENT_STATUS_DONE" + tcp = "tcp" + trueStr = "true" + unix = "unix" + skipVerify = "skip-verify" + defaultDialTimeout = 2 * time.Second + valkeyDialTimeout = 3 * time.Second ) // Agent types (in the same order as in agents.proto). @@ -107,6 +109,8 @@ type ExporterOptions struct { MetricsResolutions *MetricsResolutions `json:"metrics_resolutions"` MetricsPath string `json:"metrics_path"` MetricsScheme string `json:"metrics_scheme"` + // Connection timeout for exporter. Optional. + ConnectionTimeout *time.Duration `json:"connection_timeout"` } // Value implements database/sql/driver.Valuer interface. Should be defined on the value. @@ -122,7 +126,8 @@ func (c ExporterOptions) IsEmpty() bool { len(c.DisabledCollectors) == 0 && c.MetricsResolutions == nil && c.MetricsPath == "" && - c.MetricsScheme == "" + c.MetricsScheme == "" && + pointer.GetDuration(c.ConnectionTimeout) == 0 } // QANOptions represents structure for special QAN options. @@ -378,80 +383,80 @@ type Agent struct { } // BeforeInsert implements reform.BeforeInserter interface. -func (s *Agent) BeforeInsert() error { +func (a *Agent) BeforeInsert() error { now := Now() - s.CreatedAt = now - s.UpdatedAt = now - if len(s.CustomLabels) == 0 { - s.CustomLabels = nil + a.CreatedAt = now + a.UpdatedAt = now + if len(a.CustomLabels) == 0 { + a.CustomLabels = nil } - if len(s.EnvironmentVariables) == 0 { - s.EnvironmentVariables = nil + if len(a.EnvironmentVariables) == 0 { + a.EnvironmentVariables = nil } - if s.Status == "" && s.AgentType != PMMAgentType { - s.Status = AgentStatusUnknown + if a.Status == "" && a.AgentType != PMMAgentType { + a.Status = AgentStatusUnknown } - if s.Disabled { - s.Status = agentStatusDone + if a.Disabled { + a.Status = agentStatusDone } return nil } // BeforeUpdate implements reform.BeforeUpdater interface. -func (s *Agent) BeforeUpdate() error { - s.UpdatedAt = Now() - if len(s.CustomLabels) == 0 { - s.CustomLabels = nil +func (a *Agent) BeforeUpdate() error { + a.UpdatedAt = Now() + if len(a.CustomLabels) == 0 { + a.CustomLabels = nil } - if len(s.EnvironmentVariables) == 0 { - s.EnvironmentVariables = nil + if len(a.EnvironmentVariables) == 0 { + a.EnvironmentVariables = nil } - if s.Disabled { - s.Status = agentStatusDone + if a.Disabled { + a.Status = agentStatusDone } return nil } // AfterFind implements reform.AfterFinder interface. -func (s *Agent) AfterFind() error { - s.CreatedAt = s.CreatedAt.UTC() - s.UpdatedAt = s.UpdatedAt.UTC() - if len(s.CustomLabels) == 0 { - s.CustomLabels = nil +func (a *Agent) AfterFind() error { + a.CreatedAt = a.CreatedAt.UTC() + a.UpdatedAt = a.UpdatedAt.UTC() + if len(a.CustomLabels) == 0 { + a.CustomLabels = nil } - if len(s.EnvironmentVariables) == 0 { - s.EnvironmentVariables = nil + if len(a.EnvironmentVariables) == 0 { + a.EnvironmentVariables = nil } return nil } // GetCustomLabels decodes custom labels. -func (s *Agent) GetCustomLabels() (map[string]string, error) { - return getLabels(s.CustomLabels) +func (a *Agent) GetCustomLabels() (map[string]string, error) { + return getLabels(a.CustomLabels) } // SetCustomLabels encodes custom labels. -func (s *Agent) SetCustomLabels(m map[string]string) error { - return setLabels(m, &s.CustomLabels) +func (a *Agent) SetCustomLabels(m map[string]string) error { + return setLabels(m, &a.CustomLabels) } // GetEnvironmentVariableNames decodes shared environment variable names. -func (s *Agent) GetEnvironmentVariableNames() ([]string, error) { - if s.EnvironmentVariables == nil { +func (a *Agent) GetEnvironmentVariableNames() ([]string, error) { + if a.EnvironmentVariables == nil { return nil, nil } var names []string - if err := json.Unmarshal(s.EnvironmentVariables, &names); err != nil { + if err := json.Unmarshal(a.EnvironmentVariables, &names); err != nil { return nil, errors.Wrap(err, "failed to unmarshal shared environment variable names") } return names, nil } // SetEnvironmentVariableNames encodes shared environment variable names. -func (s *Agent) SetEnvironmentVariableNames(names []string) error { +func (a *Agent) SetEnvironmentVariableNames(names []string) error { if len(names) == 0 { - s.EnvironmentVariables = nil + a.EnvironmentVariables = nil return nil } @@ -459,30 +464,30 @@ func (s *Agent) SetEnvironmentVariableNames(names []string) error { if err != nil { return errors.Wrap(err, "failed to marshal shared environment variable names") } - s.EnvironmentVariables = b + a.EnvironmentVariables = b return nil } // GetAgentPassword returns agent password, if it is empty then agent ID. -func (s *Agent) GetAgentPassword() string { - password := s.AgentID - if pointer.GetString(s.AgentPassword) != "" { - password = *s.AgentPassword +func (a *Agent) GetAgentPassword() string { + password := a.AgentID + if pointer.GetString(a.AgentPassword) != "" { + password = *a.AgentPassword } return password } // UnifiedLabels returns combined standard and custom labels with empty labels removed. -func (s *Agent) UnifiedLabels() (map[string]string, error) { - custom, err := s.GetCustomLabels() +func (a *Agent) UnifiedLabels() (map[string]string, error) { + custom, err := a.GetCustomLabels() if err != nil { return nil, err } res := map[string]string{ - "agent_id": s.AgentID, - "agent_type": string(s.AgentType), + "agent_id": a.AgentID, + "agent_type": string(a.AgentType), } maps.Copy(res, custom) @@ -507,10 +512,10 @@ func (c *DBConfig) Valid() bool { } // DBConfig returns DBConfig for given Service with this agent. -func (s *Agent) DBConfig(service *Service) *DBConfig { +func (a *Agent) DBConfig(service *Service) *DBConfig { return &DBConfig{ - User: pointer.GetString(s.Username), - Password: pointer.GetString(s.Password), + User: pointer.GetString(a.Username), + Password: pointer.GetString(a.Password), Address: pointer.GetString(service.Address), Port: int(pointer.GetUint16(service.Port)), Socket: pointer.GetString(service.Socket), @@ -526,18 +531,18 @@ type DSNParams struct { } // DSN returns a DSN string for accessing a given Service with this Agent (and an implicit driver). -func (s *Agent) DSN(service *Service, dsnParams DSNParams, tdp *DelimiterPair, pmmAgentVersion *version.Parsed) string { //nolint:cyclop,maintidx +func (a *Agent) DSN(service *Service, dsnParams DSNParams, tdp *DelimiterPair, pmmAgentVersion *version.Parsed) string { //nolint:cyclop,maintidx host := pointer.GetString(service.Address) port := pointer.GetUint16(service.Port) socket := pointer.GetString(service.Socket) - username := pointer.GetString(s.Username) - password := pointer.GetString(s.Password) + username := pointer.GetString(a.Username) + password := pointer.GetString(a.Password) if tdp == nil { - tdp = s.TemplateDelimiters(service) + tdp = a.TemplateDelimiters(service) } - switch s.AgentType { + switch a.AgentType { case MySQLdExporterType: cfg := mysql.NewConfig() cfg.User = username @@ -551,26 +556,26 @@ func (s *Agent) DSN(service *Service, dsnParams DSNParams, tdp *DelimiterPair, p cfg.Timeout = dsnParams.DialTimeout cfg.DBName = dsnParams.Database cfg.Params = make(map[string]string) - if s.TLS { + if a.TLS { // It is mandatory to have "custom" as the first case. // Except case for backward compatibility. // Skip verify for "custom" is handled on pmm-agent side. switch { // Backward compatibility - case s.TLSSkipVerify && (pmmAgentVersion == nil || pmmAgentVersion.Less(v2_42)): + case a.TLSSkipVerify && (pmmAgentVersion == nil || pmmAgentVersion.Less(v2_42)): cfg.Params["tls"] = skipVerify - case len(s.Files()) != 0: + case len(a.Files()) != 0: cfg.Params["tls"] = "custom" - case s.TLSSkipVerify: + case a.TLSSkipVerify: cfg.Params["tls"] = skipVerify default: cfg.Params["tls"] = trueStr } } - if s.MySQLOptions.ExtraDSNParams != nil { + if a.MySQLOptions.ExtraDSNParams != nil { // Add extra DSN parameters if they are set. - for k, v := range s.MySQLOptions.ExtraDSNParams { + for k, v := range a.MySQLOptions.ExtraDSNParams { cfg.Params[k] = v } } @@ -593,26 +598,26 @@ func (s *Agent) DSN(service *Service, dsnParams DSNParams, tdp *DelimiterPair, p cfg.Timeout = dsnParams.DialTimeout cfg.DBName = dsnParams.Database cfg.Params = make(map[string]string) - if s.TLS { + if a.TLS { // It is mandatory to have "custom" as the first case. // Except case for backward compatibility. // Skip verify for "custom" is handled on pmm-agent side. switch { // Backward compatibility - case pmmAgentVersion != nil && s.TLSSkipVerify && pmmAgentVersion.Less(v2_42): + case pmmAgentVersion != nil && a.TLSSkipVerify && pmmAgentVersion.Less(v2_42): cfg.Params["tls"] = skipVerify - case len(s.Files()) != 0: + case len(a.Files()) != 0: cfg.Params["tls"] = "custom" - case s.TLSSkipVerify: + case a.TLSSkipVerify: cfg.Params["tls"] = skipVerify default: cfg.Params["tls"] = trueStr } } - if s.MySQLOptions.ExtraDSNParams != nil { + if a.MySQLOptions.ExtraDSNParams != nil { // Add extra DSN parameters if they are set. - for k, v := range s.MySQLOptions.ExtraDSNParams { + for k, v := range a.MySQLOptions.ExtraDSNParams { cfg.Params[k] = v } } @@ -639,8 +644,8 @@ func (s *Agent) DSN(service *Service, dsnParams DSNParams, tdp *DelimiterPair, p cfg.Timeout = dsnParams.DialTimeout cfg.DBName = dsnParams.Database cfg.Params = make(map[string]string) - if s.TLS { - if s.TLSSkipVerify { + if a.TLS { + if a.TLSSkipVerify { cfg.Params["tls"] = "skip-verify" } else { cfg.Params["tls"] = trueStr @@ -672,27 +677,27 @@ func (s *Agent) DSN(service *Service, dsnParams DSNParams, tdp *DelimiterPair, p // prevents driver from switching to Primary node. q.Add("directConnection", trueStr) - if s.TLS { + if a.TLS { q.Add("ssl", trueStr) - if s.TLSSkipVerify { + if a.TLSSkipVerify { q.Add("tlsInsecure", trueStr) } } - if s.MongoDBOptions.TLSCertificateKey != "" { + if a.MongoDBOptions.TLSCertificateKey != "" { q.Add("tlsCertificateKeyFile", tdp.Left+".TextFiles."+certificateKeyFilePlaceholder+tdp.Right) } - if s.MongoDBOptions.TLSCertificateKeyFilePassword != "" { - q.Add("tlsCertificateKeyFilePassword", s.MongoDBOptions.TLSCertificateKeyFilePassword) + if a.MongoDBOptions.TLSCertificateKeyFilePassword != "" { + q.Add("tlsCertificateKeyFilePassword", a.MongoDBOptions.TLSCertificateKeyFilePassword) } - if s.MongoDBOptions.TLSCa != "" { + if a.MongoDBOptions.TLSCa != "" { q.Add("tlsCaFile", tdp.Left+".TextFiles."+caFilePlaceholder+tdp.Right) } - if s.MongoDBOptions.AuthenticationMechanism != "" { - q.Add("authMechanism", s.MongoDBOptions.AuthenticationMechanism) + if a.MongoDBOptions.AuthenticationMechanism != "" { + q.Add("authMechanism", a.MongoDBOptions.AuthenticationMechanism) } - if s.MongoDBOptions.AuthenticationDatabase != "" { - q.Add("authSource", s.MongoDBOptions.AuthenticationDatabase) + if a.MongoDBOptions.AuthenticationDatabase != "" { + q.Add("authSource", a.MongoDBOptions.AuthenticationDatabase) } address := socket @@ -721,8 +726,8 @@ func (s *Agent) DSN(service *Service, dsnParams DSNParams, tdp *DelimiterPair, p q := make(url.Values) sslmode := DisableSSLMode - if s.TLS { - if s.TLSSkipVerify { + if a.TLS { + if a.TLSSkipVerify { sslmode = RequireSSLMode } else { sslmode = VerifyCaSSLMode @@ -733,7 +738,7 @@ func (s *Agent) DSN(service *Service, dsnParams DSNParams, tdp *DelimiterPair, p } q.Set("sslmode", sslmode) - if files := s.Files(); len(files) != 0 { + if files := a.Files(); len(files) != 0 { for key := range files { switch key { case caFilePlaceholder: @@ -782,7 +787,7 @@ func (s *Agent) DSN(service *Service, dsnParams DSNParams, tdp *DelimiterPair, p case ValkeyExporterType: urlScheme := "redis" - if s.TLS { + if a.TLS { urlScheme += "s" } address := "" @@ -810,21 +815,41 @@ func (s *Agent) DSN(service *Service, dsnParams DSNParams, tdp *DelimiterPair, p return dsn default: - panic(fmt.Errorf("unhandled AgentType %q", s.AgentType)) + panic(fmt.Errorf("unhandled AgentType %q", a.AgentType)) } } +// EffectiveDialTimeout returns the database connection timeout for DSN generation. +// Returns ExporterOptions.ConnectionTimeout if set, otherwise default based on agent type. +// +// Defaults: mysqld/mongodb/proxysql/postgres (2s), valkey (3s). +// +// Postgres on RDS/Azure uses 5s default but handled in postgresql.go (needs Node context). +// +// Exporters without DB connection (node, rds, azure, external) don't use this. +func (a *Agent) EffectiveDialTimeout() time.Duration { + if a.ExporterOptions.ConnectionTimeout != nil { + return *a.ExporterOptions.ConnectionTimeout + } + + if a.AgentType == ValkeyExporterType { + return valkeyDialTimeout + } + + return defaultDialTimeout +} + // ExporterURL composes URL to an external exporter. -func (s *Agent) ExporterURL(q *reform.Querier) (string, error) { - scheme := s.ExporterOptions.MetricsScheme - path := s.ExporterOptions.MetricsPath - listenPort := int(pointer.GetUint16(s.ListenPort)) - username := pointer.GetString(s.Username) - password := pointer.GetString(s.Password) +func (a *Agent) ExporterURL(q *reform.Querier) (string, error) { + scheme := a.ExporterOptions.MetricsScheme + path := a.ExporterOptions.MetricsPath + listenPort := int(pointer.GetUint16(a.ListenPort)) + username := pointer.GetString(a.Username) + password := pointer.GetString(a.Password) host := "127.0.0.1" - if !s.ExporterOptions.PushMetrics { - node, err := FindNodeByID(q, *s.RunsOnNodeID) + if !a.ExporterOptions.PushMetrics { + node, err := FindNodeByID(q, *a.RunsOnNodeID) if err != nil { return "", err } @@ -856,20 +881,20 @@ func (s *Agent) ExporterURL(q *reform.Querier) (string, error) { } // IsMySQLTablestatsGroupEnabled returns true if mysqld_exporter tablestats group collectors should be enabled. -func (s *Agent) IsMySQLTablestatsGroupEnabled() bool { - if s.AgentType != MySQLdExporterType { - panic(fmt.Errorf("unhandled AgentType %q", s.AgentType)) +func (a *Agent) IsMySQLTablestatsGroupEnabled() bool { + if a.AgentType != MySQLdExporterType { + panic(fmt.Errorf("unhandled AgentType %q", a.AgentType)) } switch { - case s.MySQLOptions.TableCountTablestatsGroupLimit == 0: // server defined + case a.MySQLOptions.TableCountTablestatsGroupLimit == 0: // server defined return true - case s.MySQLOptions.TableCountTablestatsGroupLimit < 0: // always disabled + case a.MySQLOptions.TableCountTablestatsGroupLimit < 0: // always disabled return false - case s.MySQLOptions.TableCount == nil: // for compatibility with 2.0 + case a.MySQLOptions.TableCount == nil: // for compatibility with 2.0 return true default: - return *s.MySQLOptions.TableCount <= s.MySQLOptions.TableCountTablestatsGroupLimit + return *a.MySQLOptions.TableCount <= a.MySQLOptions.TableCountTablestatsGroupLimit } } @@ -998,10 +1023,10 @@ const webConfigTemplate = `basic_auth_users: ` // BuildWebConfigFile builds prometheus-compatible basic auth configuration. -func (s *Agent) BuildWebConfigFile() (string, error) { +func (a *Agent) BuildWebConfigFile() (string, error) { // If not provided by the user, it is the `agent_id`. - password := s.GetAgentPassword() - salt := getPasswordSalt(s) + password := a.GetAgentPassword() + salt := getPasswordSalt(a) hashedPassword, err := HashPassword(password, salt) if err != nil { @@ -1022,9 +1047,9 @@ func (s *Agent) BuildWebConfigFile() (string, error) { return config, nil } -func getPasswordSalt(s *Agent) string { - if s.AgentID != "" && len(s.AgentID) >= bcrypt.MaxSaltSize { - return s.AgentID[len(s.AgentID)-bcrypt.MaxSaltSize:] +func getPasswordSalt(a *Agent) string { + if a.AgentID != "" && len(a.AgentID) >= bcrypt.MaxSaltSize { + return a.AgentID[len(a.AgentID)-bcrypt.MaxSaltSize:] } return "pmm-salt-magic--" diff --git a/managed/models/agent_model_test.go b/managed/models/agent_model_test.go index 7d0c7c7ca70..dd75842825d 100644 --- a/managed/models/agent_model_test.go +++ b/managed/models/agent_model_test.go @@ -22,7 +22,6 @@ import ( "time" "github.com/AlekSi/pointer" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gopkg.in/reform.v1" "gopkg.in/reform.v1/dialects/postgresql" @@ -43,7 +42,7 @@ func TestAgent(t *testing.T) { "agent_id": "agent_id", "foo": "bar", } - assert.Equal(t, expected, actual) + require.Equal(t, expected, actual) }) t.Run("DSN", func(t *testing.T) { @@ -71,15 +70,15 @@ func TestAgent(t *testing.T) { } { t.Run(string(typ), func(t *testing.T) { agent.AgentType = typ - assert.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) } t.Run("MongoDBNoDatabase", func(t *testing.T) { agent.AgentType = models.MongoDBExporterType - assert.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", agent.DSN(service, models.DSNParams{DialTimeout: time.Second}, nil, nil)) - assert.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?directConnection=true", agent.DSN(service, models.DSNParams{}, nil, nil)) + require.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", agent.DSN(service, models.DSNParams{DialTimeout: time.Second}, nil, nil)) + require.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?directConnection=true", agent.DSN(service, models.DSNParams{}, nil, nil)) }) }) @@ -102,7 +101,7 @@ func TestAgent(t *testing.T) { } { t.Run(string(typ), func(t *testing.T) { agent.AgentType = typ - assert.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) } }) @@ -124,7 +123,7 @@ func TestAgent(t *testing.T) { } { t.Run(string(typ), func(t *testing.T) { agent.AgentType = typ - assert.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) } }) @@ -171,7 +170,7 @@ func TestAgent(t *testing.T) { } { t.Run(string(typ), func(t *testing.T) { agent.AgentType = typ - assert.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) } @@ -181,13 +180,13 @@ func TestAgent(t *testing.T) { agent.MongoDBOptions.TLSCertificateKeyFilePassword = "" agent.MongoDBOptions.AuthenticationMechanism = "" - assert.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000&ssl=true&tlsCaFile={{.TextFiles.caFilePlaceholder}}&tlsCertificateKeyFile={{.TextFiles.certificateKeyFilePlaceholder}}", agent.DSN(service, models.DSNParams{DialTimeout: time.Second}, nil, nil)) - assert.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?directConnection=true&ssl=true&tlsCaFile={{.TextFiles.caFilePlaceholder}}&tlsCertificateKeyFile={{.TextFiles.certificateKeyFilePlaceholder}}", agent.DSN(service, models.DSNParams{}, nil, nil)) + require.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000&ssl=true&tlsCaFile={{.TextFiles.caFilePlaceholder}}&tlsCertificateKeyFile={{.TextFiles.certificateKeyFilePlaceholder}}", agent.DSN(service, models.DSNParams{DialTimeout: time.Second}, nil, nil)) + require.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?directConnection=true&ssl=true&tlsCaFile={{.TextFiles.caFilePlaceholder}}&tlsCertificateKeyFile={{.TextFiles.certificateKeyFilePlaceholder}}", agent.DSN(service, models.DSNParams{}, nil, nil)) expectedFiles := map[string]string{ "caFilePlaceholder": "cert", "certificateKeyFilePlaceholder": "key", } - assert.Equal(t, expectedFiles, agent.Files()) + require.Equal(t, expectedFiles, agent.Files()) }) t.Run("MongoDB Auth Database", func(t *testing.T) { @@ -197,13 +196,13 @@ func TestAgent(t *testing.T) { agent.MongoDBOptions.AuthenticationMechanism = "MONGO-X509" agent.MongoDBOptions.AuthenticationDatabase = "$external" - assert.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?authMechanism=MONGO-X509&authSource=%24external&connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000&ssl=true&tlsCaFile={{.TextFiles.caFilePlaceholder}}&tlsCertificateKeyFile={{.TextFiles.certificateKeyFilePlaceholder}}", agent.DSN(service, models.DSNParams{DialTimeout: time.Second}, nil, nil)) - assert.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?authMechanism=MONGO-X509&authSource=%24external&directConnection=true&ssl=true&tlsCaFile={{.TextFiles.caFilePlaceholder}}&tlsCertificateKeyFile={{.TextFiles.certificateKeyFilePlaceholder}}", agent.DSN(service, models.DSNParams{}, nil, nil)) + require.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?authMechanism=MONGO-X509&authSource=%24external&connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000&ssl=true&tlsCaFile={{.TextFiles.caFilePlaceholder}}&tlsCertificateKeyFile={{.TextFiles.certificateKeyFilePlaceholder}}", agent.DSN(service, models.DSNParams{DialTimeout: time.Second}, nil, nil)) + require.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?authMechanism=MONGO-X509&authSource=%24external&directConnection=true&ssl=true&tlsCaFile={{.TextFiles.caFilePlaceholder}}&tlsCertificateKeyFile={{.TextFiles.certificateKeyFilePlaceholder}}", agent.DSN(service, models.DSNParams{}, nil, nil)) expectedFiles := map[string]string{ "caFilePlaceholder": "cert", "certificateKeyFilePlaceholder": "key", } - assert.Equal(t, expectedFiles, agent.Files()) + require.Equal(t, expectedFiles, agent.Files()) }) }) @@ -234,15 +233,15 @@ func TestAgent(t *testing.T) { } { t.Run(string(typ), func(t *testing.T) { agent.AgentType = typ - assert.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) } t.Run("MongoDBNoDatabase", func(t *testing.T) { agent.AgentType = models.MongoDBExporterType - assert.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000&ssl=true&tlsInsecure=true", agent.DSN(service, models.DSNParams{DialTimeout: time.Second}, nil, nil)) - assert.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?directConnection=true&ssl=true&tlsInsecure=true", agent.DSN(service, models.DSNParams{}, nil, nil)) + require.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000&ssl=true&tlsInsecure=true", agent.DSN(service, models.DSNParams{DialTimeout: time.Second}, nil, nil)) + require.Equal(t, "mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345/?directConnection=true&ssl=true&tlsInsecure=true", agent.DSN(service, models.DSNParams{}, nil, nil)) }) }) } @@ -274,13 +273,13 @@ func TestPostgresAgentTLS(t *testing.T) { t.Run(name, func(t *testing.T) { agent.TLS = testCase.tls agent.TLSSkipVerify = testCase.tlsSkipVerify - assert.Equal(t, testCase.expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, testCase.expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) t.Run(fmt.Sprintf("AutodiscoveryLimit set TLS:%v/TLSSkipVerify:%v", testCase.tls, testCase.tlsSkipVerify), func(t *testing.T) { agent.TLS = testCase.tls agent.TLSSkipVerify = testCase.tlsSkipVerify agent.PostgreSQLOptions = models.PostgreSQLOptions{AutoDiscoveryLimit: pointer.ToInt32(10)} - assert.Equal(t, testCase.expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, testCase.expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) } } @@ -301,7 +300,7 @@ func TestValkey(t *testing.T) { expected := "redis://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345" - assert.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) t.Run("Valkey DSN with TLS", func(t *testing.T) { @@ -324,7 +323,7 @@ func TestValkey(t *testing.T) { expected := "rediss://username:s3cur3%20p%40$$w0r4.@1.2.3.4:12345" - assert.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, expected, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) } @@ -342,7 +341,7 @@ func TestPostgresWithSocket(t *testing.T) { Socket: pointer.ToString("/var/run/postgres"), } expect := "postgres://username@/database?connect_timeout=1&host=%2Fvar%2Frun%2Fpostgres&sslmode=verify-ca" - assert.Equal(t, expect, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, expect, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) t.Run("empty-user-password", func(t *testing.T) { @@ -355,7 +354,7 @@ func TestPostgresWithSocket(t *testing.T) { Socket: pointer.ToString("/var/run/postgres"), } expect := "postgres:///database?connect_timeout=1&host=%2Fvar%2Frun%2Fpostgres&sslmode=disable" - assert.Equal(t, expect, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, expect, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) t.Run("dir-with-symbols", func(t *testing.T) { @@ -368,7 +367,7 @@ func TestPostgresWithSocket(t *testing.T) { Socket: pointer.ToString(`/tmp/123\ A0m\%\$\@\8\,\+\-`), } expect := "postgres:///database?connect_timeout=1&host=%2Ftmp%2F123%5C+A0m%5C%25%5C%24%5C%40%5C8%5C%2C%5C%2B%5C-&sslmode=disable" - assert.Equal(t, expect, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, expect, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) } @@ -386,7 +385,7 @@ func TestMongoWithSocket(t *testing.T) { Socket: pointer.ToString("/tmp/mongodb-27017.sock"), } expect := "mongodb://username@%2Ftmp%2Fmongodb-27017.sock/database?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000&ssl=true" - assert.Equal(t, expect, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, expect, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) t.Run("empty-user-password", func(t *testing.T) { @@ -399,7 +398,7 @@ func TestMongoWithSocket(t *testing.T) { Socket: pointer.ToString("/tmp/mongodb-27017.sock"), } expect := "mongodb://%2Ftmp%2Fmongodb-27017.sock/database?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000" - assert.Equal(t, expect, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, expect, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) t.Run("dir-with-symbols", func(t *testing.T) { @@ -412,7 +411,7 @@ func TestMongoWithSocket(t *testing.T) { Socket: pointer.ToString(`/tmp/123\ A0m\%\$\@\8\,\+\-/mongodb-27017.sock`), } expect := "mongodb://%2Ftmp%2F123%5C%20A0m%5C%25%5C$%5C%40%5C8%5C,%5C+%5C-%2Fmongodb-27017.sock/database?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000" - assert.Equal(t, expect, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) + require.Equal(t, expect, agent.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: "database"}, nil, nil)) }) } @@ -444,7 +443,7 @@ func TestIsMySQLTablestatsGroupEnabled(t *testing.T) { TableCountTablestatsGroupLimit: testCase.limit, }, } - assert.Equal(t, testCase.expected, agent.IsMySQLTablestatsGroupEnabled()) + require.Equal(t, testCase.expected, agent.IsMySQLTablestatsGroupEnabled()) }) } } @@ -614,11 +613,82 @@ func TestExporterURL(t *testing.T) { } { t.Run(agentID, func(t *testing.T) { agent, err := models.FindAgentByID(q, agentID) - assert.NoError(t, err) + require.NoError(t, err) actual, err := agent.ExporterURL(q) - assert.NoError(t, err) - assert.Equal(t, expected, actual) + require.NoError(t, err) + require.Equal(t, expected, actual) }) } }) } + +func TestEffectiveDialTimeout(t *testing.T) { + t.Parallel() + + custom := 7 * time.Second + t.Run("explicit ExporterOptions.ConnectionTimeout", func(t *testing.T) { + t.Parallel() + a := &models.Agent{ + AgentType: models.QANMySQLPerfSchemaAgentType, + ExporterOptions: models.ExporterOptions{ + ConnectionTimeout: &custom, + }, + } + require.Equal(t, custom, a.EffectiveDialTimeout()) + }) + + t.Run("exporters with 2s default", func(t *testing.T) { + t.Parallel() + + for _, typ := range []models.AgentType{ + models.MySQLdExporterType, + models.MongoDBExporterType, + models.PostgresExporterType, + models.ProxySQLExporterType, + } { + t.Run(string(typ), func(t *testing.T) { + t.Parallel() + a := &models.Agent{AgentType: typ} + require.Equal(t, 2*time.Second, a.EffectiveDialTimeout()) + }) + } + }) + + t.Run("valkey_exporter returns 3s default", func(t *testing.T) { + t.Parallel() + a := &models.Agent{AgentType: models.ValkeyExporterType} + require.Equal(t, 3*time.Second, a.EffectiveDialTimeout()) + }) + + t.Run("non-exporter agent falls back to 2s", func(t *testing.T) { + t.Parallel() + a := &models.Agent{AgentType: models.QANMySQLPerfSchemaAgentType} + require.Equal(t, 2*time.Second, a.EffectiveDialTimeout()) + }) +} + +func TestExporterOptionsIsEmpty(t *testing.T) { + t.Parallel() + + t.Run("nil connection timeout is empty", func(t *testing.T) { + t.Parallel() + + require.True(t, (models.ExporterOptions{}).IsEmpty()) + }) + + t.Run("zero connection timeout is empty", func(t *testing.T) { + t.Parallel() + + require.True(t, (models.ExporterOptions{ + ConnectionTimeout: pointer.ToDuration(0), + }).IsEmpty()) + }) + + t.Run("non-zero connection timeout is not empty", func(t *testing.T) { + t.Parallel() + + require.False(t, (models.ExporterOptions{ + ConnectionTimeout: pointer.ToDuration(time.Second), + }).IsEmpty()) + }) +} diff --git a/managed/models/database.go b/managed/models/database.go index 85c11fac28e..7432a046fd1 100644 --- a/managed/models/database.go +++ b/managed/models/database.go @@ -1570,7 +1570,7 @@ func setupPMMServerHAAgents(q *reform.Querier, params SetupDBParams) error { return err } - if _, err = CreateNodeExporter(q, agent.AgentID, labels, false, false, []string{}, nil, ""); err != nil { + if _, err = CreateNodeExporter(q, agent.AgentID, labels, false, false, []string{}, nil, "", nil); err != nil { return err } @@ -1601,7 +1601,7 @@ func setupPMMServerAgents(q *reform.Querier, params SetupDBParams) error { if _, err = createPMMAgentWithID(q, PMMServerAgentID, node.NodeID, nil); err != nil { return err } - if _, err = CreateNodeExporter(q, PMMServerAgentID, nil, false, false, []string{}, nil, ""); err != nil { + if _, err = CreateNodeExporter(q, PMMServerAgentID, nil, false, false, []string{}, nil, "", nil); err != nil { return err } diff --git a/managed/models/dsn_helpers.go b/managed/models/dsn_helpers.go index f49d47c90a0..9cd7b6c054a 100644 --- a/managed/models/dsn_helpers.go +++ b/managed/models/dsn_helpers.go @@ -89,6 +89,14 @@ func FindDSNByServiceIDandPMMAgentID(q *reform.Querier, serviceID, pmmAgentID, d if len(fexp) == 1 { agent := fexp[0] pmmAgentVersion := ExtractPmmAgentVersionFromAgent(q, agent) + + // Only the exporter agent types searched above use custom dial timeout here. + switch agent.AgentType { + case MySQLdExporterType, MongoDBExporterType, PostgresExporterType: + dsnParams.DialTimeout = agent.EffectiveDialTimeout() + default: + } + return agent.DSN(svc, dsnParams, nil, pmmAgentVersion), agent, nil } if len(fexp) > 1 { diff --git a/managed/models/dsn_helpers_test.go b/managed/models/dsn_helpers_test.go index d739283c3ae..74125129d3d 100644 --- a/managed/models/dsn_helpers_test.go +++ b/managed/models/dsn_helpers_test.go @@ -202,7 +202,7 @@ func TestFindDSNByServiceID(t *testing.T) { dsn, agent, err := models.FindDSNByServiceIDandPMMAgentID(q, "S1", "PA1", "test") require.NoError(t, err) - expected := "unix(/var/run/mysqld/mysqld.sock)/test?timeout=1s" + expected := "unix(/var/run/mysqld/mysqld.sock)/test?timeout=2s" assert.Equal(t, expected, dsn) assert.NotNil(t, agent) }) @@ -213,9 +213,9 @@ func TestFindDSNByServiceID(t *testing.T) { dsn, agent, err := models.FindDSNByServiceIDandPMMAgentID(q, "S4", "PA2", "test") require.NoError(t, err) - expected := "mongodb://pmm-user%7B%7B@127.0.0.1:27017/test?connectTimeoutMS=1000" + + expected := "mongodb://pmm-user%7B%7B@127.0.0.1:27017/test?connectTimeoutMS=2000" + "&directConnection=true" + - "&serverSelectionTimeoutMS=1000&ssl=true" + + "&serverSelectionTimeoutMS=2000&ssl=true" + "&tlsCaFile=[[.TextFiles.caFilePlaceholder]]" + "&tlsCertificateKeyFile=[[.TextFiles.certificateKeyFilePlaceholder]]" + "&tlsCertificateKeyFilePassword=passwordoftls" diff --git a/managed/services/agents/mongodb.go b/managed/services/agents/mongodb.go index 286d8773f7e..e199ed32667 100644 --- a/managed/services/agents/mongodb.go +++ b/managed/services/agents/mongodb.go @@ -64,7 +64,7 @@ func mongodbExporterConfig(node *models.Node, service *models.Service, exporter return nil, err } env := []string{ - fmt.Sprintf("MONGODB_URI=%s", exporter.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: database}, tdp, pmmAgentVersion)), + fmt.Sprintf("MONGODB_URI=%s", exporter.DSN(service, models.DSNParams{DialTimeout: exporter.EffectiveDialTimeout(), Database: database}, tdp, pmmAgentVersion)), } res := &agentv1.SetStateRequest_AgentProcess{ diff --git a/managed/services/agents/mongodb_test.go b/managed/services/agents/mongodb_test.go index 6e15713a4a1..6dbe34a18ed 100644 --- a/managed/services/agents/mongodb_test.go +++ b/managed/services/agents/mongodb_test.go @@ -62,7 +62,7 @@ func TestMongodbExporterConfig225(t *testing.T) { "--web.listen-address=0.0.0.0:{{ .listen_port }}", }, Env: []string{ - "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", + "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=2000&directConnection=true&serverSelectionTimeoutMS=2000", "HTTP_AUTH=pmm:agent-password", }, RedactWords: []string{"s3cur3 p@$$w0r4.", "agent-password"}, @@ -125,7 +125,7 @@ func TestMongodbExporterConfig226(t *testing.T) { "--web.listen-address=0.0.0.0:{{ .listen_port }}", }, Env: []string{ - "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", + "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=2000&directConnection=true&serverSelectionTimeoutMS=2000", "HTTP_AUTH=pmm:agent-password", }, RedactWords: []string{"s3cur3 p@$$w0r4.", "agent-password"}, @@ -274,7 +274,7 @@ func TestMongodbExporterConfig2411(t *testing.T) { "--web.config={{ .TextFiles.webConfig }}", }, Env: []string{ - "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", + "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=2000&directConnection=true&serverSelectionTimeoutMS=2000", }, RedactWords: []string{"s3cur3 p@$$w0r4.", "agent-password"}, TextFiles: map[string]string{ @@ -465,7 +465,7 @@ func TestMongodbExporterConfig2432(t *testing.T) { "--web.config={{ .TextFiles.webConfig }}", }, Env: []string{ - "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", + "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=2000&directConnection=true&serverSelectionTimeoutMS=2000", }, RedactWords: []string{"s3cur3 p@$$w0r4.", "agent-password"}, TextFiles: map[string]string{ @@ -544,7 +544,7 @@ func TestMongodbExporterConfig(t *testing.T) { "--web.listen-address=0.0.0.0:{{ .listen_port }}", }, Env: []string{ - "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", + "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=2000&directConnection=true&serverSelectionTimeoutMS=2000", "HTTP_AUTH=pmm:agent-password", }, RedactWords: []string{"s3cur3 p@$$w0r4.", "agent-password"}, @@ -559,14 +559,14 @@ func TestMongodbExporterConfig(t *testing.T) { exporter.Password = nil actual, err := mongodbExporterConfig(node, mongodb, exporter, exposeSecrets, pmmAgentVersion) require.NoError(t, err) - assert.Equal(t, "MONGODB_URI=mongodb://username@1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", actual.Env[0]) + assert.Equal(t, "MONGODB_URI=mongodb://username@1.2.3.4:27017/?connectTimeoutMS=2000&directConnection=true&serverSelectionTimeoutMS=2000", actual.Env[0]) }) t.Run("EmptyUsername", func(t *testing.T) { exporter.Username = nil actual, err := mongodbExporterConfig(node, mongodb, exporter, exposeSecrets, pmmAgentVersion) require.NoError(t, err) - assert.Equal(t, "MONGODB_URI=mongodb://1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", actual.Env[0]) + assert.Equal(t, "MONGODB_URI=mongodb://1.2.3.4:27017/?connectTimeoutMS=2000&directConnection=true&serverSelectionTimeoutMS=2000", actual.Env[0]) }) t.Run("SSLEnabled", func(t *testing.T) { exporter.TLS = true @@ -576,7 +576,7 @@ func TestMongodbExporterConfig(t *testing.T) { TLSCa: "content-of-tls-ca", } actual, err := mongodbExporterConfig(node, mongodb, exporter, exposeSecrets, pmmAgentVersion) - expected := "MONGODB_URI=mongodb://1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000&ssl=true&" + + expected := "MONGODB_URI=mongodb://1.2.3.4:27017/?connectTimeoutMS=2000&directConnection=true&serverSelectionTimeoutMS=2000&ssl=true&" + "tlsCaFile={{.TextFiles.caFilePlaceholder}}&tlsCertificateKeyFile={{.TextFiles.certificateKeyFilePlaceholder}}&tlsCertificateKeyFilePassword=passwordoftls" assert.Equal(t, expected, actual.Env[0]) expectedFiles := map[string]string{ @@ -598,9 +598,9 @@ func TestMongodbExporterConfig(t *testing.T) { } actual, err := mongodbExporterConfig(node, mongodb, exporter, exposeSecrets, pmmAgentVersion) expected := `MONGODB_URI=mongodb://1.2.3.4:27017/$external?authMechanism=MONGODB-X509` + - `&authSource=%24external&connectTimeoutMS=1000` + + `&authSource=%24external&connectTimeoutMS=2000` + `&directConnection=true` + - `&serverSelectionTimeoutMS=1000` + + `&serverSelectionTimeoutMS=2000` + `&ssl=true` + `&tlsCaFile={{.TextFiles.caFilePlaceholder}}` + `&tlsCertificateKeyFile={{.TextFiles.certificateKeyFilePlaceholder}}` + @@ -666,7 +666,7 @@ func TestNewMongodbExporterConfig(t *testing.T) { "--web.listen-address=0.0.0.0:{{ .listen_port }}", }, Env: []string{ - "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", + "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=2000&directConnection=true&serverSelectionTimeoutMS=2000", "HTTP_AUTH=pmm:agent-id", }, RedactWords: []string{"s3cur3 p@$$w0r4."}, @@ -680,14 +680,23 @@ func TestNewMongodbExporterConfig(t *testing.T) { exporter.Password = nil actual, err := mongodbExporterConfig(node, mongodb, exporter, exposeSecrets, pmmAgentVersion) require.NoError(t, err) - assert.Equal(t, "MONGODB_URI=mongodb://username@1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", actual.Env[0]) + assert.Equal(t, "MONGODB_URI=mongodb://username@1.2.3.4:27017/?connectTimeoutMS=2000&directConnection=true&serverSelectionTimeoutMS=2000", actual.Env[0]) }) t.Run("EmptyUsername", func(t *testing.T) { exporter.Username = nil actual, err := mongodbExporterConfig(node, mongodb, exporter, exposeSecrets, pmmAgentVersion) require.NoError(t, err) - assert.Equal(t, "MONGODB_URI=mongodb://1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", actual.Env[0]) + assert.Equal(t, "MONGODB_URI=mongodb://1.2.3.4:27017/?connectTimeoutMS=2000&directConnection=true&serverSelectionTimeoutMS=2000", actual.Env[0]) + }) + + t.Run("ConnectionTimeout", func(t *testing.T) { + exporter.ExporterOptions = models.ExporterOptions{ + ConnectionTimeout: pointer.ToDuration(1 * time.Minute), + } + actual, err := mongodbExporterConfig(node, mongodb, exporter, exposeSecrets, pmmAgentVersion) + require.NoError(t, err) + assert.Equal(t, "MONGODB_URI=mongodb://1.2.3.4:27017/?connectTimeoutMS=60000&directConnection=true&serverSelectionTimeoutMS=60000", actual.Env[0]) }) } @@ -725,7 +734,7 @@ func TestMongodbExporterConfig228_WebConfigAuth(t *testing.T) { } expectedEnv := []string{ - "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", + "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=2000&directConnection=true&serverSelectionTimeoutMS=2000", } t.Run("Custom_Password", func(t *testing.T) { diff --git a/managed/services/agents/mysql.go b/managed/services/agents/mysql.go index 21ab987e7a4..4798897b448 100644 --- a/managed/services/agents/mysql.go +++ b/managed/services/agents/mysql.go @@ -18,6 +18,7 @@ package agents import ( "bytes" "fmt" + "math" "sort" "text/template" "time" @@ -149,13 +150,17 @@ func mysqldExporterConfig( TextFiles: textFiles, } + // MySQL client connection timeout is configured in whole seconds, so round up + // once here and reuse the normalized value for both my.cnf and legacy DSN paths. + roundedConnectionTimeout := time.Second * time.Duration(max(1, int(math.Ceil(exporter.EffectiveDialTimeout().Seconds())))) + if pmmAgentVersion.IsFeatureSupported(version.MysqlExporterV0_17_2) { if textFiles == nil { textFiles = make(map[string]string) } res.TextFiles = textFiles - cfg, err := buildMyCnfConfig(service, exporter, textFiles) + cfg, err := buildMyCnfConfig(service, exporter, textFiles, roundedConnectionTimeout) if err != nil { return nil, err } @@ -167,7 +172,7 @@ func mysqldExporterConfig( } } else { env := []string{ - fmt.Sprintf("DATA_SOURCE_NAME=%s", exporter.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: ""}, nil, pmmAgentVersion)), + fmt.Sprintf("DATA_SOURCE_NAME=%s", exporter.DSN(service, models.DSNParams{DialTimeout: roundedConnectionTimeout, Database: ""}, nil, pmmAgentVersion)), fmt.Sprintf("HTTP_AUTH=pmm:%s", exporter.GetAgentPassword()), } res.Env = env @@ -226,6 +231,7 @@ const myCnfTemplate = `[client] {{if .User}}user={{ .User }}{{end}} {{if .Password}}password={{ .Password }}{{end}} {{if .Socket}}socket={{ .Socket }}{{end}} +{{if .ConnectTimeout}}connect_timeout={{ .ConnectTimeout }}{{end}} {{if .CaFile}}ssl-ca={{ .CaFile }}{{end}} {{if .CertFile}}ssl-cert={{ .CertFile }}{{end}} {{if .KeyFile}}ssl-key={{ .KeyFile }}{{end}} @@ -233,7 +239,7 @@ const myCnfTemplate = `[client] ` // buildMyCnfConfig builds my.cnf configuration for MySQL connection. -func buildMyCnfConfig(service *models.Service, agent *models.Agent, files map[string]string) (string, error) { +func buildMyCnfConfig(service *models.Service, agent *models.Agent, files map[string]string, connectTimeout time.Duration) (string, error) { tmpl, err := template.New("myCnf").Parse(myCnfTemplate) if err != nil { return "", fmt.Errorf("failed to parse myCnf template: %w", err) @@ -247,16 +253,18 @@ func buildMyCnfConfig(service *models.Service, agent *models.Agent, files map[st Socket string Host string Port int + ConnectTimeout int CaFile string CertFile string KeyFile string EnableClearTextPassword bool MyCnfPath string }{ - User: pointer.GetString(agent.Username), - Password: pointer.GetString(agent.Password), - Host: pointer.GetString(service.Address), - Port: int(pointer.GetUint16(service.Port)), + User: pointer.GetString(agent.Username), + Password: pointer.GetString(agent.Password), + Host: pointer.GetString(service.Address), + Port: int(pointer.GetUint16(service.Port)), + ConnectTimeout: max(1, int(connectTimeout.Seconds())), } if files["tlsCa"] != "" { diff --git a/managed/services/agents/mysql_test.go b/managed/services/agents/mysql_test.go index 3a709970832..3e4ffe14f2a 100644 --- a/managed/services/agents/mysql_test.go +++ b/managed/services/agents/mysql_test.go @@ -17,6 +17,7 @@ package agents import ( "testing" + "time" "github.com/AlekSi/pointer" "github.com/stretchr/testify/assert" @@ -93,7 +94,7 @@ func TestMySQLdExporterConfig(t *testing.T) { "--web.listen-address=0.0.0.0:{{ .listen_port }}", }, Env: []string{ - "DATA_SOURCE_NAME=username:s3cur3 p@$$w0r4.@tcp(1.2.3.4:3306)/?timeout=1s", + "DATA_SOURCE_NAME=username:s3cur3 p@$$w0r4.@tcp(1.2.3.4:3306)/?timeout=2s", "HTTP_AUTH=pmm:agent-password", }, RedactWords: []string{"s3cur3 p@$$w0r4.", "agent-password"}, @@ -108,14 +109,14 @@ func TestMySQLdExporterConfig(t *testing.T) { exporter.Password = nil actual, err := mysqldExporterConfig(node, mysql, exporter, exposeSecrets, pmmAgentVersion) require.NoError(t, err) - assert.Equal(t, "DATA_SOURCE_NAME=username@tcp(1.2.3.4:3306)/?timeout=1s", actual.Env[0]) + assert.Equal(t, "DATA_SOURCE_NAME=username@tcp(1.2.3.4:3306)/?timeout=2s", actual.Env[0]) }) t.Run("EmptyUsername", func(t *testing.T) { exporter.Username = nil actual, err := mysqldExporterConfig(node, mysql, exporter, exposeSecrets, pmmAgentVersion) require.NoError(t, err) - assert.Equal(t, "DATA_SOURCE_NAME=tcp(1.2.3.4:3306)/?timeout=1s", actual.Env[0]) + assert.Equal(t, "DATA_SOURCE_NAME=tcp(1.2.3.4:3306)/?timeout=2s", actual.Env[0]) }) t.Run("SSLEnabled", func(t *testing.T) { @@ -126,7 +127,7 @@ func TestMySQLdExporterConfig(t *testing.T) { TLSKey: "content-of-tls-key", } actual, err := mysqldExporterConfig(node, mysql, exporter, exposeSecrets, pmmAgentVersion) - expected := "DATA_SOURCE_NAME=tcp(1.2.3.4:3306)/?timeout=1s&tls=custom" + expected := "DATA_SOURCE_NAME=tcp(1.2.3.4:3306)/?timeout=2s&tls=custom" assert.Equal(t, expected, actual.Env[0]) expectedFiles := map[string]string{ "tlsCa": exporter.MySQLOptions.TLSCa, @@ -219,7 +220,7 @@ func TestMySQLdExporterConfigTablestatsGroupDisabled(t *testing.T) { "--web.listen-address=0.0.0.0:{{ .listen_port }}", }, Env: []string{ - "DATA_SOURCE_NAME=username:s3cur3 p@$$w0r4.@tcp(1.2.3.4:3306)/?timeout=1s&tls=custom", + "DATA_SOURCE_NAME=username:s3cur3 p@$$w0r4.@tcp(1.2.3.4:3306)/?timeout=2s&tls=custom", "HTTP_AUTH=pmm:agent-id", }, RedactWords: []string{"s3cur3 p@$$w0r4.", "content-of-tls-key"}, @@ -239,14 +240,14 @@ func TestMySQLdExporterConfigTablestatsGroupDisabled(t *testing.T) { exporter.Password = nil actual, err := mysqldExporterConfig(node, mysql, exporter, exposeSecrets, pmmAgentVersion) require.NoError(t, err) - assert.Equal(t, "DATA_SOURCE_NAME=username@tcp(1.2.3.4:3306)/?timeout=1s&tls=custom", actual.Env[0]) + assert.Equal(t, "DATA_SOURCE_NAME=username@tcp(1.2.3.4:3306)/?timeout=2s&tls=custom", actual.Env[0]) }) t.Run("EmptyUsername", func(t *testing.T) { exporter.Username = nil actual, err := mysqldExporterConfig(node, mysql, exporter, exposeSecrets, pmmAgentVersion) require.NoError(t, err) - assert.Equal(t, "DATA_SOURCE_NAME=tcp(1.2.3.4:3306)/?timeout=1s&tls=custom", actual.Env[0]) + assert.Equal(t, "DATA_SOURCE_NAME=tcp(1.2.3.4:3306)/?timeout=2s&tls=custom", actual.Env[0]) }) t.Run("V236_EnablesPluginCollector", func(t *testing.T) { @@ -326,7 +327,7 @@ func TestMySQLdExporterConfigDisabledCollectors(t *testing.T) { "--web.listen-address=0.0.0.0:{{ .listen_port }}", }, Env: []string{ - "DATA_SOURCE_NAME=username:s3cur3 p@$$w0r4.@tcp(1.2.3.4:3306)/?timeout=1s", + "DATA_SOURCE_NAME=username:s3cur3 p@$$w0r4.@tcp(1.2.3.4:3306)/?timeout=2s", "HTTP_AUTH=pmm:agent-id", }, RedactWords: []string{"s3cur3 p@$$w0r4."}, @@ -412,7 +413,7 @@ func TestMySQLdExporterConfigMySQL8Support(t *testing.T) { }, RedactWords: []string{"s3cur3 p@$$w0r4.", "agent-password", "content-of-tls-key"}, TextFiles: map[string]string{ - "myCnf": "[client]\nhost=1.2.3.4\nport=3306\nuser=username\npassword=s3cur3 p@$$w0r4.\n\nssl-ca={{ .TextFiles.tlsCa }}\nssl-cert={{ .TextFiles.tlsCert }}\nssl-key={{ .TextFiles.tlsKey }}\n\n", + "myCnf": "[client]\nhost=1.2.3.4\nport=3306\nuser=username\npassword=s3cur3 p@$$w0r4.\n\nconnect_timeout=2\nssl-ca={{ .TextFiles.tlsCa }}\nssl-cert={{ .TextFiles.tlsCert }}\nssl-key={{ .TextFiles.tlsKey }}\n\n", "tlsCa": "content-of-tls-ca", "tlsCert": "content-of-tls-certificate-key", "tlsKey": "content-of-tls-key", @@ -477,7 +478,7 @@ func TestMySQLdExporterConfigMySQL8Support(t *testing.T) { }, RedactWords: []string{"agent-password", "content-of-tls-key"}, TextFiles: map[string]string{ - "myCnf": "[client]\nhost=1.2.3.4\nport=3306\nuser=username\n\n\nssl-ca={{ .TextFiles.tlsCa }}\nssl-cert={{ .TextFiles.tlsCert }}\nssl-key={{ .TextFiles.tlsKey }}\n\n", + "myCnf": "[client]\nhost=1.2.3.4\nport=3306\nuser=username\n\n\nconnect_timeout=2\nssl-ca={{ .TextFiles.tlsCa }}\nssl-cert={{ .TextFiles.tlsCert }}\nssl-key={{ .TextFiles.tlsKey }}\n\n", "tlsCa": "content-of-tls-ca", "tlsCert": "content-of-tls-certificate-key", "tlsKey": "content-of-tls-key", @@ -540,7 +541,7 @@ func TestMySQLdExporterConfigMySQL8Support(t *testing.T) { "--web.config.file={{ .TextFiles.webConfig }}", }, TextFiles: map[string]string{ - "myCnf": "[client]\nhost=1.2.3.4\nport=3306\n\npassword=s3cur3 p@$$w0r4.\n\n\n\n\n\n", + "myCnf": "[client]\nhost=1.2.3.4\nport=3306\n\npassword=s3cur3 p@$$w0r4.\n\nconnect_timeout=2\n\n\n\n\n", "webConfig": "basic_auth_users:\n pmm: agent-password\n", }, } @@ -549,3 +550,57 @@ func TestMySQLdExporterConfigMySQL8Support(t *testing.T) { assert.Equal(t, expected, actual) }) } + +func TestMySQLdExporterConfigRoundsUpConnectionTimeout(t *testing.T) { + t.Parallel() + + node := &models.Node{ + Address: "1.2.3.4", + } + service := &models.Service{ + Address: pointer.ToString("1.2.3.4"), + Port: pointer.ToUint16(3306), + } + + t.Run("myCnf", func(t *testing.T) { + t.Parallel() + + exporter := &models.Agent{ + AgentID: "agent-id", + AgentType: models.MySQLdExporterType, + Username: pointer.ToString("username"), + AgentPassword: pointer.ToString("agent-password"), + ExporterOptions: models.ExporterOptions{ + ConnectionTimeout: pointer.ToDuration(1500 * time.Millisecond), + }, + } + + actual, err := mysqldExporterConfig(node, service, exporter, exposeSecrets, version.MustParse("3.2.0")) + require.NoError(t, err) + require.NotNil(t, exporter.ExporterOptions.ConnectionTimeout) + assert.Equal(t, 1500*time.Millisecond, *exporter.ExporterOptions.ConnectionTimeout) + require.Contains(t, actual.TextFiles, "myCnf") + assert.Contains(t, actual.TextFiles["myCnf"], "connect_timeout=2\n") + }) + + t.Run("legacy dsn", func(t *testing.T) { + t.Parallel() + + exporter := &models.Agent{ + AgentID: "agent-id", + AgentType: models.MySQLdExporterType, + Username: pointer.ToString("username"), + AgentPassword: pointer.ToString("agent-password"), + ExporterOptions: models.ExporterOptions{ + ConnectionTimeout: pointer.ToDuration(1500 * time.Millisecond), + }, + } + + actual, err := mysqldExporterConfig(node, service, exporter, exposeSecrets, version.MustParse("2.21.0")) + require.NoError(t, err) + require.NotNil(t, exporter.ExporterOptions.ConnectionTimeout) + assert.Equal(t, 1500*time.Millisecond, *exporter.ExporterOptions.ConnectionTimeout) + require.Len(t, actual.Env, 2) + assert.Contains(t, actual.Env[0], "timeout=2s") + }) +} diff --git a/managed/services/agents/postgresql.go b/managed/services/agents/postgresql.go index 9b13c41c4ed..26ea80125a0 100644 --- a/managed/services/agents/postgresql.go +++ b/managed/services/agents/postgresql.go @@ -17,6 +17,7 @@ package agents import ( "fmt" + "math" "sort" "strconv" "strings" @@ -31,6 +32,8 @@ import ( "github.com/percona/pmm/version" ) +const postgresRemoteCloudDefaultDialTimeout = 5 * time.Second + var ( postgresExporterAutodiscoveryVersion = version.MustParse("2.15.99") postgresExporterWebConfigVersion = version.MustParse("2.30.99") @@ -125,21 +128,27 @@ func postgresExporterConfig(node *models.Node, service *models.Service, exporter sort.Strings(args) dsnParams := models.DSNParams{ - DialTimeout: 1 * time.Second, Database: service.DatabaseName, PostgreSQLSupportsSSLSNI: !pmmAgentVersion.Less(postgresSSLSniVersion), } - // On AWS and Azure, we need to have a higher value for DialTimeout to avoid connection issues + var connectionTimeout time.Duration - // TODO: refactor with https://perconadev.atlassian.net/browse/PMM-12832 - if node.NodeType == models.RemoteRDSNodeType { - dsnParams.DialTimeout = 5 * time.Second - } - - if exporter.AzureOptions.ClientID != "" { - dsnParams.DialTimeout = 5 * time.Second + // Remote RDS / Azure: default 5s dial unless the user set ExporterOptions.ConnectionTimeout. + switch { + case exporter.AzureOptions.ClientID != "", + node.NodeType == models.RemoteRDSNodeType: + connectionTimeout = pointer.GetDuration(exporter.ExporterOptions.ConnectionTimeout) + if connectionTimeout == 0 { + connectionTimeout = postgresRemoteCloudDefaultDialTimeout + } + default: + connectionTimeout = exporter.EffectiveDialTimeout() } + // PostgreSQL uses whole-second connection timeout values, so round up once here + // before rendering the connection string to avoid truncating sub-second values to 0. + connectionTimeout = time.Second * time.Duration(max(1, int(math.Ceil(connectionTimeout.Seconds())))) + dsnParams.DialTimeout = connectionTimeout res := &agentv1.SetStateRequest_AgentProcess{ Type: inventoryv1.AgentType_AGENT_TYPE_POSTGRES_EXPORTER, diff --git a/managed/services/agents/postgresql_test.go b/managed/services/agents/postgresql_test.go index 4a1620f46bb..4ec0f5742db 100644 --- a/managed/services/agents/postgresql_test.go +++ b/managed/services/agents/postgresql_test.go @@ -18,6 +18,7 @@ package agents import ( "fmt" "testing" + "time" "github.com/AlekSi/pointer" "github.com/stretchr/testify/assert" @@ -70,7 +71,7 @@ func (s *PostgresExporterConfigTestSuite) SetupTest() { "--web.listen-address=0.0.0.0:{{ .listen_port }}", }, Env: []string{ - "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=1&sslmode=disable", + "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=2&sslmode=disable", "HTTP_AUTH=pmm:agent-password", }, RedactWords: []string{"s3cur3 p@$$w0r4.", "agent-password"}, @@ -94,7 +95,7 @@ func (s *PostgresExporterConfigTestSuite) TestConfig() { func (s *PostgresExporterConfigTestSuite) TestDatabaseName() { s.Run("Set", func() { s.postgresql.DatabaseName = "db1" - s.expected.Env[0] = "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/db1?connect_timeout=1&sslmode=disable" + s.expected.Env[0] = "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/db1?connect_timeout=2&sslmode=disable" s.exporter.ExporterOptions = models.ExporterOptions{} s.exporter.AzureOptions = models.AzureOptions{} @@ -129,7 +130,7 @@ func (s *PostgresExporterConfigTestSuite) TestEmptyPassword() { actual, err := postgresExporterConfig(s.node, s.postgresql, s.exporter, exposeSecrets, s.pmmAgentVersion) s.NoError(err, "Failed to create exporter config") - s.Equal("DATA_SOURCE_NAME=postgres://username@1.2.3.4:5432/postgres?connect_timeout=1&sslmode=disable", actual.Env[0]) + s.Equal("DATA_SOURCE_NAME=postgres://username@1.2.3.4:5432/postgres?connect_timeout=2&sslmode=disable", actual.Env[0]) } func (s *PostgresExporterConfigTestSuite) TestEmptyUsername() { @@ -141,7 +142,7 @@ func (s *PostgresExporterConfigTestSuite) TestEmptyUsername() { actual, err := postgresExporterConfig(s.node, s.postgresql, s.exporter, exposeSecrets, s.pmmAgentVersion) s.NoError(err, "Failed to create exporter config") - s.Equal("DATA_SOURCE_NAME=postgres://:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=1&sslmode=disable", actual.Env[0]) + s.Equal("DATA_SOURCE_NAME=postgres://:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=2&sslmode=disable", actual.Env[0]) } func (s *PostgresExporterConfigTestSuite) TestEmptyUsernameAndPassword() { @@ -154,7 +155,7 @@ func (s *PostgresExporterConfigTestSuite) TestEmptyUsernameAndPassword() { actual, err := postgresExporterConfig(s.node, s.postgresql, s.exporter, exposeSecrets, s.pmmAgentVersion) s.NoError(err, "Failed to create exporter config") - s.Equal("DATA_SOURCE_NAME=postgres://1.2.3.4:5432/postgres?connect_timeout=1&sslmode=disable", actual.Env[0]) + s.Equal("DATA_SOURCE_NAME=postgres://1.2.3.4:5432/postgres?connect_timeout=2&sslmode=disable", actual.Env[0]) } func (s *PostgresExporterConfigTestSuite) TestSocket() { @@ -170,7 +171,7 @@ func (s *PostgresExporterConfigTestSuite) TestSocket() { actual, err := postgresExporterConfig(s.node, s.postgresql, s.exporter, exposeSecrets, s.pmmAgentVersion) s.NoError(err, "Failed to create exporter config") - s.Equal("DATA_SOURCE_NAME=postgres:///postgres?connect_timeout=1&host=%2Fvar%2Frun%2Fpostgres&sslmode=disable", actual.Env[0]) + s.Equal("DATA_SOURCE_NAME=postgres:///postgres?connect_timeout=2&host=%2Fvar%2Frun%2Fpostgres&sslmode=disable", actual.Env[0]) } func (s *PostgresExporterConfigTestSuite) TestDisabledCollectors() { @@ -207,6 +208,78 @@ func (s *PostgresExporterConfigTestSuite) TestDisabledCollectors() { s.Require().Equal(expected.Args, actual.Args) } +func (s *PostgresExporterConfigTestSuite) TestDialTimeoutRemoteRDSDefault() { + s.node.NodeType = models.RemoteRDSNodeType + s.exporter.ExporterOptions = models.ExporterOptions{} + s.exporter.AzureOptions = models.AzureOptions{} + s.exporter.PostgreSQLOptions = models.PostgreSQLOptions{} + s.expected.Env[0] = "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=5&sslmode=disable" + + actual, err := postgresExporterConfig(s.node, s.postgresql, s.exporter, redactSecrets, s.pmmAgentVersion) + s.NoError(err) + s.Require().Equal(s.expected.Env, actual.Env) +} + +func (s *PostgresExporterConfigTestSuite) TestDialTimeoutRemoteRDSCustom() { + s.node.NodeType = models.RemoteRDSNodeType + s.exporter.ExporterOptions = models.ExporterOptions{ConnectionTimeout: pointer.ToDuration(8 * time.Second)} + s.exporter.AzureOptions = models.AzureOptions{} + s.exporter.PostgreSQLOptions = models.PostgreSQLOptions{} + s.expected.Env[0] = "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=8&sslmode=disable" + + actual, err := postgresExporterConfig(s.node, s.postgresql, s.exporter, redactSecrets, s.pmmAgentVersion) + s.NoError(err) + s.Require().Equal(s.expected.Env, actual.Env) +} + +func (s *PostgresExporterConfigTestSuite) TestDialTimeoutRoundsUpSubSecondCustom() { + s.exporter.ExporterOptions = models.ExporterOptions{ConnectionTimeout: pointer.ToDuration(1500 * time.Millisecond)} + s.exporter.AzureOptions = models.AzureOptions{} + s.exporter.PostgreSQLOptions = models.PostgreSQLOptions{} + s.expected.Env[0] = "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=2&sslmode=disable" + + actual, err := postgresExporterConfig(s.node, s.postgresql, s.exporter, redactSecrets, s.pmmAgentVersion) + s.NoError(err) + s.Require().Equal(s.expected.Env, actual.Env) + s.Require().NotNil(s.exporter.ExporterOptions.ConnectionTimeout) + s.Equal(1500*time.Millisecond, *s.exporter.ExporterOptions.ConnectionTimeout) +} + +func (s *PostgresExporterConfigTestSuite) TestDialTimeoutAzureDefault() { + s.exporter.ExporterOptions = models.ExporterOptions{} + s.exporter.AzureOptions = models.AzureOptions{ClientID: "azure-client"} + s.exporter.PostgreSQLOptions = models.PostgreSQLOptions{} + s.expected.Env[0] = "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=5&sslmode=disable" + + actual, err := postgresExporterConfig(s.node, s.postgresql, s.exporter, redactSecrets, s.pmmAgentVersion) + s.NoError(err) + s.Require().Equal(s.expected.Env, actual.Env) +} + +func (s *PostgresExporterConfigTestSuite) TestDialTimeoutAzureRoundsUpSubSecondCustom() { + s.exporter.ExporterOptions = models.ExporterOptions{ConnectionTimeout: pointer.ToDuration(1500 * time.Millisecond)} + s.exporter.AzureOptions = models.AzureOptions{ClientID: "azure-client"} + s.exporter.PostgreSQLOptions = models.PostgreSQLOptions{} + s.expected.Env[0] = "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=2&sslmode=disable" + + actual, err := postgresExporterConfig(s.node, s.postgresql, s.exporter, redactSecrets, s.pmmAgentVersion) + s.NoError(err) + s.Require().Equal(s.expected.Env, actual.Env) + s.Require().NotNil(s.exporter.ExporterOptions.ConnectionTimeout) + s.Equal(1500*time.Millisecond, *s.exporter.ExporterOptions.ConnectionTimeout) +} + +func (s *PostgresExporterConfigTestSuite) TestDialTimeoutAzureCustom() { + s.exporter.ExporterOptions = models.ExporterOptions{ConnectionTimeout: pointer.ToDuration(4 * time.Second)} + s.exporter.AzureOptions = models.AzureOptions{ClientID: "azure-client"} + s.exporter.PostgreSQLOptions = models.PostgreSQLOptions{} + s.expected.Env[0] = "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=4&sslmode=disable" + + actual, err := postgresExporterConfig(s.node, s.postgresql, s.exporter, redactSecrets, s.pmmAgentVersion) + s.NoError(err) + s.Require().Equal(s.expected.Env, actual.Env) +} + func TestAutoDiscovery(t *testing.T) { const discoveryFlag = "--auto-discover-databases" const excludedFlag = "--exclude-databases=template0,template1,cloudsqladmin,pmm-managed-dev,azure_maintenance,rdsadmin" @@ -245,7 +318,7 @@ func TestAutoDiscovery(t *testing.T) { "--web.listen-address=0.0.0.0:{{ .listen_port }}", }, Env: []string{ - "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=1&sslmode=disable", + "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=2&sslmode=disable", "HTTP_AUTH=pmm:agent-id", }, RedactWords: []string{"s3cur3 p@$$w0r4."}, @@ -364,7 +437,7 @@ func TestMaxConnections(t *testing.T) { "--web.config={{ .TextFiles.webConfig }}", }, Env: []string{ - "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=1&sslmode=disable", + "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=2&sslmode=disable", }, TextFiles: map[string]string{ "webConfig": "basic_auth_users:\n pmm: agent-id\n", @@ -496,7 +569,7 @@ func (s *PostgresExporterConfigTestSuite) TestPrometheusWebConfig() { "--web.config={{ .TextFiles.webConfig }}", }, Env: []string{ - "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=1&sslmode=verify-ca", + "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=2&sslmode=verify-ca", }, TextFiles: map[string]string{ "webConfig": "basic_auth_users:\n pmm: agent-id\n", @@ -548,7 +621,7 @@ func (s *PostgresExporterConfigTestSuite) TestSSLSni() { "--web.config={{ .TextFiles.webConfig }}", }, Env: []string{ - "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=1&sslmode=verify-ca&sslsni=0", + "DATA_SOURCE_NAME=postgres://username:s3cur3%20p%40$$w0r4.@1.2.3.4:5432/postgres?connect_timeout=2&sslmode=verify-ca&sslsni=0", }, TextFiles: map[string]string{ "webConfig": "basic_auth_users:\n pmm: agent-id\n", diff --git a/managed/services/agents/proxysql.go b/managed/services/agents/proxysql.go index 8f786c25e1d..f90d039cf73 100644 --- a/managed/services/agents/proxysql.go +++ b/managed/services/agents/proxysql.go @@ -18,7 +18,6 @@ package agents import ( "fmt" "sort" - "time" agentv1 "github.com/percona/pmm/api/agent/v1" inventoryv1 "github.com/percona/pmm/api/inventory/v1" @@ -71,7 +70,7 @@ func proxysqlExporterConfig(node *models.Node, service *models.Service, exporter TemplateRightDelim: tdp.Right, Args: args, Env: []string{ - fmt.Sprintf("DATA_SOURCE_NAME=%s", exporter.DSN(service, models.DSNParams{DialTimeout: time.Second, Database: ""}, nil, pmmAgentVersion)), + fmt.Sprintf("DATA_SOURCE_NAME=%s", exporter.DSN(service, models.DSNParams{DialTimeout: exporter.EffectiveDialTimeout(), Database: ""}, nil, pmmAgentVersion)), fmt.Sprintf("HTTP_AUTH=pmm:%s", exporter.GetAgentPassword()), }, } diff --git a/managed/services/agents/proxysql_test.go b/managed/services/agents/proxysql_test.go index 4c4b161d830..4b231421c1a 100644 --- a/managed/services/agents/proxysql_test.go +++ b/managed/services/agents/proxysql_test.go @@ -59,7 +59,7 @@ func TestProxySQLExporterConfig(t *testing.T) { "-web.listen-address=0.0.0.0:{{ .listen_port }}", }, Env: []string{ - "DATA_SOURCE_NAME=username:s3cur3 p@$$w0r4.@tcp(1.2.3.4:3306)/?timeout=1s", + "DATA_SOURCE_NAME=username:s3cur3 p@$$w0r4.@tcp(1.2.3.4:3306)/?timeout=2s", "HTTP_AUTH=pmm:agent-password", }, RedactWords: []string{"s3cur3 p@$$w0r4.", "agent-password"}, @@ -71,13 +71,13 @@ func TestProxySQLExporterConfig(t *testing.T) { t.Run("EmptyPassword", func(t *testing.T) { exporter.Password = nil actual := proxysqlExporterConfig(node, proxysql, exporter, exposeSecrets, pmmAgentVersion) - assert.Equal(t, "DATA_SOURCE_NAME=username@tcp(1.2.3.4:3306)/?timeout=1s", actual.Env[0]) + assert.Equal(t, "DATA_SOURCE_NAME=username@tcp(1.2.3.4:3306)/?timeout=2s", actual.Env[0]) }) t.Run("EmptyUsername", func(t *testing.T) { exporter.Username = nil actual := proxysqlExporterConfig(node, proxysql, exporter, exposeSecrets, pmmAgentVersion) - assert.Equal(t, "DATA_SOURCE_NAME=tcp(1.2.3.4:3306)/?timeout=1s", actual.Env[0]) + assert.Equal(t, "DATA_SOURCE_NAME=tcp(1.2.3.4:3306)/?timeout=2s", actual.Env[0]) }) t.Run("DisabledCollector", func(t *testing.T) { @@ -125,7 +125,7 @@ func TestProxySQLExporterConfig(t *testing.T) { "-web.listen-address=0.0.0.0:{{ .listen_port }}", }, Env: []string{ - "DATA_SOURCE_NAME=username:s3cur3 p@$$w0r4.@tcp(1.2.3.4:3306)/?timeout=1s", + "DATA_SOURCE_NAME=username:s3cur3 p@$$w0r4.@tcp(1.2.3.4:3306)/?timeout=2s", "HTTP_AUTH=pmm:agent-id", }, RedactWords: []string{"s3cur3 p@$$w0r4."}, @@ -167,7 +167,7 @@ func TestProxySQLExporterConfig(t *testing.T) { "-web.listen-address=0.0.0.0:{{ .listen_port }}", }, Env: []string{ - "DATA_SOURCE_NAME=username:s3cur3 p@$$w0r4.@tcp(1.2.3.4:3306)/?timeout=1s", + "DATA_SOURCE_NAME=username:s3cur3 p@$$w0r4.@tcp(1.2.3.4:3306)/?timeout=2s", "HTTP_AUTH=pmm:agent-id", }, RedactWords: []string{"s3cur3 p@$$w0r4."}, diff --git a/managed/services/agents/valkey.go b/managed/services/agents/valkey.go index 4267bc401f0..b8a2fb20d31 100644 --- a/managed/services/agents/valkey.go +++ b/managed/services/agents/valkey.go @@ -17,7 +17,6 @@ package agents import ( "sort" - "time" agentv1 "github.com/percona/pmm/api/agent/v1" inventoryv1 "github.com/percona/pmm/api/inventory/v1" @@ -41,11 +40,10 @@ func valkeyExporterConfig(node *models.Node, service *models.Service, exporter * args = append(args, "--web.telemetry-path="+exporter.ExporterOptions.MetricsPath) } - dnsParams := models.DSNParams{ - DialTimeout: 3 * time.Second, - } + dsnParams := models.DSNParams{} - args = append(args, "--redis.addr="+exporter.DSN(service, dnsParams, nil, pmmAgentVersion)) + args = append(args, "--redis.addr="+exporter.DSN(service, dsnParams, nil, pmmAgentVersion)) + args = append(args, "--connection-timeout="+exporter.EffectiveDialTimeout().String()) args = withLogLevel(args, exporter.LogLevel, pmmAgentVersion, false) sort.Strings(args) diff --git a/managed/services/agents/valkey_test.go b/managed/services/agents/valkey_test.go new file mode 100644 index 00000000000..7ddecea0aa8 --- /dev/null +++ b/managed/services/agents/valkey_test.go @@ -0,0 +1,80 @@ +// Copyright (C) 2023 Percona LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package agents + +import ( + "testing" + "time" + + "github.com/AlekSi/pointer" + "github.com/stretchr/testify/require" + + agentv1 "github.com/percona/pmm/api/agent/v1" + inventoryv1 "github.com/percona/pmm/api/inventory/v1" + "github.com/percona/pmm/managed/models" + "github.com/percona/pmm/version" +) + +func TestValkeyExporterConfig(t *testing.T) { + t.Parallel() + + pmmAgentVersion := version.MustParse("2.44.0") + node := &models.Node{Address: "1.2.3.4"} + service := &models.Service{ + Address: pointer.ToString("1.2.3.4"), + Port: pointer.ToUint16(6379), + } + + t.Run("DefaultTimeoutUsesFlag", func(t *testing.T) { + t.Parallel() + exporter := &models.Agent{ + AgentID: "agent-id", + AgentType: models.ValkeyExporterType, + Username: pointer.ToString("username"), + Password: pointer.ToString("secret"), + } + actual := valkeyExporterConfig(node, service, exporter, redactSecrets, pmmAgentVersion) + expected := &agentv1.SetStateRequest_AgentProcess{ + Type: inventoryv1.AgentType_AGENT_TYPE_VALKEY_EXPORTER, + TemplateLeftDelim: "{{", + TemplateRightDelim: "}}", + Args: []string{ + "--connection-timeout=3s", + "--include-config-metrics", + "--include-system-metrics", + "--redis.addr=redis://username:secret@1.2.3.4:6379", + "--web.listen-address=0.0.0.0:{{ .listen_port }}", + }, + RedactWords: []string{"secret"}, + } + require.Equal(t, expected, actual) + }) + + t.Run("CustomTimeoutUsesFlag", func(t *testing.T) { + t.Parallel() + exporter := &models.Agent{ + AgentID: "agent-id", + AgentType: models.ValkeyExporterType, + Username: pointer.ToString("username"), + Password: pointer.ToString("secret"), + } + exporter.ExporterOptions.ConnectionTimeout = pointer.ToDuration(1500 * time.Millisecond) + + actual := valkeyExporterConfig(node, service, exporter, redactSecrets, pmmAgentVersion) + require.Contains(t, actual.Args, "--connection-timeout=1.5s") + require.Contains(t, actual.Args, "--redis.addr=redis://username:secret@1.2.3.4:6379") + }) +} diff --git a/managed/services/converters.go b/managed/services/converters.go index f28a4567a2b..71c8fff5771 100644 --- a/managed/services/converters.go +++ b/managed/services/converters.go @@ -259,7 +259,7 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro }, nil case models.NodeExporterType: - return &inventoryv1.NodeExporter{ + exporter := &inventoryv1.NodeExporter{ AgentId: agent.AgentID, PmmAgentId: pointer.GetString(agent.PMMAgentID), Disabled: agent.Disabled, @@ -272,10 +272,14 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro LogLevel: inventoryv1.LogLevelAPIValue(agent.LogLevel), ExposeExporter: agent.ExporterOptions.ExposeExporter, MetricsResolutions: ConvertMetricsResolutions(agent.ExporterOptions.MetricsResolutions), - }, nil + } + if agent.ExporterOptions.ConnectionTimeout != nil { + exporter.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) + } + return exporter, nil case models.MySQLdExporterType: - return &inventoryv1.MySQLdExporter{ + exporter := &inventoryv1.MySQLdExporter{ AgentId: agent.AgentID, PmmAgentId: pointer.GetString(agent.PMMAgentID), ServiceId: serviceID, @@ -296,7 +300,11 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro ExposeExporter: agent.ExporterOptions.ExposeExporter, MetricsResolutions: ConvertMetricsResolutions(agent.ExporterOptions.MetricsResolutions), ExtraDsnParams: agent.MySQLOptions.ExtraDSNParams, - }, nil + } + if agent.ExporterOptions.ConnectionTimeout != nil { + exporter.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) + } + return exporter, nil case models.MongoDBExporterType: exporter := &inventoryv1.MongoDBExporter{ @@ -317,7 +325,9 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro ExposeExporter: agent.ExporterOptions.ExposeExporter, MetricsResolutions: ConvertMetricsResolutions(agent.ExporterOptions.MetricsResolutions), } - + if agent.ExporterOptions.ConnectionTimeout != nil { + exporter.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) + } exporter.StatsCollections = agent.MongoDBOptions.StatsCollections exporter.CollectionsLimit = agent.MongoDBOptions.CollectionsLimit exporter.EnableAllCollectors = agent.MongoDBOptions.EnableAllCollectors @@ -343,7 +353,9 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro ExposeExporter: agent.ExporterOptions.ExposeExporter, MetricsResolutions: ConvertMetricsResolutions(agent.ExporterOptions.MetricsResolutions), } - + if agent.ExporterOptions.ConnectionTimeout != nil { + exporter.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) + } exporter.AutoDiscoveryLimit = pointer.GetInt32(agent.PostgreSQLOptions.AutoDiscoveryLimit) exporter.MaxExporterConnections = agent.PostgreSQLOptions.MaxExporterConnections @@ -421,7 +433,7 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro }, nil case models.ProxySQLExporterType: - return &inventoryv1.ProxySQLExporter{ + exporter := &inventoryv1.ProxySQLExporter{ AgentId: agent.AgentID, PmmAgentId: pointer.GetString(agent.PMMAgentID), ServiceId: serviceID, @@ -438,7 +450,11 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro LogLevel: inventoryv1.LogLevelAPIValue(agent.LogLevel), ExposeExporter: agent.ExporterOptions.ExposeExporter, MetricsResolutions: ConvertMetricsResolutions(agent.ExporterOptions.MetricsResolutions), - }, nil + } + if agent.ExporterOptions.ConnectionTimeout != nil { + exporter.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) + } + return exporter, nil case models.QANPostgreSQLPgStatementsAgentType: return &inventoryv1.QANPostgreSQLPgStatementsAgent{ @@ -476,7 +492,7 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro }, nil case models.RDSExporterType: - return &inventoryv1.RDSExporter{ + exporter := &inventoryv1.RDSExporter{ AgentId: agent.AgentID, PmmAgentId: pointer.GetString(agent.PMMAgentID), NodeId: nodeID, @@ -491,7 +507,11 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro ProcessExecPath: processExecPath, LogLevel: inventoryv1.LogLevelAPIValue(agent.LogLevel), MetricsResolutions: ConvertMetricsResolutions(agent.ExporterOptions.MetricsResolutions), - }, nil + } + if agent.ExporterOptions.ConnectionTimeout != nil { + exporter.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) + } + return exporter, nil case models.ExternalExporterType: if agent.RunsOnNodeID == nil && agent.PMMAgentID != nil { @@ -501,7 +521,7 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro } agent.RunsOnNodeID = pmmAgent.RunsOnNodeID } - return &inventoryv1.ExternalExporter{ + ext := &inventoryv1.ExternalExporter{ AgentId: agent.AgentID, RunsOnNodeId: pointer.GetString(agent.RunsOnNodeID), ServiceId: pointer.GetString(agent.ServiceID), @@ -516,10 +536,14 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro MetricsResolutions: ConvertMetricsResolutions(agent.ExporterOptions.MetricsResolutions), TlsSkipVerify: agent.TLSSkipVerify, Status: inventoryv1.AgentStatus(inventoryv1.AgentStatus_value[agent.Status]), - }, nil + } + if agent.ExporterOptions.ConnectionTimeout != nil { + ext.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) + } + return ext, nil case models.AzureDatabaseExporterType: - return &inventoryv1.AzureDatabaseExporter{ + exporter := &inventoryv1.AzureDatabaseExporter{ AgentId: agent.AgentID, PmmAgentId: pointer.GetString(agent.PMMAgentID), NodeId: nodeID, @@ -532,7 +556,11 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro ProcessExecPath: processExecPath, LogLevel: inventoryv1.LogLevelAPIValue(agent.LogLevel), MetricsResolutions: ConvertMetricsResolutions(agent.ExporterOptions.MetricsResolutions), - }, nil + } + if agent.ExporterOptions.ConnectionTimeout != nil { + exporter.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) + } + return exporter, nil case models.VMAgentType: return &inventoryv1.VMAgent{ @@ -571,6 +599,9 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro ExposeExporter: agent.ExporterOptions.ExposeExporter, MetricsResolutions: ConvertMetricsResolutions(agent.ExporterOptions.MetricsResolutions), } + if agent.ExporterOptions.ConnectionTimeout != nil { + exporter.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) + } return exporter, nil case models.RTAMongoDBAgentType: diff --git a/managed/services/converters_test.go b/managed/services/converters_test.go index 8dcd34e6e9d..3a37af6bcce 100644 --- a/managed/services/converters_test.go +++ b/managed/services/converters_test.go @@ -54,6 +54,15 @@ func TestToAPIAgent(t *testing.T) { pmmAgent, err := models.CreatePMMAgent(db.Querier, node.NodeID, nil) require.NoError(t, err) + mysqlService, err := models.AddNewService(db.Querier, models.MySQLServiceType, &models.AddDBMSServiceParams{ + ServiceName: "test-mysql", + NodeID: node.NodeID, + Address: pointer.ToString("127.0.0.1"), + Port: pointer.ToUint16(3306), + Cluster: "test-cluster", + }) + require.NoError(t, err) + type args struct { q *reform.Querier agent *models.Agent @@ -96,6 +105,38 @@ func TestToAPIAgent(t *testing.T) { }, wantErr: nil, }, + { + name: "mysqld exporter with ExporterOptions timeout", + args: args{ + q: db.Querier, + agent: &models.Agent{ + AgentID: "mysqld-agent-1", + PMMAgentID: &pmmAgent.AgentID, + ServiceID: &mysqlService.ServiceID, + AgentType: models.MySQLdExporterType, + Disabled: false, + Username: pointer.To("exporter-user"), + Status: inventoryv1.AgentStatus_name[int32(inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN)], + MySQLOptions: models.MySQLOptions{ + TableCountTablestatsGroupLimit: 1000, + }, + ExporterOptions: models.ExporterOptions{ + ConnectionTimeout: pointer.ToDuration(9 * time.Second), + }, + }, + }, + want: &inventoryv1.MySQLdExporter{ + AgentId: "mysqld-agent-1", + PmmAgentId: pmmAgent.AgentID, + ServiceId: mysqlService.ServiceID, + Username: "exporter-user", + Disabled: false, + Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, + TablestatsGroupTableLimit: 1000, + ConnectionTimeout: durationpb.New(9 * time.Second), + }, + wantErr: nil, + }, } for _, tt := range tests { diff --git a/managed/services/inventory/agents.go b/managed/services/inventory/agents.go index 2508aadf64e..69fa20b55f5 100644 --- a/managed/services/inventory/agents.go +++ b/managed/services/inventory/agents.go @@ -30,6 +30,7 @@ import ( inventoryv1 "github.com/percona/pmm/api/inventory/v1" "github.com/percona/pmm/managed/models" "github.com/percona/pmm/managed/services" + "github.com/percona/pmm/managed/utils/duration" "github.com/percona/pmm/managed/utils/env" "github.com/percona/pmm/utils/logger" ) @@ -172,7 +173,7 @@ func (as *AgentsService) AddNodeExporter(ctx context.Context, p *inventoryv1.Add var agent *inventoryv1.NodeExporter e := as.db.InTransactionContext(ctx, nil, func(tx *reform.TX) error { row, err := models.CreateNodeExporter(tx.Querier, p.PmmAgentId, p.CustomLabels, p.PushMetrics, p.ExposeExporter, - p.DisableCollectors, nil, services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR)) + p.DisableCollectors, nil, services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), duration.OptionalFromProto(p.ConnectionTimeout)) if err != nil { return err } @@ -213,6 +214,7 @@ func (as *AgentsService) ChangeNodeExporter(ctx context.Context, agentID string, DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -243,22 +245,24 @@ func (as *AgentsService) AddMySQLdExporter(ctx context.Context, p *inventoryv1.A } mysqlOptions.TableCountTablestatsGroupLimit = p.TablestatsGroupTableLimit e := as.db.InTransactionContext(ctx, nil, func(tx *reform.TX) error { + exporterOptions := models.ExporterOptions{ + PushMetrics: p.PushMetrics, + DisabledCollectors: p.DisableCollectors, + ExposeExporter: p.ExposeExporter, + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), + } params := &models.CreateAgentParams{ - PMMAgentID: p.PmmAgentId, - ServiceID: p.ServiceId, - Username: p.Username, - Password: p.Password, - AgentPassword: p.AgentPassword, - CustomLabels: p.CustomLabels, - TLS: p.Tls, - TLSSkipVerify: p.TlsSkipVerify, - ExporterOptions: models.ExporterOptions{ - PushMetrics: p.PushMetrics, - DisabledCollectors: p.DisableCollectors, - ExposeExporter: p.ExposeExporter, - }, - MySQLOptions: mysqlOptions, - LogLevel: services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), + PMMAgentID: p.PmmAgentId, + ServiceID: p.ServiceId, + Username: p.Username, + Password: p.Password, + AgentPassword: p.AgentPassword, + CustomLabels: p.CustomLabels, + TLS: p.Tls, + TLSSkipVerify: p.TlsSkipVerify, + ExporterOptions: exporterOptions, + MySQLOptions: mysqlOptions, + LogLevel: services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), } var err error row, err = models.CreateAgent(tx.Querier, models.MySQLdExporterType, params) @@ -330,6 +334,7 @@ func (as *AgentsService) ChangeMySQLdExporter(ctx context.Context, agentID strin DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -368,6 +373,7 @@ func (as *AgentsService) AddMongoDBExporter(ctx context.Context, p *inventoryv1. PushMetrics: p.PushMetrics, DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), }, LogLevel: services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_FATAL), } @@ -449,6 +455,7 @@ func (as *AgentsService) ChangeMongoDBExporter( DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -698,20 +705,22 @@ func (as *AgentsService) ChangeQANMySQLSlowlogAgent(ctx context.Context, agentID func (as *AgentsService) AddPostgresExporter(ctx context.Context, p *inventoryv1.AddPostgresExporterParams) (*inventoryv1.AddAgentResponse, error) { var agent *inventoryv1.PostgresExporter e := as.db.InTransactionContext(ctx, nil, func(tx *reform.TX) error { + exporterOptions := models.ExporterOptions{ + PushMetrics: p.PushMetrics, + DisabledCollectors: p.DisableCollectors, + ExposeExporter: p.ExposeExporter, + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), + } params := &models.CreateAgentParams{ - PMMAgentID: p.PmmAgentId, - ServiceID: p.ServiceId, - Username: p.Username, - Password: p.Password, - AgentPassword: p.AgentPassword, - CustomLabels: p.CustomLabels, - TLS: p.Tls, - TLSSkipVerify: p.TlsSkipVerify, - ExporterOptions: models.ExporterOptions{ - PushMetrics: p.PushMetrics, - DisabledCollectors: p.DisableCollectors, - ExposeExporter: p.ExposeExporter, - }, + PMMAgentID: p.PmmAgentId, + ServiceID: p.ServiceId, + Username: p.Username, + Password: p.Password, + AgentPassword: p.AgentPassword, + CustomLabels: p.CustomLabels, + TLS: p.Tls, + TLSSkipVerify: p.TlsSkipVerify, + ExporterOptions: exporterOptions, PostgreSQLOptions: models.PostgreSQLOptionsFromRequest(p), LogLevel: services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), } @@ -782,6 +791,7 @@ func (as *AgentsService) ChangePostgresExporter(ctx context.Context, agentID str DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -804,21 +814,23 @@ func (as *AgentsService) ChangePostgresExporter(ctx context.Context, agentID str func (as *AgentsService) AddValkeyExporter(ctx context.Context, p *inventoryv1.AddValkeyExporterParams) (*inventoryv1.AddAgentResponse, error) { var agent *inventoryv1.ValkeyExporter e := as.db.InTransactionContext(ctx, nil, func(tx *reform.TX) error { + exporterOptions := models.ExporterOptions{ + PushMetrics: p.PushMetrics, + ExposeExporter: p.ExposeExporter, + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), + } params := &models.CreateAgentParams{ - PMMAgentID: p.PmmAgentId, - ServiceID: p.ServiceId, - Username: p.Username, - Password: p.Password, - AgentPassword: p.AgentPassword, - CustomLabels: p.CustomLabels, - TLS: p.Tls, - TLSSkipVerify: p.TlsSkipVerify, - LogLevel: services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), - ExporterOptions: models.ExporterOptions{ - PushMetrics: p.PushMetrics, - ExposeExporter: p.ExposeExporter, - }, - ValkeyOptions: models.ValkeyOptionsFromRequest(p), + PMMAgentID: p.PmmAgentId, + ServiceID: p.ServiceId, + Username: p.Username, + Password: p.Password, + AgentPassword: p.AgentPassword, + CustomLabels: p.CustomLabels, + TLS: p.Tls, + TLSSkipVerify: p.TlsSkipVerify, + LogLevel: services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), + ExporterOptions: exporterOptions, + ValkeyOptions: models.ValkeyOptionsFromRequest(p), } row, err := models.CreateAgent(tx.Querier, models.ValkeyExporterType, params) if err != nil { @@ -888,6 +900,7 @@ func (as *AgentsService) ChangeValkeyExporter(ctx context.Context, agentID strin DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -1124,21 +1137,23 @@ func (as *AgentsService) ChangeQANMongoDBMongologAgent(ctx context.Context, agen func (as *AgentsService) AddProxySQLExporter(ctx context.Context, p *inventoryv1.AddProxySQLExporterParams) (*inventoryv1.AddAgentResponse, error) { var agent *inventoryv1.ProxySQLExporter e := as.db.InTransactionContext(ctx, nil, func(tx *reform.TX) error { + exporterOptions := models.ExporterOptions{ + PushMetrics: p.PushMetrics, + DisabledCollectors: p.DisableCollectors, + ExposeExporter: p.ExposeExporter, + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), + } params := &models.CreateAgentParams{ - PMMAgentID: p.PmmAgentId, - ServiceID: p.ServiceId, - Username: p.Username, - Password: p.Password, - AgentPassword: p.AgentPassword, - CustomLabels: p.CustomLabels, - TLS: p.Tls, - TLSSkipVerify: p.TlsSkipVerify, - ExporterOptions: models.ExporterOptions{ - PushMetrics: p.PushMetrics, - DisabledCollectors: p.DisableCollectors, - ExposeExporter: p.ExposeExporter, - }, - LogLevel: services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_FATAL), + PMMAgentID: p.PmmAgentId, + ServiceID: p.ServiceId, + Username: p.Username, + Password: p.Password, + AgentPassword: p.AgentPassword, + CustomLabels: p.CustomLabels, + TLS: p.Tls, + TLSSkipVerify: p.TlsSkipVerify, + ExporterOptions: exporterOptions, + LogLevel: services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_FATAL), } row, err := models.CreateAgent(tx.Querier, models.ProxySQLExporterType, params) if err != nil { @@ -1201,6 +1216,7 @@ func (as *AgentsService) ChangeProxySQLExporter(ctx context.Context, agentID str DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -1451,7 +1467,8 @@ func (as *AgentsService) AddRDSExporter(ctx context.Context, p *inventoryv1.AddR NodeID: p.NodeId, CustomLabels: p.CustomLabels, ExporterOptions: models.ExporterOptions{ - PushMetrics: p.PushMetrics, + PushMetrics: p.PushMetrics, + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), }, AWSOptions: models.AWSOptions{ AWSAccessKey: p.AwsAccessKey, @@ -1513,6 +1530,7 @@ func (as *AgentsService) ChangeRDSExporter(ctx context.Context, agentID string, params.ExporterOptions = &models.ChangeExporterOptions{ PushMetrics: p.EnablePushMetrics, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -1537,18 +1555,20 @@ func (as *AgentsService) AddExternalExporter(ctx context.Context, p *inventoryv1 agent *inventoryv1.ExternalExporter PMMAgentID *string ) + e := as.db.InTransactionContext(ctx, nil, func(tx *reform.TX) error { params := &models.CreateExternalExporterParams{ - RunsOnNodeID: p.RunsOnNodeId, - ServiceID: p.ServiceId, - Username: p.Username, - Password: p.Password, - Scheme: p.Scheme, - MetricsPath: p.MetricsPath, - ListenPort: p.ListenPort, - CustomLabels: p.CustomLabels, - PushMetrics: p.PushMetrics, - TLSSkipVerify: p.TlsSkipVerify, + RunsOnNodeID: p.RunsOnNodeId, + ServiceID: p.ServiceId, + Username: p.Username, + Password: p.Password, + Scheme: p.Scheme, + MetricsPath: p.MetricsPath, + ListenPort: p.ListenPort, + CustomLabels: p.CustomLabels, + PushMetrics: p.PushMetrics, + TLSSkipVerify: p.TlsSkipVerify, + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } row, err := models.CreateExternalExporter(tx.Querier, params) if err != nil { @@ -1599,6 +1619,7 @@ func (as *AgentsService) ChangeExternalExporter(ctx context.Context, agentID str MetricsScheme: p.Scheme, MetricsPath: p.MetricsPath, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -1630,7 +1651,8 @@ func (as *AgentsService) AddAzureDatabaseExporter(ctx context.Context, p *invent NodeID: p.NodeId, CustomLabels: p.CustomLabels, ExporterOptions: models.ExporterOptions{ - PushMetrics: p.PushMetrics, + PushMetrics: p.PushMetrics, + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), }, AzureOptions: models.AzureOptionsFromRequest(p), LogLevel: services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_FATAL), @@ -1687,6 +1709,7 @@ func (as *AgentsService) ChangeAzureDatabaseExporter( params.ExporterOptions = &models.ChangeExporterOptions{ PushMetrics: p.EnablePushMetrics, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } agent, err := as.executeAgentChange(ctx, agentID, params) diff --git a/managed/services/inventory/agents_test.go b/managed/services/inventory/agents_test.go index 667a3d968d5..b7848d04655 100644 --- a/managed/services/inventory/agents_test.go +++ b/managed/services/inventory/agents_test.go @@ -112,13 +112,40 @@ func TestAgents(t *testing.T) { &inventoryv1.ChangeNodeExporterParams{ Enable: pointer.ToBool(false), // passing an empty map to remove custom labels - CustomLabels: &common.StringMap{}, + CustomLabels: &common.StringMap{}, + ConnectionTimeout: durationpb.New(7 * time.Second), MetricsResolutions: &common.MetricsResolutions{ Hr: durationpb.New(10 * time.Second), }, }, ) require.NoError(t, err) + expectedNodeExporter = &inventoryv1.NodeExporter{ + AgentId: "00000000-0000-4000-8000-000000000006", + PmmAgentId: "00000000-0000-4000-8000-000000000005", + Disabled: true, + Status: inventoryv1.AgentStatus_AGENT_STATUS_DONE, + ConnectionTimeout: durationpb.New(7 * time.Second), + MetricsResolutions: &common.MetricsResolutions{ + Hr: durationpb.New(10 * time.Second), + }, + } + assert.Equal(t, expectedNodeExporter, actualNodeExporter.GetNodeExporter()) + + actualAgent, err := as.Get(ctx, "00000000-0000-4000-8000-000000000006") + require.NoError(t, err) + assert.Equal(t, expectedNodeExporter, actualAgent.(*inventoryv1.NodeExporter)) + }) + + t.Run("ChangeNodeExporterClearConnectionTimeout", func(t *testing.T) { + actualNodeExporter, err := as.ChangeNodeExporter( + ctx, + "00000000-0000-4000-8000-000000000006", + &inventoryv1.ChangeNodeExporterParams{ + ConnectionTimeout: durationpb.New(0), + }, + ) + require.NoError(t, err) expectedNodeExporter = &inventoryv1.NodeExporter{ AgentId: "00000000-0000-4000-8000-000000000006", PmmAgentId: "00000000-0000-4000-8000-000000000005", @@ -147,17 +174,19 @@ func TestAgents(t *testing.T) { require.NoError(t, err) actualAgent, err := as.AddMySQLdExporter(ctx, &inventoryv1.AddMySQLdExporterParams{ - PmmAgentId: pmmAgentID, - ServiceId: ms.ServiceId, - Username: "username", + PmmAgentId: pmmAgentID, + ServiceId: ms.ServiceId, + Username: "username", + ConnectionTimeout: durationpb.New(11 * time.Second), }) require.NoError(t, err) expectedMySQLdExporter = &inventoryv1.MySQLdExporter{ - AgentId: "00000000-0000-4000-8000-000000000008", - PmmAgentId: "00000000-0000-4000-8000-000000000005", - ServiceId: ms.ServiceId, - Username: "username", - Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, + AgentId: "00000000-0000-4000-8000-000000000008", + PmmAgentId: "00000000-0000-4000-8000-000000000005", + ServiceId: ms.ServiceId, + Username: "username", + Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, + ConnectionTimeout: durationpb.New(11 * time.Second), } assert.Equal(t, expectedMySQLdExporter, actualAgent.GetMysqldExporter()) @@ -229,17 +258,19 @@ func TestAgents(t *testing.T) { require.NoError(t, err) actualAgent, err := as.AddPostgresExporter(ctx, &inventoryv1.AddPostgresExporterParams{ - PmmAgentId: pmmAgentID, - ServiceId: ps.ServiceId, - Username: "username", + PmmAgentId: pmmAgentID, + ServiceId: ps.ServiceId, + Username: "username", + ConnectionTimeout: durationpb.New(13 * time.Second), }) require.NoError(t, err) expectedPostgresExporter = &inventoryv1.PostgresExporter{ - AgentId: "00000000-0000-4000-8000-00000000000d", - PmmAgentId: pmmAgentID, - ServiceId: ps.ServiceId, - Username: "username", - Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, + AgentId: "00000000-0000-4000-8000-00000000000d", + PmmAgentId: pmmAgentID, + ServiceId: ps.ServiceId, + Username: "username", + Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, + ConnectionTimeout: durationpb.New(13 * time.Second), } assert.Equal(t, expectedPostgresExporter, actualAgent.GetPostgresExporter()) @@ -269,6 +300,65 @@ func TestAgents(t *testing.T) { assert.Equal(t, expectedExternalExporter, actualAgent.GetExternalExporter()) }) + t.Run("ChangeExternalExporterConnectionTimeout", func(t *testing.T) { + as.vmdb.(*mockPrometheusService).On("RequestConfigurationUpdate").Return() + as.state.(*mockAgentsStateUpdater).On("RequestStateUpdate", ctx, models.PMMServerNodeID) + + actualAgent, err := as.ChangeExternalExporter( + ctx, + "00000000-0000-4000-8000-00000000000e", + &inventoryv1.ChangeExternalExporterParams{ + ConnectionTimeout: durationpb.New(17 * time.Second), + }, + ) + require.NoError(t, err) + expectedExternalExporter = &inventoryv1.ExternalExporter{ + AgentId: "00000000-0000-4000-8000-00000000000e", + RunsOnNodeId: models.PMMServerNodeID, + ServiceId: ps.ServiceId, + Username: "username", + Scheme: "http", + MetricsPath: "/metrics", + ListenPort: 9222, + Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, + ConnectionTimeout: durationpb.New(17 * time.Second), + } + assert.Equal(t, expectedExternalExporter, actualAgent.GetExternalExporter()) + + exporter, err := as.Get(ctx, "00000000-0000-4000-8000-00000000000e") + require.NoError(t, err) + assert.Equal(t, expectedExternalExporter, exporter.(*inventoryv1.ExternalExporter)) + }) + + t.Run("ChangeExternalExporterClearConnectionTimeout", func(t *testing.T) { + as.vmdb.(*mockPrometheusService).On("RequestConfigurationUpdate").Return() + as.state.(*mockAgentsStateUpdater).On("RequestStateUpdate", ctx, models.PMMServerNodeID) + + actualAgent, err := as.ChangeExternalExporter( + ctx, + "00000000-0000-4000-8000-00000000000e", + &inventoryv1.ChangeExternalExporterParams{ + ConnectionTimeout: durationpb.New(0), + }, + ) + require.NoError(t, err) + expectedExternalExporter = &inventoryv1.ExternalExporter{ + AgentId: "00000000-0000-4000-8000-00000000000e", + RunsOnNodeId: models.PMMServerNodeID, + ServiceId: ps.ServiceId, + Username: "username", + Scheme: "http", + MetricsPath: "/metrics", + ListenPort: 9222, + Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, + } + assert.Equal(t, expectedExternalExporter, actualAgent.GetExternalExporter()) + + exporter, err := as.Get(ctx, "00000000-0000-4000-8000-00000000000e") + require.NoError(t, err) + assert.Equal(t, expectedExternalExporter, exporter.(*inventoryv1.ExternalExporter)) + }) + t.Run("AddValkeyExporter", func(t *testing.T) { var err error valkey, err = ss.AddValkey(ctx, &models.AddDBMSServiceParams{ @@ -448,14 +538,49 @@ func TestAgents(t *testing.T) { as.state.(*mockAgentsStateUpdater).On("RequestStateUpdate", ctx, "pmm-server") agent, err := as.AddRDSExporter(ctx, &inventoryv1.AddRDSExporterParams{ - PmmAgentId: "pmm-server", - NodeId: node.NodeId, - AwsAccessKey: "EXAMPLE_ACCESS_KEY", - AwsSecretKey: "EXAMPLE_SECRET_KEY", - CustomLabels: map[string]string{"baz": "qux"}, + PmmAgentId: "pmm-server", + NodeId: node.NodeId, + AwsAccessKey: "EXAMPLE_ACCESS_KEY", + AwsSecretKey: "EXAMPLE_SECRET_KEY", + CustomLabels: map[string]string{"baz": "qux"}, + ConnectionTimeout: durationpb.New(19 * time.Second), }) require.NoError(t, err) expectedAgent := &inventoryv1.RDSExporter{ + AgentId: "00000000-0000-4000-8000-000000000006", + PmmAgentId: "pmm-server", + NodeId: "00000000-0000-4000-8000-000000000005", + AwsAccessKey: "EXAMPLE_ACCESS_KEY", + CustomLabels: map[string]string{"baz": "qux"}, + Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, + ConnectionTimeout: durationpb.New(19 * time.Second), + } + assert.Equal(t, expectedAgent, agent.GetRdsExporter()) + + as.state.(*mockAgentsStateUpdater).On("RequestStateUpdate", ctx, "pmm-server") + + changedAgent, err := as.ChangeRDSExporter(ctx, "00000000-0000-4000-8000-000000000006", &inventoryv1.ChangeRDSExporterParams{ + ConnectionTimeout: durationpb.New(23 * time.Second), + }) + require.NoError(t, err) + expectedAgent = &inventoryv1.RDSExporter{ + AgentId: "00000000-0000-4000-8000-000000000006", + PmmAgentId: "pmm-server", + NodeId: "00000000-0000-4000-8000-000000000005", + AwsAccessKey: "EXAMPLE_ACCESS_KEY", + CustomLabels: map[string]string{"baz": "qux"}, + Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, + ConnectionTimeout: durationpb.New(23 * time.Second), + } + assert.Equal(t, expectedAgent, changedAgent.GetRdsExporter()) + + as.state.(*mockAgentsStateUpdater).On("RequestStateUpdate", ctx, "pmm-server") + + changedAgent, err = as.ChangeRDSExporter(ctx, "00000000-0000-4000-8000-000000000006", &inventoryv1.ChangeRDSExporterParams{ + ConnectionTimeout: durationpb.New(0), + }) + require.NoError(t, err) + expectedAgent = &inventoryv1.RDSExporter{ AgentId: "00000000-0000-4000-8000-000000000006", PmmAgentId: "pmm-server", NodeId: "00000000-0000-4000-8000-000000000005", @@ -463,7 +588,7 @@ func TestAgents(t *testing.T) { CustomLabels: map[string]string{"baz": "qux"}, Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, } - assert.Equal(t, expectedAgent, agent.GetRdsExporter()) + assert.Equal(t, expectedAgent, changedAgent.GetRdsExporter()) }) t.Run("AddExternalExporter", func(t *testing.T) { @@ -762,12 +887,13 @@ func TestAgents(t *testing.T) { as.state.(*mockAgentsStateUpdater).On("RequestStateUpdate", ctx, "pmm-server") agent, err := as.AddRDSExporter(ctx, &inventoryv1.AddRDSExporterParams{ - PmmAgentId: "pmm-server", - NodeId: node.NodeId, - AwsAccessKey: "EXAMPLE_ACCESS_KEY", - AwsSecretKey: "EXAMPLE_SECRET_KEY", - CustomLabels: map[string]string{"baz": "qux"}, - PushMetrics: true, + PmmAgentId: "pmm-server", + NodeId: node.NodeId, + AwsAccessKey: "EXAMPLE_ACCESS_KEY", + AwsSecretKey: "EXAMPLE_SECRET_KEY", + CustomLabels: map[string]string{"baz": "qux"}, + PushMetrics: true, + ConnectionTimeout: durationpb.New(29 * time.Second), }) require.NoError(t, err) expectedAgent := &inventoryv1.RDSExporter{ @@ -778,6 +904,7 @@ func TestAgents(t *testing.T) { CustomLabels: map[string]string{"baz": "qux"}, PushMetricsEnabled: true, Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, + ConnectionTimeout: durationpb.New(29 * time.Second), } assert.Equal(t, expectedAgent, agent.GetRdsExporter()) }) diff --git a/managed/services/management/add_service_exporter_timeout_test.go b/managed/services/management/add_service_exporter_timeout_test.go new file mode 100644 index 00000000000..5e1f069c598 --- /dev/null +++ b/managed/services/management/add_service_exporter_timeout_test.go @@ -0,0 +1,296 @@ +// Copyright (C) 2023 Percona LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package management + +import ( + "context" + "testing" + "time" + + "github.com/AlekSi/pointer" + "github.com/google/uuid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "google.golang.org/protobuf/types/known/durationpb" + "gopkg.in/reform.v1" + "gopkg.in/reform.v1/dialects/postgresql" + + managementv1 "github.com/percona/pmm/api/management/v1" + "github.com/percona/pmm/managed/models" + "github.com/percona/pmm/managed/utils/testdb" + "github.com/percona/pmm/managed/utils/tests" + "github.com/percona/pmm/utils/logger" +) + +// Verifies management AddService paths persist ExporterOptions.ConnectionTimeout. +func TestAddServiceExporterTimeout(t *testing.T) { + uuid.SetRand(&tests.IDReader{}) + defer uuid.SetRand(nil) + + ctx := logger.Set(context.Background(), t.Name()) + sqlDB := testdb.Open(t, models.SetupFixtures, nil) + t.Cleanup(func() { sqlDB.Close() }) //nolint:errcheck + db := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)) + + cc := &mockConnectionChecker{} + cc.Test(t) + sib := &mockServiceInfoBroker{} + sib.Test(t) + state := &mockAgentsStateUpdater{} + state.Test(t) + ar := &mockAgentsRegistry{} + ar.Test(t) + vmdb := &mockPrometheusService{} + vmdb.Test(t) + vc := &mockVersionCache{} + vc.Test(t) + grafanaClient := &mockGrafanaClient{} + grafanaClient.Test(t) + vmClient := &mockVictoriaMetricsClient{} + vmClient.Test(t) + + t.Cleanup(func() { + cc.AssertExpectations(t) + sib.AssertExpectations(t) + state.AssertExpectations(t) + ar.AssertExpectations(t) + vmdb.AssertExpectations(t) + vc.AssertExpectations(t) + grafanaClient.AssertExpectations(t) + vmClient.AssertExpectations(t) + }) + + s := NewManagementService(db, ar, state, cc, sib, vmdb, vc, grafanaClient, vmClient) + want := durationpb.New(17 * time.Second) + + t.Run("MySQL", func(t *testing.T) { + state.On("RequestStateUpdate", ctx, models.PMMServerAgentID).Once() + vc.On("RequestSoftwareVersionsUpdate").Once() + + resp, err := s.AddService(ctx, &managementv1.AddServiceRequest{ + Service: &managementv1.AddServiceRequest_Mysql{ + Mysql: &managementv1.AddMySQLServiceParams{ + NodeId: models.PMMServerNodeID, + ServiceName: "mgmt-test-mysql-timeout", + Address: "127.0.0.1", + Port: 3306, + PmmAgentId: models.PMMServerAgentID, + Username: "root", + SkipConnectionCheck: true, + MetricsMode: managementv1.MetricsMode_METRICS_MODE_PULL, + ConnectionTimeout: want, + }, + }, + }) + require.NoError(t, err) + require.NotNil(t, resp.GetMysql()) + assert.Equal(t, want, resp.GetMysql().GetMysqldExporter().GetConnectionTimeout()) + }) + + t.Run("PostgreSQL", func(t *testing.T) { + state.On("RequestStateUpdate", ctx, models.PMMServerAgentID).Once() + + resp, err := s.AddService(ctx, &managementv1.AddServiceRequest{ + Service: &managementv1.AddServiceRequest_Postgresql{ + Postgresql: &managementv1.AddPostgreSQLServiceParams{ + NodeId: models.PMMServerNodeID, + ServiceName: "mgmt-test-pg-timeout", + Address: "127.0.0.1", + Port: 5432, + Database: "postgres", + PmmAgentId: models.PMMServerAgentID, + Username: "postgres", + SkipConnectionCheck: true, + MetricsMode: managementv1.MetricsMode_METRICS_MODE_PULL, + ConnectionTimeout: want, + }, + }, + }) + require.NoError(t, err) + require.NotNil(t, resp.GetPostgresql()) + assert.Equal(t, want, resp.GetPostgresql().GetPostgresExporter().GetConnectionTimeout()) + }) + + t.Run("ProxySQL", func(t *testing.T) { + state.On("RequestStateUpdate", ctx, models.PMMServerAgentID).Once() + + resp, err := s.AddService(ctx, &managementv1.AddServiceRequest{ + Service: &managementv1.AddServiceRequest_Proxysql{ + Proxysql: &managementv1.AddProxySQLServiceParams{ + NodeId: models.PMMServerNodeID, + ServiceName: "mgmt-test-px-timeout", + Address: "127.0.0.1", + Port: 6033, + PmmAgentId: models.PMMServerAgentID, + Username: "admin", + SkipConnectionCheck: true, + MetricsMode: managementv1.MetricsMode_METRICS_MODE_PULL, + ConnectionTimeout: want, + }, + }, + }) + require.NoError(t, err) + require.NotNil(t, resp.GetProxysql()) + assert.Equal(t, want, resp.GetProxysql().GetProxysqlExporter().GetConnectionTimeout()) + }) + + t.Run("Valkey", func(t *testing.T) { + state.On("RequestStateUpdate", ctx, models.PMMServerAgentID).Once() + + resp, err := s.AddService(ctx, &managementv1.AddServiceRequest{ + Service: &managementv1.AddServiceRequest_Valkey{ + Valkey: &managementv1.AddValkeyServiceParams{ + NodeId: models.PMMServerNodeID, + ServiceName: "mgmt-test-valkey-timeout", + Address: "127.0.0.1", + Port: 6379, + PmmAgentId: models.PMMServerAgentID, + SkipConnectionCheck: true, + MetricsMode: managementv1.MetricsMode_METRICS_MODE_PULL, + ConnectionTimeout: want, + }, + }, + }) + require.NoError(t, err) + require.NotNil(t, resp.GetValkey()) + assert.Equal(t, want, resp.GetValkey().GetValkeyExporter().GetConnectionTimeout()) + }) + + t.Run("External", func(t *testing.T) { + vmdb.On("RequestConfigurationUpdate").Once() + + resp, err := s.AddService(ctx, &managementv1.AddServiceRequest{ + Service: &managementv1.AddServiceRequest_External{ + External: &managementv1.AddExternalServiceParams{ + NodeId: models.PMMServerNodeID, + RunsOnNodeId: models.PMMServerNodeID, + ServiceName: "mgmt-test-external-timeout", + Address: "127.0.0.1", + ListenPort: 42000, + Scheme: "http", + MetricsPath: "/metrics", + SkipConnectionCheck: true, + MetricsMode: managementv1.MetricsMode_METRICS_MODE_PULL, + ConnectionTimeout: want, + }, + }, + }) + require.NoError(t, err) + require.NotNil(t, resp.GetExternal()) + assert.Equal(t, want, resp.GetExternal().GetExternalExporter().GetConnectionTimeout()) + }) + + t.Run("Azure Database", func(t *testing.T) { + _, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ + EnableAzurediscover: pointer.ToBool(true), + }) + require.NoError(t, err) + + state.On("RequestStateUpdate", ctx, models.PMMServerAgentID).Once() + + _, err = s.AddAzureDatabase(ctx, &managementv1.AddAzureDatabaseRequest{ + Region: "westeurope", + InstanceId: "mgmt-test-azure-timeout-instance", + NodeName: "mgmt-test-azure-timeout-node", + ServiceName: "mgmt-test-azure-timeout", + NodeModel: "general-purpose", + Address: "127.0.0.1", + Port: 3306, + Username: "root", + Password: "secret", + AzureClientId: "client-id", + AzureClientSecret: "client-secret", + AzureTenantId: "tenant-id", + AzureSubscriptionId: "subscription-id", + AzureResourceGroup: "resource-group", + AzureDatabaseExporter: true, + SkipConnectionCheck: true, + Type: managementv1.DiscoverAzureDatabaseType_DISCOVER_AZURE_DATABASE_TYPE_MYSQL, + ConnectionTimeout: want, + }) + require.NoError(t, err) + + service, err := models.FindServiceByName(db.Querier, "mgmt-test-azure-timeout") + require.NoError(t, err) + + agents, err := models.FindAgents(db.Querier, models.AgentFilters{ServiceID: service.ServiceID}) + require.NoError(t, err) + require.Len(t, agents, 2) + + got := map[models.AgentType]time.Duration{} + for _, agent := range agents { + got[agent.AgentType] = pointer.GetDuration(agent.ExporterOptions.ConnectionTimeout) + } + + assert.Equal(t, want.AsDuration(), got[models.AzureDatabaseExporterType]) + assert.Equal(t, want.AsDuration(), got[models.MySQLdExporterType]) + }) + + t.Run("RDS MySQL", func(t *testing.T) { + state.On("RequestStateUpdate", ctx, models.PMMServerAgentID).Once() + + resp, err := s.addRDS(ctx, &managementv1.AddRDSServiceParams{ + Region: "us-east-1", + Az: "us-east-1b", + InstanceId: "mgmt-test-rds-mysql-timeout", + NodeModel: "db.t3.micro", + Address: "mgmt-test-rds-mysql-timeout.example.com", + Port: 3306, + Engine: managementv1.DiscoverRDSEngine_DISCOVER_RDS_ENGINE_MYSQL, + Username: "root", + Password: "secret", + AwsAccessKey: "access-key", + AwsSecretKey: "secret-key", + RdsExporter: true, + SkipConnectionCheck: true, + MetricsMode: managementv1.MetricsMode_METRICS_MODE_PULL, + ConnectionTimeout: want, + }) + require.NoError(t, err) + require.NotNil(t, resp.GetRds()) + assert.Equal(t, want, resp.GetRds().GetRdsExporter().GetConnectionTimeout()) + assert.Equal(t, want, resp.GetRds().GetMysqldExporter().GetConnectionTimeout()) + }) + + t.Run("RDS PostgreSQL", func(t *testing.T) { + state.On("RequestStateUpdate", ctx, models.PMMServerAgentID).Once() + + resp, err := s.addRDS(ctx, &managementv1.AddRDSServiceParams{ + Region: "us-east-1", + Az: "us-east-1b", + InstanceId: "mgmt-test-rds-pg-timeout", + NodeModel: "db.t3.micro", + Address: "mgmt-test-rds-pg-timeout.example.com", + Port: 5432, + Engine: managementv1.DiscoverRDSEngine_DISCOVER_RDS_ENGINE_POSTGRESQL, + Database: "postgres", + Username: "postgres", + Password: "secret", + AwsAccessKey: "access-key", + AwsSecretKey: "secret-key", + RdsExporter: true, + SkipConnectionCheck: true, + MetricsMode: managementv1.MetricsMode_METRICS_MODE_PULL, + ConnectionTimeout: want, + AutoDiscoveryLimit: 10, + MaxPostgresqlExporterConnections: 15, + }) + require.NoError(t, err) + require.NotNil(t, resp.GetRds()) + assert.Equal(t, want, resp.GetRds().GetRdsExporter().GetConnectionTimeout()) + assert.Equal(t, want, resp.GetRds().GetPostgresqlExporter().GetConnectionTimeout()) + }) +} diff --git a/managed/services/management/agent.go b/managed/services/management/agent.go index bae1d2c0c28..138cc454409 100644 --- a/managed/services/management/agent.go +++ b/managed/services/management/agent.go @@ -175,6 +175,9 @@ func (s *ManagementService) agentToAPI(agent *models.Agent) (*managementv1.Unive ua.MetricsScheme = agent.ExporterOptions.MetricsScheme ua.PushMetrics = agent.ExporterOptions.PushMetrics ua.ExposeExporter = agent.ExporterOptions.ExposeExporter + if agent.ExporterOptions.ConnectionTimeout != nil { + ua.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) + } // QAN options ua.MaxQueryLength = agent.QANOptions.MaxQueryLength diff --git a/managed/services/management/azure_database.go b/managed/services/management/azure_database.go index a8a6fe0c24c..a227b72f9c0 100644 --- a/managed/services/management/azure_database.go +++ b/managed/services/management/azure_database.go @@ -31,6 +31,7 @@ import ( managementv1 "github.com/percona/pmm/api/management/v1" "github.com/percona/pmm/managed/models" "github.com/percona/pmm/managed/services" + "github.com/percona/pmm/managed/utils/duration" "github.com/percona/pmm/utils/logger" ) @@ -263,6 +264,9 @@ func (s *ManagementService) AddAzureDatabase(ctx context.Context, req *managemen PMMAgentID: models.PMMServerAgentID, ServiceID: service.ServiceID, AzureOptions: models.AzureOptionsFromRequest(req), + ExporterOptions: models.ExporterOptions{ + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), + }, }) if err != nil { return err @@ -277,6 +281,9 @@ func (s *ManagementService) AddAzureDatabase(ctx context.Context, req *managemen Password: req.Password, TLS: req.Tls, TLSSkipVerify: req.TlsSkipVerify, + ExporterOptions: models.ExporterOptions{ + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), + }, MySQLOptions: models.MySQLOptions{ TableCountTablestatsGroupLimit: tablestatsGroupTableLimit, }, diff --git a/managed/services/management/external.go b/managed/services/management/external.go index ffc5c53de2b..b505c53c77f 100644 --- a/managed/services/management/external.go +++ b/managed/services/management/external.go @@ -26,6 +26,7 @@ import ( managementv1 "github.com/percona/pmm/api/management/v1" "github.com/percona/pmm/managed/models" "github.com/percona/pmm/managed/services" + "github.com/percona/pmm/managed/utils/duration" ) // AddExternal adds an external service based on the provided request. @@ -100,16 +101,17 @@ func (s *ManagementService) addExternal(ctx context.Context, req *managementv1.A } params := &models.CreateExternalExporterParams{ - RunsOnNodeID: runsOnNodeID, - ServiceID: service.ServiceID, - Username: req.Username, - Password: req.Password, - Scheme: req.Scheme, - MetricsPath: req.MetricsPath, - ListenPort: req.ListenPort, - CustomLabels: req.CustomLabels, - PushMetrics: isPushMode(req.MetricsMode), - TLSSkipVerify: req.TlsSkipVerify, + RunsOnNodeID: runsOnNodeID, + ServiceID: service.ServiceID, + Username: req.Username, + Password: req.Password, + Scheme: req.Scheme, + MetricsPath: req.MetricsPath, + ListenPort: req.ListenPort, + CustomLabels: req.CustomLabels, + PushMetrics: isPushMode(req.MetricsMode), + TLSSkipVerify: req.TlsSkipVerify, + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), } row, err := models.CreateExternalExporter(tx.Querier, params) if err != nil { diff --git a/managed/services/management/mongodb.go b/managed/services/management/mongodb.go index 15573547446..7671db6748d 100644 --- a/managed/services/management/mongodb.go +++ b/managed/services/management/mongodb.go @@ -25,6 +25,7 @@ import ( managementv1 "github.com/percona/pmm/api/management/v1" "github.com/percona/pmm/managed/models" "github.com/percona/pmm/managed/services" + "github.com/percona/pmm/managed/utils/duration" ) // AddMongoDB adds "MongoDB Service", "MongoDB Exporter Agent", "QAN MongoDB Profiler" and "Real-Time Analytics Agent". @@ -77,6 +78,7 @@ func (s *ManagementService) addMongoDB(ctx context.Context, req *managementv1.Ad ExposeExporter: req.ExposeExporter, PushMetrics: isPushMode(req.MetricsMode), DisabledCollectors: req.DisableCollectors, + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), }, }) if err != nil { diff --git a/managed/services/management/mysql.go b/managed/services/management/mysql.go index baa9e60f42a..755efdc43f9 100644 --- a/managed/services/management/mysql.go +++ b/managed/services/management/mysql.go @@ -25,6 +25,7 @@ import ( managementv1 "github.com/percona/pmm/api/management/v1" "github.com/percona/pmm/managed/models" "github.com/percona/pmm/managed/services" + "github.com/percona/pmm/managed/utils/duration" ) const ( @@ -92,21 +93,23 @@ func (s *ManagementService) addMySQL(ctx context.Context, req *managementv1.AddM } mysqlOptions.TableCountTablestatsGroupLimit = tablestatsGroupTableLimit + exporterOptions := models.ExporterOptions{ + ExposeExporter: req.ExposeExporter, + PushMetrics: isPushMode(req.MetricsMode), + DisabledCollectors: req.DisableCollectors, + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), + } row, err := models.CreateAgent(tx.Querier, models.MySQLdExporterType, &models.CreateAgentParams{ - PMMAgentID: req.PmmAgentId, - ServiceID: service.ServiceID, - Username: req.Username, - Password: req.Password, - AgentPassword: req.AgentPassword, - TLS: req.Tls, - TLSSkipVerify: req.TlsSkipVerify, - MySQLOptions: mysqlOptions, - ExporterOptions: models.ExporterOptions{ - ExposeExporter: req.ExposeExporter, - PushMetrics: isPushMode(req.MetricsMode), - DisabledCollectors: req.DisableCollectors, - }, - LogLevel: services.SpecifyLogLevel(req.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), + PMMAgentID: req.PmmAgentId, + ServiceID: service.ServiceID, + Username: req.Username, + Password: req.Password, + AgentPassword: req.AgentPassword, + TLS: req.Tls, + TLSSkipVerify: req.TlsSkipVerify, + MySQLOptions: mysqlOptions, + ExporterOptions: exporterOptions, + LogLevel: services.SpecifyLogLevel(req.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), }) if err != nil { return err diff --git a/managed/services/management/node.go b/managed/services/management/node.go index b91b875b409..f552d2ade60 100644 --- a/managed/services/management/node.go +++ b/managed/services/management/node.go @@ -33,6 +33,7 @@ import ( "github.com/percona/pmm/managed/models" "github.com/percona/pmm/managed/services" "github.com/percona/pmm/managed/utils/auth" + "github.com/percona/pmm/managed/utils/duration" ) // RegisterNode performs the registration of a new node. @@ -114,7 +115,7 @@ func (s *ManagementService) RegisterNode(ctx context.Context, req *managementv1. res.PmmAgent = a.(*inventoryv1.PMMAgent) //nolint:forcetypeassert _, err = models.CreateNodeExporter(tx.Querier, pmmAgent.AgentID, nil, isPushMode(req.MetricsMode), req.ExposeExporter, - req.DisableCollectors, pointer.ToStringOrNil(req.AgentPassword), "") + req.DisableCollectors, pointer.ToStringOrNil(req.AgentPassword), "", duration.OptionalFromProto(req.ConnectionTimeout)) if err != nil { return err } diff --git a/managed/services/management/postgresql.go b/managed/services/management/postgresql.go index 2a976287333..cb1a8c57e30 100644 --- a/managed/services/management/postgresql.go +++ b/managed/services/management/postgresql.go @@ -25,6 +25,7 @@ import ( managementv1 "github.com/percona/pmm/api/management/v1" "github.com/percona/pmm/managed/models" "github.com/percona/pmm/managed/services" + "github.com/percona/pmm/managed/utils/duration" ) // AddPostgreSQL adds "PostgreSQL Service", "PostgreSQL Exporter Agent" and "QAN PostgreSQL PerfSchema Agent". @@ -64,19 +65,21 @@ func (s *ManagementService) addPostgreSQL(ctx context.Context, req *managementv1 return err } + exporterOptions := models.ExporterOptions{ + ExposeExporter: req.ExposeExporter, + PushMetrics: isPushMode(req.MetricsMode), + DisabledCollectors: req.DisableCollectors, + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), + } row, err := models.CreateAgent(tx.Querier, models.PostgresExporterType, &models.CreateAgentParams{ - PMMAgentID: req.PmmAgentId, - ServiceID: service.ServiceID, - Username: req.Username, - Password: req.Password, - AgentPassword: req.AgentPassword, - TLS: req.Tls, - TLSSkipVerify: req.TlsSkipVerify, - ExporterOptions: models.ExporterOptions{ - ExposeExporter: req.ExposeExporter, - PushMetrics: isPushMode(req.MetricsMode), - DisabledCollectors: req.DisableCollectors, - }, + PMMAgentID: req.PmmAgentId, + ServiceID: service.ServiceID, + Username: req.Username, + Password: req.Password, + AgentPassword: req.AgentPassword, + TLS: req.Tls, + TLSSkipVerify: req.TlsSkipVerify, + ExporterOptions: exporterOptions, PostgreSQLOptions: models.PostgreSQLOptionsFromRequest(req), LogLevel: services.SpecifyLogLevel(req.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), }) diff --git a/managed/services/management/proxysql.go b/managed/services/management/proxysql.go index addbb8f8728..fa0cdb8014f 100644 --- a/managed/services/management/proxysql.go +++ b/managed/services/management/proxysql.go @@ -25,6 +25,7 @@ import ( managementv1 "github.com/percona/pmm/api/management/v1" "github.com/percona/pmm/managed/models" "github.com/percona/pmm/managed/services" + "github.com/percona/pmm/managed/utils/duration" ) // AddProxySQL adds "ProxySQL Service", "ProxySQL Exporter Agent" and "QAN ProxySQL PerfSchema Agent". @@ -62,20 +63,22 @@ func (s *ManagementService) addProxySQL(ctx context.Context, req *managementv1.A return err } + exporterOptions := models.ExporterOptions{ + ExposeExporter: req.ExposeExporter, + PushMetrics: isPushMode(req.MetricsMode), + DisabledCollectors: req.DisableCollectors, + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), + } row, err := models.CreateAgent(tx.Querier, models.ProxySQLExporterType, &models.CreateAgentParams{ - PMMAgentID: req.PmmAgentId, - ServiceID: service.ServiceID, - Username: req.Username, - Password: req.Password, - AgentPassword: req.AgentPassword, - TLS: req.Tls, - TLSSkipVerify: req.TlsSkipVerify, - ExporterOptions: models.ExporterOptions{ - ExposeExporter: req.ExposeExporter, - PushMetrics: isPushMode(req.MetricsMode), - DisabledCollectors: req.DisableCollectors, - }, - LogLevel: services.SpecifyLogLevel(req.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_FATAL), + PMMAgentID: req.PmmAgentId, + ServiceID: service.ServiceID, + Username: req.Username, + Password: req.Password, + AgentPassword: req.AgentPassword, + TLS: req.Tls, + TLSSkipVerify: req.TlsSkipVerify, + ExporterOptions: exporterOptions, + LogLevel: services.SpecifyLogLevel(req.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_FATAL), }) if err != nil { return err diff --git a/managed/services/management/rds.go b/managed/services/management/rds.go index 2e9b8a1222a..488d3fcfa65 100644 --- a/managed/services/management/rds.go +++ b/managed/services/management/rds.go @@ -39,6 +39,7 @@ import ( managementv1 "github.com/percona/pmm/api/management/v1" "github.com/percona/pmm/managed/models" "github.com/percona/pmm/managed/services" + "github.com/percona/pmm/managed/utils/duration" "github.com/percona/pmm/utils/logger" ) @@ -320,7 +321,8 @@ func (s *ManagementService) addRDS(ctx context.Context, req *managementv1.AddRDS RDSEnhancedMetricsDisabled: req.DisableEnhancedMetrics, }, ExporterOptions: models.ExporterOptions{ - PushMetrics: isPushMode(metricsMode), + PushMetrics: isPushMode(metricsMode), + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), }, }) if err != nil { @@ -364,7 +366,8 @@ func (s *ManagementService) addRDS(ctx context.Context, req *managementv1.AddRDS TLS: req.Tls, TLSSkipVerify: req.TlsSkipVerify, ExporterOptions: models.ExporterOptions{ - PushMetrics: isPushMode(metricsMode), + PushMetrics: isPushMode(metricsMode), + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), }, MySQLOptions: models.MySQLOptions{ TableCountTablestatsGroupLimit: tablestatsGroupTableLimit, @@ -445,7 +448,8 @@ func (s *ManagementService) addRDS(ctx context.Context, req *managementv1.AddRDS TLS: req.Tls, TLSSkipVerify: req.TlsSkipVerify, ExporterOptions: models.ExporterOptions{ - PushMetrics: isPushMode(metricsMode), + PushMetrics: isPushMode(metricsMode), + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), }, MySQLOptions: models.MySQLOptions{ TableCountTablestatsGroupLimit: tablestatsGroupTableLimit, diff --git a/managed/services/management/valkey.go b/managed/services/management/valkey.go index 1518893e647..66cfee7ca9e 100644 --- a/managed/services/management/valkey.go +++ b/managed/services/management/valkey.go @@ -25,6 +25,7 @@ import ( managementv1 "github.com/percona/pmm/api/management/v1" "github.com/percona/pmm/managed/models" "github.com/percona/pmm/managed/services" + "github.com/percona/pmm/managed/utils/duration" ) // addValkey adds a new Valkey service and an accompanying "Valkey Exporter agent". @@ -71,8 +72,9 @@ func (s *ManagementService) addValkey(ctx context.Context, req *managementv1.Add TLS: req.Tls, TLSSkipVerify: req.TlsSkipVerify, ExporterOptions: models.ExporterOptions{ - ExposeExporter: req.ExposeExporter, - PushMetrics: isPushMode(req.MetricsMode), + ExposeExporter: req.ExposeExporter, + PushMetrics: isPushMode(req.MetricsMode), + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), }, ValkeyOptions: models.ValkeyOptionsFromRequest(req), }) diff --git a/managed/utils/duration/duration.go b/managed/utils/duration/duration.go new file mode 100644 index 00000000000..53d9c3cb59f --- /dev/null +++ b/managed/utils/duration/duration.go @@ -0,0 +1,33 @@ +// Copyright (C) 2023 Percona LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Package duration provides utilities for working with time durations. +package duration + +import ( + "time" + + "github.com/AlekSi/pointer" + durationpb "google.golang.org/protobuf/types/known/durationpb" +) + +// OptionalFromProto converts a protobuf Duration to a *time.Duration, preserving nil vs zero. +func OptionalFromProto(d *durationpb.Duration) *time.Duration { + if d == nil { + return nil + } + + return pointer.To(d.AsDuration()) +} diff --git a/managed/utils/duration/duration_test.go b/managed/utils/duration/duration_test.go new file mode 100644 index 00000000000..11f6936c697 --- /dev/null +++ b/managed/utils/duration/duration_test.go @@ -0,0 +1,44 @@ +// Copyright (C) 2023 Percona LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package duration + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" + "google.golang.org/protobuf/types/known/durationpb" +) + +func TestOptionalFromProto(t *testing.T) { + t.Run("nil", func(t *testing.T) { + assert.Nil(t, OptionalFromProto(nil)) + }) + + t.Run("zero", func(t *testing.T) { + actual := OptionalFromProto(durationpb.New(0)) + if assert.NotNil(t, actual) { + assert.Equal(t, time.Duration(0), *actual) + } + }) + + t.Run("non-zero", func(t *testing.T) { + actual := OptionalFromProto(durationpb.New(1500 * time.Millisecond)) + if assert.NotNil(t, actual) { + assert.Equal(t, 1500*time.Millisecond, *actual) + } + }) +} From cab99a2c10917bba1a0a22ae4c1e25e223954270 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Ctvrtka?= Date: Tue, 21 Apr 2026 11:26:10 +0200 Subject: [PATCH 02/10] PMM-12832 Remove another leftovers. --- .../inventory/add_agent_external_exporter.go | 43 +- .../inventory/add_agent_node_exporter.go | 6 +- .../inventory/add_agent_rds_exporter.go | 6 +- .../change_agent_azure_database_exporter.go | 5 +- .../change_agent_external_exporter.go | 11 +- .../inventory/change_agent_node_exporter.go | 9 +- .../inventory/change_agent_rds_exporter.go | 5 +- admin/commands/management/add_external.go | 3 - api/inventory/v1/agents.pb.go | 801 ++++++++---------- api/inventory/v1/agents.pb.validate.go | 356 -------- api/inventory/v1/agents.proto | 40 - .../agents_service/add_agent_responses.go | 24 - .../agents_service/change_agent_responses.go | 24 - .../agents_service/get_agent_responses.go | 12 - .../agents_service/list_agents_responses.go | 12 - api/inventory/v1/json/v1.json | 120 --- api/management/v1/external.pb.go | 39 +- api/management/v1/external.pb.validate.go | 30 - api/management/v1/external.proto | 5 - .../add_service_responses.go | 12 - .../register_node_responses.go | 3 - api/management/v1/json/v1.json | 25 - api/management/v1/node.pb.go | 67 +- api/management/v1/node.pb.validate.go | 30 - api/management/v1/node.proto | 5 - api/swagger/swagger-dev.json | 145 ---- api/swagger/swagger.json | 145 ---- managed/models/agent_helpers.go | 9 +- managed/models/agent_helpers_test.go | 42 - managed/services/converters.go | 12 - managed/services/inventory/agents.go | 33 +- managed/services/inventory/agents_test.go | 147 +--- .../add_service_exporter_timeout_test.go | 28 +- managed/services/management/azure_database.go | 3 - managed/services/management/external.go | 22 +- managed/services/management/node.go | 3 +- managed/services/management/rds.go | 3 +- 37 files changed, 460 insertions(+), 1825 deletions(-) diff --git a/admin/commands/inventory/add_agent_external_exporter.go b/admin/commands/inventory/add_agent_external_exporter.go index 6454a8628ec..039faf30a2a 100644 --- a/admin/commands/inventory/add_agent_external_exporter.go +++ b/admin/commands/inventory/add_agent_external_exporter.go @@ -17,7 +17,6 @@ package inventory import ( "fmt" "strings" - "time" "github.com/AlekSi/pointer" @@ -52,17 +51,16 @@ func (res *addAgentExternalExporterResult) String() string { // AddAgentExternalExporterCommand is used by Kong for CLI flags and commands. type AddAgentExternalExporterCommand struct { - RunsOnNodeID string `required:"" help:"Node identifier where this instance runs"` - ServiceID string `required:"" help:"Service identifier"` - Username string `help:"HTTP Basic auth username for scraping metrics"` - Password string `help:"HTTP Basic auth password for scraping metrics"` - Scheme string `help:"Scheme to generate URI to exporter metrics endpoints (http, https)"` - MetricsPath string `help:"Path under which metrics are exposed, used to generate URI"` - ListenPort int64 `required:"" placeholder:"port" help:"Listen port for scraping metrics"` - CustomLabels map[string]string `mapsep:"," help:"Custom user-assigned labels"` - PushMetrics bool `help:"Enables push metrics model flow, it will be sent to the server by an agent"` - TLSSkipVerify bool `help:"Skip TLS certificate verification"` - ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` + RunsOnNodeID string `required:"" help:"Node identifier where this instance runs"` + ServiceID string `required:"" help:"Service identifier"` + Username string `help:"HTTP Basic auth username for scraping metrics"` + Password string `help:"HTTP Basic auth password for scraping metrics"` + Scheme string `help:"Scheme to generate URI to exporter metrics endpoints (http, https)"` + MetricsPath string `help:"Path under which metrics are exposed, used to generate URI"` + ListenPort int64 `required:"" placeholder:"port" help:"Listen port for scraping metrics"` + CustomLabels map[string]string `mapsep:"," help:"Custom user-assigned labels"` + PushMetrics bool `help:"Enables push metrics model flow, it will be sent to the server by an agent"` + TLSSkipVerify bool `help:"Skip TLS certificate verification"` } // RunCmd executes the AddAgentExternalExporterCommand and returns the result. @@ -76,17 +74,16 @@ func (cmd *AddAgentExternalExporterCommand) RunCmd() (commands.Result, error) { params := &agents.AddAgentParams{ Body: agents.AddAgentBody{ ExternalExporter: &agents.AddAgentParamsBodyExternalExporter{ - RunsOnNodeID: cmd.RunsOnNodeID, - ServiceID: cmd.ServiceID, - Username: cmd.Username, - Password: cmd.Password, - Scheme: cmd.Scheme, - MetricsPath: cmd.MetricsPath, - ListenPort: cmd.ListenPort, - CustomLabels: pointer.Get(customLabels), - PushMetrics: cmd.PushMetrics, - TLSSkipVerify: cmd.TLSSkipVerify, - ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), + RunsOnNodeID: cmd.RunsOnNodeID, + ServiceID: cmd.ServiceID, + Username: cmd.Username, + Password: cmd.Password, + Scheme: cmd.Scheme, + MetricsPath: cmd.MetricsPath, + ListenPort: cmd.ListenPort, + CustomLabels: pointer.Get(customLabels), + PushMetrics: cmd.PushMetrics, + TLSSkipVerify: cmd.TLSSkipVerify, }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_node_exporter.go b/admin/commands/inventory/add_agent_node_exporter.go index 9130838be69..b1c62b80aab 100644 --- a/admin/commands/inventory/add_agent_node_exporter.go +++ b/admin/commands/inventory/add_agent_node_exporter.go @@ -15,8 +15,6 @@ package inventory import ( - "time" - "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" "github.com/percona/pmm/api/inventory/v1/json/client" @@ -51,7 +49,6 @@ type AddAgentNodeExporterCommand struct { PushMetrics bool `help:"Enables push metrics model flow, it will be sent to the server by an agent"` ExposeExporter bool `help:"Expose the address of the exporter publicly on 0.0.0.0"` DisableCollectors []string `help:"Comma-separated list of collector names to exclude from exporter"` - ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` flags.LogLevelNoFatalFlags } @@ -67,8 +64,7 @@ func (cmd *AddAgentNodeExporterCommand) RunCmd() (commands.Result, error) { PushMetrics: cmd.PushMetrics, ExposeExporter: cmd.ExposeExporter, DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), - LogLevel: cmd.LogLevel.EnumValue(), - ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), + LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_rds_exporter.go b/admin/commands/inventory/add_agent_rds_exporter.go index 13956f81b29..42a40d030e9 100644 --- a/admin/commands/inventory/add_agent_rds_exporter.go +++ b/admin/commands/inventory/add_agent_rds_exporter.go @@ -15,8 +15,6 @@ package inventory import ( - "time" - "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" "github.com/percona/pmm/api/inventory/v1/json/client" @@ -58,7 +56,6 @@ type AddAgentRDSExporterCommand struct { DisableBasicMetrics bool `help:"Disable basic metrics"` DisableEnhancedMetrics bool `help:"Disable enhanced metrics"` PushMetrics bool `help:"Enables push metrics model flow, it will be sent to the server by an agent"` - ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` flags.LogLevelFatalFlags } @@ -78,8 +75,7 @@ func (cmd *AddAgentRDSExporterCommand) RunCmd() (commands.Result, error) { DisableBasicMetrics: cmd.DisableBasicMetrics, DisableEnhancedMetrics: cmd.DisableEnhancedMetrics, PushMetrics: cmd.PushMetrics, - LogLevel: cmd.LogLevel.EnumValue(), - ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), + LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/change_agent_azure_database_exporter.go b/admin/commands/inventory/change_agent_azure_database_exporter.go index 60c69abd8d3..b7c9a18c74c 100644 --- a/admin/commands/inventory/change_agent_azure_database_exporter.go +++ b/admin/commands/inventory/change_agent_azure_database_exporter.go @@ -16,7 +16,6 @@ package inventory import ( "fmt" - "time" "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" @@ -78,8 +77,7 @@ type ChangeAgentAzureDatabaseExporterCommand struct { AzureResourceGroup *string `help:"Azure Resource Group"` // Exporter options - PushMetrics *bool `help:"Enable push metrics with vmagent"` - ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` + PushMetrics *bool `help:"Enable push metrics with vmagent"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -101,7 +99,6 @@ func (cmd *ChangeAgentAzureDatabaseExporterCommand) RunCmd() (commands.Result, e AzureResourceGroup: cmd.AzureResourceGroup, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), - ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), } if customLabels != nil { diff --git a/admin/commands/inventory/change_agent_external_exporter.go b/admin/commands/inventory/change_agent_external_exporter.go index 570d5136310..08e2f944cfb 100644 --- a/admin/commands/inventory/change_agent_external_exporter.go +++ b/admin/commands/inventory/change_agent_external_exporter.go @@ -16,7 +16,6 @@ package inventory import ( "fmt" - "time" "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/api/inventory/v1/json/client" @@ -66,11 +65,10 @@ type ChangeAgentExternalExporterCommand struct { Username *string `help:"Username for the external exporter"` // External-specific options - ListenPort *int64 `help:"Listen port for the external exporter"` - MetricsScheme *string `help:"Metrics scheme (http or https)"` - MetricsPath *string `help:"Metrics path"` - PushMetrics *bool `help:"Enable push metrics with vmagent"` - ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` + ListenPort *int64 `help:"Listen port for the external exporter"` + MetricsScheme *string `help:"Metrics scheme (http or https)"` + MetricsPath *string `help:"Metrics path"` + PushMetrics *bool `help:"Enable push metrics with vmagent"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -90,7 +88,6 @@ func (cmd *ChangeAgentExternalExporterCommand) RunCmd() (commands.Result, error) Scheme: cmd.MetricsScheme, MetricsPath: cmd.MetricsPath, EnablePushMetrics: cmd.PushMetrics, - ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), } if customLabels != nil { diff --git a/admin/commands/inventory/change_agent_node_exporter.go b/admin/commands/inventory/change_agent_node_exporter.go index 09246333567..155edd423e7 100644 --- a/admin/commands/inventory/change_agent_node_exporter.go +++ b/admin/commands/inventory/change_agent_node_exporter.go @@ -16,7 +16,6 @@ package inventory import ( "fmt" - "time" "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" @@ -69,10 +68,9 @@ type ChangeAgentNodeExporterCommand struct { Enable *bool `help:"Enable or disable the agent"` // Exporter options - PushMetrics *bool `help:"Enable push metrics with vmagent"` - ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` - DisableCollectors []string `help:"List of collector names to disable"` - ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` + PushMetrics *bool `help:"Enable push metrics with vmagent"` + ExposeExporter *bool `help:"Expose the exporter process on all public interfaces"` + DisableCollectors []string `help:"List of collector names to disable"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -91,7 +89,6 @@ func (cmd *ChangeAgentNodeExporterCommand) RunCmd() (commands.Result, error) { DisableCollectors: cmd.DisableCollectors, ExposeExporter: cmd.ExposeExporter, LogLevel: convertLogLevelPtr(cmd.LogLevel), - ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), } if customLabels != nil { diff --git a/admin/commands/inventory/change_agent_rds_exporter.go b/admin/commands/inventory/change_agent_rds_exporter.go index 32e7516155d..8972e27074e 100644 --- a/admin/commands/inventory/change_agent_rds_exporter.go +++ b/admin/commands/inventory/change_agent_rds_exporter.go @@ -16,7 +16,6 @@ package inventory import ( "fmt" - "time" "github.com/percona/pmm/admin/commands" "github.com/percona/pmm/admin/pkg/flags" @@ -79,8 +78,7 @@ type ChangeAgentRDSExporterCommand struct { DisableEnhancedMetrics *bool `help:"Disable enhanced metrics"` // Exporter options - PushMetrics *bool `help:"Enable push metrics with vmagent"` - ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` + PushMetrics *bool `help:"Enable push metrics with vmagent"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -101,7 +99,6 @@ func (cmd *ChangeAgentRDSExporterCommand) RunCmd() (commands.Result, error) { DisableEnhancedMetrics: cmd.DisableEnhancedMetrics, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), - ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), } if customLabels != nil { diff --git a/admin/commands/management/add_external.go b/admin/commands/management/add_external.go index d94aeaf81a5..acc5aed1c05 100644 --- a/admin/commands/management/add_external.go +++ b/admin/commands/management/add_external.go @@ -18,7 +18,6 @@ import ( "fmt" "os" "strings" - "time" "github.com/percona/pmm/admin/agentlocal" "github.com/percona/pmm/admin/commands" @@ -71,7 +70,6 @@ type AddExternalCommand struct { Group string `default:"${externalDefaultGroupExporter}" help:"Group name of external service (default: ${externalDefaultGroupExporter})"` SkipConnectionCheck bool `help:"Skip exporter connection checks"` TLSSkipVerify bool `help:"Skip TLS certificate verification"` - ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` flags.MetricsModeFlags } @@ -142,7 +140,6 @@ func (cmd *AddExternalCommand) RunCmd() (commands.Result, error) { Group: cmd.Group, SkipConnectionCheck: cmd.SkipConnectionCheck, TLSSkipVerify: cmd.TLSSkipVerify, - ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, }, Context: commands.Ctx, diff --git a/api/inventory/v1/agents.pb.go b/api/inventory/v1/agents.pb.go index afd70dbb8f0..f546e4c2e5c 100644 --- a/api/inventory/v1/agents.pb.go +++ b/api/inventory/v1/agents.pb.go @@ -412,10 +412,8 @@ type NodeExporter struct { ExposeExporter bool `protobuf:"varint,14,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` // Metrics resolution for this agent. MetricsResolutions *common.MetricsResolutions `protobuf:"bytes,15,opt,name=metrics_resolutions,json=metricsResolutions,proto3" json:"metrics_resolutions,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,16,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *NodeExporter) Reset() { @@ -532,13 +530,6 @@ func (x *NodeExporter) GetMetricsResolutions() *common.MetricsResolutions { return nil } -func (x *NodeExporter) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - // MySQLdExporter runs on Generic or Container Node and exposes MySQL Service metrics. type MySQLdExporter struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -2829,10 +2820,8 @@ type RDSExporter struct { AutoDiscoveryLimit int32 `protobuf:"varint,25,opt,name=auto_discovery_limit,json=autoDiscoveryLimit,proto3" json:"auto_discovery_limit,omitempty"` // Metrics resolution for this agent. MetricsResolutions *common.MetricsResolutions `protobuf:"bytes,26,opt,name=metrics_resolutions,json=metricsResolutions,proto3" json:"metrics_resolutions,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,27,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RDSExporter) Reset() { @@ -2970,13 +2959,6 @@ func (x *RDSExporter) GetMetricsResolutions() *common.MetricsResolutions { return nil } -func (x *RDSExporter) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - // ExternalExporter runs on any Node type, including Remote Node. type ExternalExporter struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -3007,11 +2989,9 @@ type ExternalExporter struct { // Skip TLS certificate and hostname verification. TlsSkipVerify bool `protobuf:"varint,13,opt,name=tls_skip_verify,json=tlsSkipVerify,proto3" json:"tls_skip_verify,omitempty"` // Actual Agent status. - Status AgentStatus `protobuf:"varint,14,opt,name=status,proto3,enum=inventory.v1.AgentStatus" json:"status,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,15,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Status AgentStatus `protobuf:"varint,14,opt,name=status,proto3,enum=inventory.v1.AgentStatus" json:"status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExternalExporter) Reset() { @@ -3142,13 +3122,6 @@ func (x *ExternalExporter) GetStatus() AgentStatus { return AgentStatus_AGENT_STATUS_UNSPECIFIED } -func (x *ExternalExporter) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - // AzureDatabaseExporter runs on Generic or Container Node and exposes RemoteAzure Node metrics. type AzureDatabaseExporter struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -3178,10 +3151,8 @@ type AzureDatabaseExporter struct { LogLevel LogLevel `protobuf:"varint,14,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` // Metrics resolution for this agent. MetricsResolutions *common.MetricsResolutions `protobuf:"bytes,15,opt,name=metrics_resolutions,json=metricsResolutions,proto3" json:"metrics_resolutions,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,16,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AzureDatabaseExporter) Reset() { @@ -3305,13 +3276,6 @@ func (x *AzureDatabaseExporter) GetMetricsResolutions() *common.MetricsResolutio return nil } -func (x *AzureDatabaseExporter) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - // ChangeCommonAgentParams contains parameters that can be changed for all Agents. type ChangeCommonAgentParams struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -5517,10 +5481,8 @@ type AddNodeExporterParams struct { LogLevel LogLevel `protobuf:"varint,5,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` // Expose the node_exporter process on all public interfaces ExposeExporter bool `protobuf:"varint,6,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,7,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddNodeExporterParams) Reset() { @@ -5595,13 +5557,6 @@ func (x *AddNodeExporterParams) GetExposeExporter() bool { return false } -func (x *AddNodeExporterParams) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - type ChangeNodeExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -5618,10 +5573,8 @@ type ChangeNodeExporterParams struct { LogLevel *LogLevel `protobuf:"varint,6,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` // Expose the node_exporter process on all public interfaces. ExposeExporter *bool `protobuf:"varint,7,opt,name=expose_exporter,json=exposeExporter,proto3,oneof" json:"expose_exporter,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,8,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeNodeExporterParams) Reset() { @@ -5703,13 +5656,6 @@ func (x *ChangeNodeExporterParams) GetExposeExporter() bool { return false } -func (x *ChangeNodeExporterParams) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - type AddMySQLdExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The pmm-agent identifier which runs this instance. @@ -9441,11 +9387,9 @@ type AddRDSExporterParams struct { // Enables push metrics mode for exporter. PushMetrics bool `protobuf:"varint,9,opt,name=push_metrics,json=pushMetrics,proto3" json:"push_metrics,omitempty"` // Log level for exporter. - LogLevel LogLevel `protobuf:"varint,10,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,11,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + LogLevel LogLevel `protobuf:"varint,10,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddRDSExporterParams) Reset() { @@ -9548,13 +9492,6 @@ func (x *AddRDSExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } -func (x *AddRDSExporterParams) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - type ChangeRDSExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -9574,11 +9511,9 @@ type ChangeRDSExporterParams struct { // Disable enhanced metrics. DisableEnhancedMetrics *bool `protobuf:"varint,8,opt,name=disable_enhanced_metrics,json=disableEnhancedMetrics,proto3,oneof" json:"disable_enhanced_metrics,omitempty"` // Log level for exporter. - LogLevel *LogLevel `protobuf:"varint,9,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,10,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + LogLevel *LogLevel `protobuf:"varint,9,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeRDSExporterParams) Reset() { @@ -9674,13 +9609,6 @@ func (x *ChangeRDSExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } -func (x *ChangeRDSExporterParams) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - type AddExternalExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The node identifier where this instance is run. @@ -9703,10 +9631,8 @@ type AddExternalExporterParams struct { PushMetrics bool `protobuf:"varint,11,opt,name=push_metrics,json=pushMetrics,proto3" json:"push_metrics,omitempty"` // Skip TLS certificate and hostname verification. TlsSkipVerify bool `protobuf:"varint,12,opt,name=tls_skip_verify,json=tlsSkipVerify,proto3" json:"tls_skip_verify,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,13,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddExternalExporterParams) Reset() { @@ -9809,13 +9735,6 @@ func (x *AddExternalExporterParams) GetTlsSkipVerify() bool { return false } -func (x *AddExternalExporterParams) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - type ChangeExternalExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -9833,11 +9752,9 @@ type ChangeExternalExporterParams struct { // Path under which metrics are exposed, used to generate URI. MetricsPath *string `protobuf:"bytes,7,opt,name=metrics_path,json=metricsPath,proto3,oneof" json:"metrics_path,omitempty"` // Listen port for scraping metrics. - ListenPort *uint32 `protobuf:"varint,8,opt,name=listen_port,json=listenPort,proto3,oneof" json:"listen_port,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,9,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + ListenPort *uint32 `protobuf:"varint,8,opt,name=listen_port,json=listenPort,proto3,oneof" json:"listen_port,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeExternalExporterParams) Reset() { @@ -9926,13 +9843,6 @@ func (x *ChangeExternalExporterParams) GetListenPort() uint32 { return 0 } -func (x *ChangeExternalExporterParams) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - type AddAzureDatabaseExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The pmm-agent identifier which runs this instance. @@ -9958,11 +9868,9 @@ type AddAzureDatabaseExporterParams struct { // Enables push metrics mode for exporter. PushMetrics bool `protobuf:"varint,11,opt,name=push_metrics,json=pushMetrics,proto3" json:"push_metrics,omitempty"` // Log level for exporter. - LogLevel LogLevel `protobuf:"varint,12,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,13,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + LogLevel LogLevel `protobuf:"varint,12,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddAzureDatabaseExporterParams) Reset() { @@ -10079,13 +9987,6 @@ func (x *AddAzureDatabaseExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } -func (x *AddAzureDatabaseExporterParams) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - type ChangeAzureDatabaseExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -10107,11 +10008,9 @@ type ChangeAzureDatabaseExporterParams struct { // Azure resource group. AzureResourceGroup *string `protobuf:"bytes,9,opt,name=azure_resource_group,json=azureResourceGroup,proto3,oneof" json:"azure_resource_group,omitempty"` // Log level for exporter. - LogLevel *LogLevel `protobuf:"varint,11,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,12,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + LogLevel *LogLevel `protobuf:"varint,11,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel,oneof" json:"log_level,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeAzureDatabaseExporterParams) Reset() { @@ -10214,13 +10113,6 @@ func (x *ChangeAzureDatabaseExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } -func (x *ChangeAzureDatabaseExporterParams) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - type ChangeNomadAgentParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -11067,7 +10959,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + " \x01(\x0e2\x19.inventory.v1.AgentStatusR\x06status\x12*\n" + "\x11process_exec_path\x18\v \x01(\tR\x0fprocessExecPath\x12\x1f\n" + "\vlisten_port\x18\f \x01(\rR\n" + - "listenPortJ\x04\b\x04\x10\x05\"\xd3\x05\n" + + "listenPortJ\x04\b\x04\x10\x05\"\x89\x05\n" + "\fNodeExporter\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12 \n" + "\fpmm_agent_id\x18\x02 \x01(\tR\n" + @@ -11083,8 +10975,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x11process_exec_path\x18\f \x01(\tR\x0fprocessExecPath\x123\n" + "\tlog_level\x18\r \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + "\x0fexpose_exporter\x18\x0e \x01(\bR\x0eexposeExporter\x12K\n" + - "\x13metrics_resolutions\x18\x0f \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12H\n" + - "\x12connection_timeout\x18\x10 \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a?\n" + + "\x13metrics_resolutions\x18\x0f \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xd4\t\n" + @@ -11387,7 +11278,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\tlog_level\x18\x16 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xda\x06\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x90\x06\n" + "\vRDSExporter\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12 \n" + "\fpmm_agent_id\x18\x02 \x01(\tR\n" + @@ -11406,11 +11297,10 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x11process_exec_path\x18\x17 \x01(\tR\x0fprocessExecPath\x123\n" + "\tlog_level\x18\x18 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x120\n" + "\x14auto_discovery_limit\x18\x19 \x01(\x05R\x12autoDiscoveryLimit\x12K\n" + - "\x13metrics_resolutions\x18\x1a \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12H\n" + - "\x12connection_timeout\x18\x1b \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a?\n" + + "\x13metrics_resolutions\x18\x1a \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xef\x05\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xa5\x05\n" + "\x10ExternalExporter\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12%\n" + "\x0fruns_on_node_id\x18\x02 \x01(\tR\frunsOnNodeId\x12\x1a\n" + @@ -11428,11 +11318,10 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x11process_exec_path\x18\v \x01(\tR\x0fprocessExecPath\x12K\n" + "\x13metrics_resolutions\x18\f \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12&\n" + "\x0ftls_skip_verify\x18\r \x01(\bR\rtlsSkipVerify\x121\n" + - "\x06status\x18\x0e \x01(\x0e2\x19.inventory.v1.AgentStatusR\x06status\x12H\n" + - "\x12connection_timeout\x18\x0f \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a?\n" + + "\x06status\x18\x0e \x01(\x0e2\x19.inventory.v1.AgentStatusR\x06status\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xaa\x06\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xe0\x05\n" + "\x15AzureDatabaseExporter\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12 \n" + "\fpmm_agent_id\x18\x02 \x01(\tR\n" + @@ -11449,8 +11338,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x14push_metrics_enabled\x18\f \x01(\bR\x12pushMetricsEnabled\x12*\n" + "\x11process_exec_path\x18\r \x01(\tR\x0fprocessExecPath\x123\n" + "\tlog_level\x18\x0e \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12K\n" + - "\x13metrics_resolutions\x18\x0f \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12H\n" + - "\x12connection_timeout\x18\x10 \x01(\v2\x19.google.protobuf.DurationR\x11connectionTimeout\x1a?\n" + + "\x13metrics_resolutions\x18\x0f \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xaa\x02\n" + @@ -11611,7 +11499,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\rcustom_labels\x18\x02 \x03(\v21.inventory.v1.AddPMMAgentParams.CustomLabelsEntryR\fcustomLabels\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xe3\x03\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x8f\x03\n" + "\x15AddNodeExporterParams\x12)\n" + "\fpmm_agent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\n" + "pmmAgentId\x12Z\n" + @@ -11619,11 +11507,10 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\fpush_metrics\x18\x03 \x01(\bR\vpushMetrics\x12-\n" + "\x12disable_collectors\x18\x04 \x03(\tR\x11disableCollectors\x123\n" + "\tlog_level\x18\x05 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + - "\x0fexpose_exporter\x18\x06 \x01(\bR\x0eexposeExporter\x12R\n" + - "\x12connection_timeout\x18\a \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + + "\x0fexpose_exporter\x18\x06 \x01(\bR\x0eexposeExporter\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xb8\x04\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xe4\x03\n" + "\x18ChangeNodeExporterParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01\x12;\n" + "\rcustom_labels\x18\x02 \x01(\v2\x11.common.StringMapH\x01R\fcustomLabels\x88\x01\x01\x123\n" + @@ -11631,8 +11518,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x13metrics_resolutions\x18\x04 \x01(\v2\x1a.common.MetricsResolutionsR\x12metricsResolutions\x12-\n" + "\x12disable_collectors\x18\x05 \x03(\tR\x11disableCollectors\x128\n" + "\tlog_level\x18\x06 \x01(\x0e2\x16.inventory.v1.LogLevelH\x03R\blogLevel\x88\x01\x01\x12,\n" + - "\x0fexpose_exporter\x18\a \x01(\bH\x04R\x0eexposeExporter\x88\x01\x01\x12R\n" + - "\x12connection_timeout\x18\b \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeoutB\t\n" + + "\x0fexpose_exporter\x18\a \x01(\bH\x04R\x0eexposeExporter\x88\x01\x01B\t\n" + "\a_enableB\x10\n" + "\x0e_custom_labelsB\x16\n" + "\x14_enable_push_metricsB\f\n" + @@ -12238,7 +12124,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\n" + "\b_tls_keyB\f\n" + "\n" + - "_log_level\"\x99\x05\n" + + "_log_level\"\xc5\x04\n" + "\x14AddRDSExporterParams\x12)\n" + "\fpmm_agent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\n" + "pmmAgentId\x12 \n" + @@ -12251,11 +12137,10 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x18disable_enhanced_metrics\x18\b \x01(\bR\x16disableEnhancedMetrics\x12!\n" + "\fpush_metrics\x18\t \x01(\bR\vpushMetrics\x123\n" + "\tlog_level\x18\n" + - " \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12R\n" + - "\x12connection_timeout\x18\v \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + + " \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xf1\x05\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x9d\x05\n" + "\x17ChangeRDSExporterParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01\x12;\n" + "\rcustom_labels\x18\x02 \x01(\v2\x11.common.StringMapH\x01R\fcustomLabels\x88\x01\x01\x123\n" + @@ -12265,9 +12150,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x0eaws_secret_key\x18\x06 \x01(\tH\x04R\fawsSecretKey\x88\x01\x01\x127\n" + "\x15disable_basic_metrics\x18\a \x01(\bH\x05R\x13disableBasicMetrics\x88\x01\x01\x12=\n" + "\x18disable_enhanced_metrics\x18\b \x01(\bH\x06R\x16disableEnhancedMetrics\x88\x01\x01\x128\n" + - "\tlog_level\x18\t \x01(\x0e2\x16.inventory.v1.LogLevelH\aR\blogLevel\x88\x01\x01\x12R\n" + - "\x12connection_timeout\x18\n" + - " \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeoutB\t\n" + + "\tlog_level\x18\t \x01(\x0e2\x16.inventory.v1.LogLevelH\aR\blogLevel\x88\x01\x01B\t\n" + "\a_enableB\x10\n" + "\x0e_custom_labelsB\x16\n" + "\x14_enable_push_metricsB\x11\n" + @@ -12276,7 +12159,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x16_disable_basic_metricsB\x1b\n" + "\x19_disable_enhanced_metricsB\f\n" + "\n" + - "_log_level\"\xcb\x04\n" + + "_log_level\"\xf7\x03\n" + "\x19AddExternalExporterParams\x12.\n" + "\x0fruns_on_node_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\frunsOnNodeId\x12\x1d\n" + "\n" + @@ -12290,11 +12173,10 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\rcustom_labels\x18\n" + " \x03(\v29.inventory.v1.AddExternalExporterParams.CustomLabelsEntryR\fcustomLabels\x12!\n" + "\fpush_metrics\x18\v \x01(\bR\vpushMetrics\x12&\n" + - "\x0ftls_skip_verify\x18\f \x01(\bR\rtlsSkipVerify\x12R\n" + - "\x12connection_timeout\x18\r \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + + "\x0ftls_skip_verify\x18\f \x01(\bR\rtlsSkipVerify\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xc8\x04\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xf4\x03\n" + "\x1cChangeExternalExporterParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01\x12;\n" + "\rcustom_labels\x18\x02 \x01(\v2\x11.common.StringMapH\x01R\fcustomLabels\x88\x01\x01\x123\n" + @@ -12304,15 +12186,14 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x06scheme\x18\x06 \x01(\tH\x04R\x06scheme\x88\x01\x01\x12&\n" + "\fmetrics_path\x18\a \x01(\tH\x05R\vmetricsPath\x88\x01\x01\x12$\n" + "\vlisten_port\x18\b \x01(\rH\x06R\n" + - "listenPort\x88\x01\x01\x12R\n" + - "\x12connection_timeout\x18\t \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeoutB\t\n" + + "listenPort\x88\x01\x01B\t\n" + "\a_enableB\x10\n" + "\x0e_custom_labelsB\x16\n" + "\x14_enable_push_metricsB\v\n" + "\t_usernameB\t\n" + "\a_schemeB\x0f\n" + "\r_metrics_pathB\x0e\n" + - "\f_listen_port\"\xa3\x06\n" + + "\f_listen_port\"\xcf\x05\n" + "\x1eAddAzureDatabaseExporterParams\x12)\n" + "\fpmm_agent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\n" + "pmmAgentId\x12 \n" + @@ -12327,11 +12208,10 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x15skip_connection_check\x18\n" + " \x01(\bR\x13skipConnectionCheck\x12!\n" + "\fpush_metrics\x18\v \x01(\bR\vpushMetrics\x123\n" + - "\tlog_level\x18\f \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12R\n" + - "\x12connection_timeout\x18\r \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + + "\tlog_level\x18\f \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xc2\x06\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xee\x05\n" + "!ChangeAzureDatabaseExporterParams\x12\x1b\n" + "\x06enable\x18\x01 \x01(\bH\x00R\x06enable\x88\x01\x01\x12;\n" + "\rcustom_labels\x18\x02 \x01(\v2\x11.common.StringMapH\x01R\fcustomLabels\x88\x01\x01\x123\n" + @@ -12342,8 +12222,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x0fazure_tenant_id\x18\a \x01(\tH\x05R\razureTenantId\x88\x01\x01\x127\n" + "\x15azure_subscription_id\x18\b \x01(\tH\x06R\x13azureSubscriptionId\x88\x01\x01\x125\n" + "\x14azure_resource_group\x18\t \x01(\tH\aR\x12azureResourceGroup\x88\x01\x01\x128\n" + - "\tlog_level\x18\v \x01(\x0e2\x16.inventory.v1.LogLevelH\bR\blogLevel\x88\x01\x01\x12R\n" + - "\x12connection_timeout\x18\f \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeoutB\t\n" + + "\tlog_level\x18\v \x01(\x0e2\x16.inventory.v1.LogLevelH\bR\blogLevel\x88\x01\x01B\t\n" + "\a_enableB\x10\n" + "\x0e_custom_labelsB\x16\n" + "\x14_enable_push_metricsB\x12\n" + @@ -12642,298 +12521,286 @@ var file_inventory_v1_agents_proto_depIdxs = []int32{ 108, // 4: inventory.v1.NodeExporter.status:type_name -> inventory.v1.AgentStatus 109, // 5: inventory.v1.NodeExporter.log_level:type_name -> inventory.v1.LogLevel 110, // 6: inventory.v1.NodeExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 111, // 7: inventory.v1.NodeExporter.connection_timeout:type_name -> google.protobuf.Duration - 70, // 8: inventory.v1.MySQLdExporter.custom_labels:type_name -> inventory.v1.MySQLdExporter.CustomLabelsEntry - 108, // 9: inventory.v1.MySQLdExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 10: inventory.v1.MySQLdExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 11: inventory.v1.MySQLdExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 71, // 12: inventory.v1.MySQLdExporter.extra_dsn_params:type_name -> inventory.v1.MySQLdExporter.ExtraDsnParamsEntry - 111, // 13: inventory.v1.MySQLdExporter.connection_timeout:type_name -> google.protobuf.Duration - 72, // 14: inventory.v1.MongoDBExporter.custom_labels:type_name -> inventory.v1.MongoDBExporter.CustomLabelsEntry - 108, // 15: inventory.v1.MongoDBExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 16: inventory.v1.MongoDBExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 17: inventory.v1.MongoDBExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 111, // 18: inventory.v1.MongoDBExporter.connection_timeout:type_name -> google.protobuf.Duration - 73, // 19: inventory.v1.PostgresExporter.custom_labels:type_name -> inventory.v1.PostgresExporter.CustomLabelsEntry - 108, // 20: inventory.v1.PostgresExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 21: inventory.v1.PostgresExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 22: inventory.v1.PostgresExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 111, // 23: inventory.v1.PostgresExporter.connection_timeout:type_name -> google.protobuf.Duration - 74, // 24: inventory.v1.ProxySQLExporter.custom_labels:type_name -> inventory.v1.ProxySQLExporter.CustomLabelsEntry - 108, // 25: inventory.v1.ProxySQLExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 26: inventory.v1.ProxySQLExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 27: inventory.v1.ProxySQLExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 111, // 28: inventory.v1.ProxySQLExporter.connection_timeout:type_name -> google.protobuf.Duration - 75, // 29: inventory.v1.ValkeyExporter.custom_labels:type_name -> inventory.v1.ValkeyExporter.CustomLabelsEntry - 108, // 30: inventory.v1.ValkeyExporter.status:type_name -> inventory.v1.AgentStatus - 110, // 31: inventory.v1.ValkeyExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 111, // 32: inventory.v1.ValkeyExporter.connection_timeout:type_name -> google.protobuf.Duration - 76, // 33: inventory.v1.QANMySQLPerfSchemaAgent.custom_labels:type_name -> inventory.v1.QANMySQLPerfSchemaAgent.CustomLabelsEntry - 108, // 34: inventory.v1.QANMySQLPerfSchemaAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 35: inventory.v1.QANMySQLPerfSchemaAgent.log_level:type_name -> inventory.v1.LogLevel - 77, // 36: inventory.v1.QANMySQLPerfSchemaAgent.extra_dsn_params:type_name -> inventory.v1.QANMySQLPerfSchemaAgent.ExtraDsnParamsEntry - 78, // 37: inventory.v1.QANMySQLSlowlogAgent.custom_labels:type_name -> inventory.v1.QANMySQLSlowlogAgent.CustomLabelsEntry - 108, // 38: inventory.v1.QANMySQLSlowlogAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 39: inventory.v1.QANMySQLSlowlogAgent.log_level:type_name -> inventory.v1.LogLevel - 79, // 40: inventory.v1.QANMySQLSlowlogAgent.extra_dsn_params:type_name -> inventory.v1.QANMySQLSlowlogAgent.ExtraDsnParamsEntry - 80, // 41: inventory.v1.QANMongoDBProfilerAgent.custom_labels:type_name -> inventory.v1.QANMongoDBProfilerAgent.CustomLabelsEntry - 108, // 42: inventory.v1.QANMongoDBProfilerAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 43: inventory.v1.QANMongoDBProfilerAgent.log_level:type_name -> inventory.v1.LogLevel - 81, // 44: inventory.v1.QANMongoDBMongologAgent.custom_labels:type_name -> inventory.v1.QANMongoDBMongologAgent.CustomLabelsEntry - 108, // 45: inventory.v1.QANMongoDBMongologAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 46: inventory.v1.QANMongoDBMongologAgent.log_level:type_name -> inventory.v1.LogLevel - 111, // 47: inventory.v1.RTAOptions.collect_interval:type_name -> google.protobuf.Duration - 82, // 48: inventory.v1.RTAMongoDBAgent.custom_labels:type_name -> inventory.v1.RTAMongoDBAgent.CustomLabelsEntry - 14, // 49: inventory.v1.RTAMongoDBAgent.rta_options:type_name -> inventory.v1.RTAOptions - 108, // 50: inventory.v1.RTAMongoDBAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 51: inventory.v1.RTAMongoDBAgent.log_level:type_name -> inventory.v1.LogLevel - 83, // 52: inventory.v1.QANPostgreSQLPgStatementsAgent.custom_labels:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent.CustomLabelsEntry - 108, // 53: inventory.v1.QANPostgreSQLPgStatementsAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 54: inventory.v1.QANPostgreSQLPgStatementsAgent.log_level:type_name -> inventory.v1.LogLevel - 84, // 55: inventory.v1.QANPostgreSQLPgStatMonitorAgent.custom_labels:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent.CustomLabelsEntry - 108, // 56: inventory.v1.QANPostgreSQLPgStatMonitorAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 57: inventory.v1.QANPostgreSQLPgStatMonitorAgent.log_level:type_name -> inventory.v1.LogLevel - 85, // 58: inventory.v1.RDSExporter.custom_labels:type_name -> inventory.v1.RDSExporter.CustomLabelsEntry - 108, // 59: inventory.v1.RDSExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 60: inventory.v1.RDSExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 61: inventory.v1.RDSExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 111, // 62: inventory.v1.RDSExporter.connection_timeout:type_name -> google.protobuf.Duration - 86, // 63: inventory.v1.ExternalExporter.custom_labels:type_name -> inventory.v1.ExternalExporter.CustomLabelsEntry - 110, // 64: inventory.v1.ExternalExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 108, // 65: inventory.v1.ExternalExporter.status:type_name -> inventory.v1.AgentStatus - 111, // 66: inventory.v1.ExternalExporter.connection_timeout:type_name -> google.protobuf.Duration - 87, // 67: inventory.v1.AzureDatabaseExporter.custom_labels:type_name -> inventory.v1.AzureDatabaseExporter.CustomLabelsEntry - 108, // 68: inventory.v1.AzureDatabaseExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 69: inventory.v1.AzureDatabaseExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 70: inventory.v1.AzureDatabaseExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 111, // 71: inventory.v1.AzureDatabaseExporter.connection_timeout:type_name -> google.protobuf.Duration - 112, // 72: inventory.v1.ChangeCommonAgentParams.custom_labels:type_name -> common.StringMap - 110, // 73: inventory.v1.ChangeCommonAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 0, // 74: inventory.v1.ListAgentsRequest.agent_type:type_name -> inventory.v1.AgentType - 1, // 75: inventory.v1.ListAgentsResponse.pmm_agent:type_name -> inventory.v1.PMMAgent - 2, // 76: inventory.v1.ListAgentsResponse.vm_agent:type_name -> inventory.v1.VMAgent - 4, // 77: inventory.v1.ListAgentsResponse.node_exporter:type_name -> inventory.v1.NodeExporter - 5, // 78: inventory.v1.ListAgentsResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 6, // 79: inventory.v1.ListAgentsResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter - 7, // 80: inventory.v1.ListAgentsResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter - 8, // 81: inventory.v1.ListAgentsResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter - 10, // 82: inventory.v1.ListAgentsResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 11, // 83: inventory.v1.ListAgentsResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent - 12, // 84: inventory.v1.ListAgentsResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent - 13, // 85: inventory.v1.ListAgentsResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent - 16, // 86: inventory.v1.ListAgentsResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 17, // 87: inventory.v1.ListAgentsResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent - 19, // 88: inventory.v1.ListAgentsResponse.external_exporter:type_name -> inventory.v1.ExternalExporter - 18, // 89: inventory.v1.ListAgentsResponse.rds_exporter:type_name -> inventory.v1.RDSExporter - 20, // 90: inventory.v1.ListAgentsResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter - 3, // 91: inventory.v1.ListAgentsResponse.nomad_agent:type_name -> inventory.v1.NomadAgent - 9, // 92: inventory.v1.ListAgentsResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter - 15, // 93: inventory.v1.ListAgentsResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent - 1, // 94: inventory.v1.GetAgentResponse.pmm_agent:type_name -> inventory.v1.PMMAgent - 2, // 95: inventory.v1.GetAgentResponse.vmagent:type_name -> inventory.v1.VMAgent - 4, // 96: inventory.v1.GetAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter - 5, // 97: inventory.v1.GetAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 6, // 98: inventory.v1.GetAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter - 7, // 99: inventory.v1.GetAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter - 8, // 100: inventory.v1.GetAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter - 10, // 101: inventory.v1.GetAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 11, // 102: inventory.v1.GetAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent - 12, // 103: inventory.v1.GetAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent - 13, // 104: inventory.v1.GetAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent - 16, // 105: inventory.v1.GetAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 17, // 106: inventory.v1.GetAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent - 19, // 107: inventory.v1.GetAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter - 18, // 108: inventory.v1.GetAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter - 20, // 109: inventory.v1.GetAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter - 3, // 110: inventory.v1.GetAgentResponse.nomad_agent:type_name -> inventory.v1.NomadAgent - 9, // 111: inventory.v1.GetAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter - 15, // 112: inventory.v1.GetAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent - 32, // 113: inventory.v1.AddAgentRequest.pmm_agent:type_name -> inventory.v1.AddPMMAgentParams - 33, // 114: inventory.v1.AddAgentRequest.node_exporter:type_name -> inventory.v1.AddNodeExporterParams - 35, // 115: inventory.v1.AddAgentRequest.mysqld_exporter:type_name -> inventory.v1.AddMySQLdExporterParams - 37, // 116: inventory.v1.AddAgentRequest.mongodb_exporter:type_name -> inventory.v1.AddMongoDBExporterParams - 39, // 117: inventory.v1.AddAgentRequest.postgres_exporter:type_name -> inventory.v1.AddPostgresExporterParams - 41, // 118: inventory.v1.AddAgentRequest.proxysql_exporter:type_name -> inventory.v1.AddProxySQLExporterParams - 57, // 119: inventory.v1.AddAgentRequest.external_exporter:type_name -> inventory.v1.AddExternalExporterParams - 55, // 120: inventory.v1.AddAgentRequest.rds_exporter:type_name -> inventory.v1.AddRDSExporterParams - 59, // 121: inventory.v1.AddAgentRequest.azure_database_exporter:type_name -> inventory.v1.AddAzureDatabaseExporterParams - 43, // 122: inventory.v1.AddAgentRequest.qan_mysql_perfschema_agent:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams - 45, // 123: inventory.v1.AddAgentRequest.qan_mysql_slowlog_agent:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams - 47, // 124: inventory.v1.AddAgentRequest.qan_mongodb_profiler_agent:type_name -> inventory.v1.AddQANMongoDBProfilerAgentParams - 49, // 125: inventory.v1.AddAgentRequest.qan_mongodb_mongolog_agent:type_name -> inventory.v1.AddQANMongoDBMongologAgentParams - 51, // 126: inventory.v1.AddAgentRequest.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.AddQANPostgreSQLPgStatementsAgentParams - 53, // 127: inventory.v1.AddAgentRequest.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams - 62, // 128: inventory.v1.AddAgentRequest.valkey_exporter:type_name -> inventory.v1.AddValkeyExporterParams - 64, // 129: inventory.v1.AddAgentRequest.rta_mongodb_agent:type_name -> inventory.v1.AddRTAMongoDBAgentParams - 1, // 130: inventory.v1.AddAgentResponse.pmm_agent:type_name -> inventory.v1.PMMAgent - 4, // 131: inventory.v1.AddAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter - 5, // 132: inventory.v1.AddAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 6, // 133: inventory.v1.AddAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter - 7, // 134: inventory.v1.AddAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter - 8, // 135: inventory.v1.AddAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter - 19, // 136: inventory.v1.AddAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter - 18, // 137: inventory.v1.AddAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter - 20, // 138: inventory.v1.AddAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter - 10, // 139: inventory.v1.AddAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 11, // 140: inventory.v1.AddAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent - 12, // 141: inventory.v1.AddAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent - 13, // 142: inventory.v1.AddAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent - 16, // 143: inventory.v1.AddAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 17, // 144: inventory.v1.AddAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent - 9, // 145: inventory.v1.AddAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter - 15, // 146: inventory.v1.AddAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent - 34, // 147: inventory.v1.ChangeAgentRequest.node_exporter:type_name -> inventory.v1.ChangeNodeExporterParams - 36, // 148: inventory.v1.ChangeAgentRequest.mysqld_exporter:type_name -> inventory.v1.ChangeMySQLdExporterParams - 38, // 149: inventory.v1.ChangeAgentRequest.mongodb_exporter:type_name -> inventory.v1.ChangeMongoDBExporterParams - 40, // 150: inventory.v1.ChangeAgentRequest.postgres_exporter:type_name -> inventory.v1.ChangePostgresExporterParams - 42, // 151: inventory.v1.ChangeAgentRequest.proxysql_exporter:type_name -> inventory.v1.ChangeProxySQLExporterParams - 58, // 152: inventory.v1.ChangeAgentRequest.external_exporter:type_name -> inventory.v1.ChangeExternalExporterParams - 56, // 153: inventory.v1.ChangeAgentRequest.rds_exporter:type_name -> inventory.v1.ChangeRDSExporterParams - 60, // 154: inventory.v1.ChangeAgentRequest.azure_database_exporter:type_name -> inventory.v1.ChangeAzureDatabaseExporterParams - 44, // 155: inventory.v1.ChangeAgentRequest.qan_mysql_perfschema_agent:type_name -> inventory.v1.ChangeQANMySQLPerfSchemaAgentParams - 46, // 156: inventory.v1.ChangeAgentRequest.qan_mysql_slowlog_agent:type_name -> inventory.v1.ChangeQANMySQLSlowlogAgentParams - 48, // 157: inventory.v1.ChangeAgentRequest.qan_mongodb_profiler_agent:type_name -> inventory.v1.ChangeQANMongoDBProfilerAgentParams - 50, // 158: inventory.v1.ChangeAgentRequest.qan_mongodb_mongolog_agent:type_name -> inventory.v1.ChangeQANMongoDBMongologAgentParams - 52, // 159: inventory.v1.ChangeAgentRequest.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams - 54, // 160: inventory.v1.ChangeAgentRequest.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams - 61, // 161: inventory.v1.ChangeAgentRequest.nomad_agent:type_name -> inventory.v1.ChangeNomadAgentParams - 63, // 162: inventory.v1.ChangeAgentRequest.valkey_exporter:type_name -> inventory.v1.ChangeValkeyExporterParams - 65, // 163: inventory.v1.ChangeAgentRequest.rta_mongodb_agent:type_name -> inventory.v1.ChangeRTAMongoDBAgentParams - 4, // 164: inventory.v1.ChangeAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter - 5, // 165: inventory.v1.ChangeAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 6, // 166: inventory.v1.ChangeAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter - 7, // 167: inventory.v1.ChangeAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter - 8, // 168: inventory.v1.ChangeAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter - 19, // 169: inventory.v1.ChangeAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter - 18, // 170: inventory.v1.ChangeAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter - 20, // 171: inventory.v1.ChangeAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter - 10, // 172: inventory.v1.ChangeAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 11, // 173: inventory.v1.ChangeAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent - 12, // 174: inventory.v1.ChangeAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent - 13, // 175: inventory.v1.ChangeAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent - 16, // 176: inventory.v1.ChangeAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 17, // 177: inventory.v1.ChangeAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent - 3, // 178: inventory.v1.ChangeAgentResponse.nomad_agent:type_name -> inventory.v1.NomadAgent - 9, // 179: inventory.v1.ChangeAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter - 15, // 180: inventory.v1.ChangeAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent - 88, // 181: inventory.v1.AddPMMAgentParams.custom_labels:type_name -> inventory.v1.AddPMMAgentParams.CustomLabelsEntry - 89, // 182: inventory.v1.AddNodeExporterParams.custom_labels:type_name -> inventory.v1.AddNodeExporterParams.CustomLabelsEntry - 109, // 183: inventory.v1.AddNodeExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 184: inventory.v1.AddNodeExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 185: inventory.v1.ChangeNodeExporterParams.custom_labels:type_name -> common.StringMap - 110, // 186: inventory.v1.ChangeNodeExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 187: inventory.v1.ChangeNodeExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 188: inventory.v1.ChangeNodeExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 90, // 189: inventory.v1.AddMySQLdExporterParams.custom_labels:type_name -> inventory.v1.AddMySQLdExporterParams.CustomLabelsEntry - 109, // 190: inventory.v1.AddMySQLdExporterParams.log_level:type_name -> inventory.v1.LogLevel - 91, // 191: inventory.v1.AddMySQLdExporterParams.extra_dsn_params:type_name -> inventory.v1.AddMySQLdExporterParams.ExtraDsnParamsEntry - 111, // 192: inventory.v1.AddMySQLdExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 193: inventory.v1.ChangeMySQLdExporterParams.custom_labels:type_name -> common.StringMap - 110, // 194: inventory.v1.ChangeMySQLdExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 195: inventory.v1.ChangeMySQLdExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 196: inventory.v1.ChangeMySQLdExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 92, // 197: inventory.v1.AddMongoDBExporterParams.custom_labels:type_name -> inventory.v1.AddMongoDBExporterParams.CustomLabelsEntry - 109, // 198: inventory.v1.AddMongoDBExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 199: inventory.v1.AddMongoDBExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 200: inventory.v1.ChangeMongoDBExporterParams.custom_labels:type_name -> common.StringMap - 110, // 201: inventory.v1.ChangeMongoDBExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 202: inventory.v1.ChangeMongoDBExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 203: inventory.v1.ChangeMongoDBExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 93, // 204: inventory.v1.AddPostgresExporterParams.custom_labels:type_name -> inventory.v1.AddPostgresExporterParams.CustomLabelsEntry - 109, // 205: inventory.v1.AddPostgresExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 206: inventory.v1.AddPostgresExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 207: inventory.v1.ChangePostgresExporterParams.custom_labels:type_name -> common.StringMap - 110, // 208: inventory.v1.ChangePostgresExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 209: inventory.v1.ChangePostgresExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 210: inventory.v1.ChangePostgresExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 94, // 211: inventory.v1.AddProxySQLExporterParams.custom_labels:type_name -> inventory.v1.AddProxySQLExporterParams.CustomLabelsEntry - 109, // 212: inventory.v1.AddProxySQLExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 213: inventory.v1.AddProxySQLExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 214: inventory.v1.ChangeProxySQLExporterParams.custom_labels:type_name -> common.StringMap - 110, // 215: inventory.v1.ChangeProxySQLExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 216: inventory.v1.ChangeProxySQLExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 217: inventory.v1.ChangeProxySQLExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 95, // 218: inventory.v1.AddQANMySQLPerfSchemaAgentParams.custom_labels:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams.CustomLabelsEntry - 109, // 219: inventory.v1.AddQANMySQLPerfSchemaAgentParams.log_level:type_name -> inventory.v1.LogLevel - 96, // 220: inventory.v1.AddQANMySQLPerfSchemaAgentParams.extra_dsn_params:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams.ExtraDsnParamsEntry - 112, // 221: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.custom_labels:type_name -> common.StringMap - 110, // 222: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 223: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.log_level:type_name -> inventory.v1.LogLevel - 97, // 224: inventory.v1.AddQANMySQLSlowlogAgentParams.custom_labels:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams.CustomLabelsEntry - 109, // 225: inventory.v1.AddQANMySQLSlowlogAgentParams.log_level:type_name -> inventory.v1.LogLevel - 98, // 226: inventory.v1.AddQANMySQLSlowlogAgentParams.extra_dsn_params:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams.ExtraDsnParamsEntry - 112, // 227: inventory.v1.ChangeQANMySQLSlowlogAgentParams.custom_labels:type_name -> common.StringMap - 110, // 228: inventory.v1.ChangeQANMySQLSlowlogAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 229: inventory.v1.ChangeQANMySQLSlowlogAgentParams.log_level:type_name -> inventory.v1.LogLevel - 99, // 230: inventory.v1.AddQANMongoDBProfilerAgentParams.custom_labels:type_name -> inventory.v1.AddQANMongoDBProfilerAgentParams.CustomLabelsEntry - 109, // 231: inventory.v1.AddQANMongoDBProfilerAgentParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 232: inventory.v1.ChangeQANMongoDBProfilerAgentParams.custom_labels:type_name -> common.StringMap - 110, // 233: inventory.v1.ChangeQANMongoDBProfilerAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 234: inventory.v1.ChangeQANMongoDBProfilerAgentParams.log_level:type_name -> inventory.v1.LogLevel - 100, // 235: inventory.v1.AddQANMongoDBMongologAgentParams.custom_labels:type_name -> inventory.v1.AddQANMongoDBMongologAgentParams.CustomLabelsEntry - 109, // 236: inventory.v1.AddQANMongoDBMongologAgentParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 237: inventory.v1.ChangeQANMongoDBMongologAgentParams.custom_labels:type_name -> common.StringMap - 110, // 238: inventory.v1.ChangeQANMongoDBMongologAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 239: inventory.v1.ChangeQANMongoDBMongologAgentParams.log_level:type_name -> inventory.v1.LogLevel - 101, // 240: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.custom_labels:type_name -> inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.CustomLabelsEntry - 109, // 241: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 242: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.custom_labels:type_name -> common.StringMap - 110, // 243: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 244: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.log_level:type_name -> inventory.v1.LogLevel - 102, // 245: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.custom_labels:type_name -> inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.CustomLabelsEntry - 109, // 246: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 247: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.custom_labels:type_name -> common.StringMap - 110, // 248: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 249: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.log_level:type_name -> inventory.v1.LogLevel - 103, // 250: inventory.v1.AddRDSExporterParams.custom_labels:type_name -> inventory.v1.AddRDSExporterParams.CustomLabelsEntry - 109, // 251: inventory.v1.AddRDSExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 252: inventory.v1.AddRDSExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 253: inventory.v1.ChangeRDSExporterParams.custom_labels:type_name -> common.StringMap - 110, // 254: inventory.v1.ChangeRDSExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 255: inventory.v1.ChangeRDSExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 256: inventory.v1.ChangeRDSExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 104, // 257: inventory.v1.AddExternalExporterParams.custom_labels:type_name -> inventory.v1.AddExternalExporterParams.CustomLabelsEntry - 111, // 258: inventory.v1.AddExternalExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 259: inventory.v1.ChangeExternalExporterParams.custom_labels:type_name -> common.StringMap - 110, // 260: inventory.v1.ChangeExternalExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 111, // 261: inventory.v1.ChangeExternalExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 105, // 262: inventory.v1.AddAzureDatabaseExporterParams.custom_labels:type_name -> inventory.v1.AddAzureDatabaseExporterParams.CustomLabelsEntry - 109, // 263: inventory.v1.AddAzureDatabaseExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 264: inventory.v1.AddAzureDatabaseExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 265: inventory.v1.ChangeAzureDatabaseExporterParams.custom_labels:type_name -> common.StringMap - 110, // 266: inventory.v1.ChangeAzureDatabaseExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 267: inventory.v1.ChangeAzureDatabaseExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 268: inventory.v1.ChangeAzureDatabaseExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 106, // 269: inventory.v1.AddValkeyExporterParams.custom_labels:type_name -> inventory.v1.AddValkeyExporterParams.CustomLabelsEntry - 109, // 270: inventory.v1.AddValkeyExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 271: inventory.v1.AddValkeyExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 272: inventory.v1.ChangeValkeyExporterParams.custom_labels:type_name -> common.StringMap - 110, // 273: inventory.v1.ChangeValkeyExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 274: inventory.v1.ChangeValkeyExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 275: inventory.v1.ChangeValkeyExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 107, // 276: inventory.v1.AddRTAMongoDBAgentParams.custom_labels:type_name -> inventory.v1.AddRTAMongoDBAgentParams.CustomLabelsEntry - 109, // 277: inventory.v1.AddRTAMongoDBAgentParams.log_level:type_name -> inventory.v1.LogLevel - 14, // 278: inventory.v1.AddRTAMongoDBAgentParams.rta_options:type_name -> inventory.v1.RTAOptions - 112, // 279: inventory.v1.ChangeRTAMongoDBAgentParams.custom_labels:type_name -> common.StringMap - 109, // 280: inventory.v1.ChangeRTAMongoDBAgentParams.log_level:type_name -> inventory.v1.LogLevel - 14, // 281: inventory.v1.ChangeRTAMongoDBAgentParams.rta_options:type_name -> inventory.v1.RTAOptions - 22, // 282: inventory.v1.AgentsService.ListAgents:input_type -> inventory.v1.ListAgentsRequest - 24, // 283: inventory.v1.AgentsService.GetAgent:input_type -> inventory.v1.GetAgentRequest - 26, // 284: inventory.v1.AgentsService.GetAgentLogs:input_type -> inventory.v1.GetAgentLogsRequest - 28, // 285: inventory.v1.AgentsService.AddAgent:input_type -> inventory.v1.AddAgentRequest - 30, // 286: inventory.v1.AgentsService.ChangeAgent:input_type -> inventory.v1.ChangeAgentRequest - 66, // 287: inventory.v1.AgentsService.RemoveAgent:input_type -> inventory.v1.RemoveAgentRequest - 23, // 288: inventory.v1.AgentsService.ListAgents:output_type -> inventory.v1.ListAgentsResponse - 25, // 289: inventory.v1.AgentsService.GetAgent:output_type -> inventory.v1.GetAgentResponse - 27, // 290: inventory.v1.AgentsService.GetAgentLogs:output_type -> inventory.v1.GetAgentLogsResponse - 29, // 291: inventory.v1.AgentsService.AddAgent:output_type -> inventory.v1.AddAgentResponse - 31, // 292: inventory.v1.AgentsService.ChangeAgent:output_type -> inventory.v1.ChangeAgentResponse - 67, // 293: inventory.v1.AgentsService.RemoveAgent:output_type -> inventory.v1.RemoveAgentResponse - 288, // [288:294] is the sub-list for method output_type - 282, // [282:288] is the sub-list for method input_type - 282, // [282:282] is the sub-list for extension type_name - 282, // [282:282] is the sub-list for extension extendee - 0, // [0:282] is the sub-list for field type_name + 70, // 7: inventory.v1.MySQLdExporter.custom_labels:type_name -> inventory.v1.MySQLdExporter.CustomLabelsEntry + 108, // 8: inventory.v1.MySQLdExporter.status:type_name -> inventory.v1.AgentStatus + 109, // 9: inventory.v1.MySQLdExporter.log_level:type_name -> inventory.v1.LogLevel + 110, // 10: inventory.v1.MySQLdExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 71, // 11: inventory.v1.MySQLdExporter.extra_dsn_params:type_name -> inventory.v1.MySQLdExporter.ExtraDsnParamsEntry + 111, // 12: inventory.v1.MySQLdExporter.connection_timeout:type_name -> google.protobuf.Duration + 72, // 13: inventory.v1.MongoDBExporter.custom_labels:type_name -> inventory.v1.MongoDBExporter.CustomLabelsEntry + 108, // 14: inventory.v1.MongoDBExporter.status:type_name -> inventory.v1.AgentStatus + 109, // 15: inventory.v1.MongoDBExporter.log_level:type_name -> inventory.v1.LogLevel + 110, // 16: inventory.v1.MongoDBExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 111, // 17: inventory.v1.MongoDBExporter.connection_timeout:type_name -> google.protobuf.Duration + 73, // 18: inventory.v1.PostgresExporter.custom_labels:type_name -> inventory.v1.PostgresExporter.CustomLabelsEntry + 108, // 19: inventory.v1.PostgresExporter.status:type_name -> inventory.v1.AgentStatus + 109, // 20: inventory.v1.PostgresExporter.log_level:type_name -> inventory.v1.LogLevel + 110, // 21: inventory.v1.PostgresExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 111, // 22: inventory.v1.PostgresExporter.connection_timeout:type_name -> google.protobuf.Duration + 74, // 23: inventory.v1.ProxySQLExporter.custom_labels:type_name -> inventory.v1.ProxySQLExporter.CustomLabelsEntry + 108, // 24: inventory.v1.ProxySQLExporter.status:type_name -> inventory.v1.AgentStatus + 109, // 25: inventory.v1.ProxySQLExporter.log_level:type_name -> inventory.v1.LogLevel + 110, // 26: inventory.v1.ProxySQLExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 111, // 27: inventory.v1.ProxySQLExporter.connection_timeout:type_name -> google.protobuf.Duration + 75, // 28: inventory.v1.ValkeyExporter.custom_labels:type_name -> inventory.v1.ValkeyExporter.CustomLabelsEntry + 108, // 29: inventory.v1.ValkeyExporter.status:type_name -> inventory.v1.AgentStatus + 110, // 30: inventory.v1.ValkeyExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 111, // 31: inventory.v1.ValkeyExporter.connection_timeout:type_name -> google.protobuf.Duration + 76, // 32: inventory.v1.QANMySQLPerfSchemaAgent.custom_labels:type_name -> inventory.v1.QANMySQLPerfSchemaAgent.CustomLabelsEntry + 108, // 33: inventory.v1.QANMySQLPerfSchemaAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 34: inventory.v1.QANMySQLPerfSchemaAgent.log_level:type_name -> inventory.v1.LogLevel + 77, // 35: inventory.v1.QANMySQLPerfSchemaAgent.extra_dsn_params:type_name -> inventory.v1.QANMySQLPerfSchemaAgent.ExtraDsnParamsEntry + 78, // 36: inventory.v1.QANMySQLSlowlogAgent.custom_labels:type_name -> inventory.v1.QANMySQLSlowlogAgent.CustomLabelsEntry + 108, // 37: inventory.v1.QANMySQLSlowlogAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 38: inventory.v1.QANMySQLSlowlogAgent.log_level:type_name -> inventory.v1.LogLevel + 79, // 39: inventory.v1.QANMySQLSlowlogAgent.extra_dsn_params:type_name -> inventory.v1.QANMySQLSlowlogAgent.ExtraDsnParamsEntry + 80, // 40: inventory.v1.QANMongoDBProfilerAgent.custom_labels:type_name -> inventory.v1.QANMongoDBProfilerAgent.CustomLabelsEntry + 108, // 41: inventory.v1.QANMongoDBProfilerAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 42: inventory.v1.QANMongoDBProfilerAgent.log_level:type_name -> inventory.v1.LogLevel + 81, // 43: inventory.v1.QANMongoDBMongologAgent.custom_labels:type_name -> inventory.v1.QANMongoDBMongologAgent.CustomLabelsEntry + 108, // 44: inventory.v1.QANMongoDBMongologAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 45: inventory.v1.QANMongoDBMongologAgent.log_level:type_name -> inventory.v1.LogLevel + 111, // 46: inventory.v1.RTAOptions.collect_interval:type_name -> google.protobuf.Duration + 82, // 47: inventory.v1.RTAMongoDBAgent.custom_labels:type_name -> inventory.v1.RTAMongoDBAgent.CustomLabelsEntry + 14, // 48: inventory.v1.RTAMongoDBAgent.rta_options:type_name -> inventory.v1.RTAOptions + 108, // 49: inventory.v1.RTAMongoDBAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 50: inventory.v1.RTAMongoDBAgent.log_level:type_name -> inventory.v1.LogLevel + 83, // 51: inventory.v1.QANPostgreSQLPgStatementsAgent.custom_labels:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent.CustomLabelsEntry + 108, // 52: inventory.v1.QANPostgreSQLPgStatementsAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 53: inventory.v1.QANPostgreSQLPgStatementsAgent.log_level:type_name -> inventory.v1.LogLevel + 84, // 54: inventory.v1.QANPostgreSQLPgStatMonitorAgent.custom_labels:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent.CustomLabelsEntry + 108, // 55: inventory.v1.QANPostgreSQLPgStatMonitorAgent.status:type_name -> inventory.v1.AgentStatus + 109, // 56: inventory.v1.QANPostgreSQLPgStatMonitorAgent.log_level:type_name -> inventory.v1.LogLevel + 85, // 57: inventory.v1.RDSExporter.custom_labels:type_name -> inventory.v1.RDSExporter.CustomLabelsEntry + 108, // 58: inventory.v1.RDSExporter.status:type_name -> inventory.v1.AgentStatus + 109, // 59: inventory.v1.RDSExporter.log_level:type_name -> inventory.v1.LogLevel + 110, // 60: inventory.v1.RDSExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 86, // 61: inventory.v1.ExternalExporter.custom_labels:type_name -> inventory.v1.ExternalExporter.CustomLabelsEntry + 110, // 62: inventory.v1.ExternalExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 108, // 63: inventory.v1.ExternalExporter.status:type_name -> inventory.v1.AgentStatus + 87, // 64: inventory.v1.AzureDatabaseExporter.custom_labels:type_name -> inventory.v1.AzureDatabaseExporter.CustomLabelsEntry + 108, // 65: inventory.v1.AzureDatabaseExporter.status:type_name -> inventory.v1.AgentStatus + 109, // 66: inventory.v1.AzureDatabaseExporter.log_level:type_name -> inventory.v1.LogLevel + 110, // 67: inventory.v1.AzureDatabaseExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 68: inventory.v1.ChangeCommonAgentParams.custom_labels:type_name -> common.StringMap + 110, // 69: inventory.v1.ChangeCommonAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 0, // 70: inventory.v1.ListAgentsRequest.agent_type:type_name -> inventory.v1.AgentType + 1, // 71: inventory.v1.ListAgentsResponse.pmm_agent:type_name -> inventory.v1.PMMAgent + 2, // 72: inventory.v1.ListAgentsResponse.vm_agent:type_name -> inventory.v1.VMAgent + 4, // 73: inventory.v1.ListAgentsResponse.node_exporter:type_name -> inventory.v1.NodeExporter + 5, // 74: inventory.v1.ListAgentsResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 6, // 75: inventory.v1.ListAgentsResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter + 7, // 76: inventory.v1.ListAgentsResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter + 8, // 77: inventory.v1.ListAgentsResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter + 10, // 78: inventory.v1.ListAgentsResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 11, // 79: inventory.v1.ListAgentsResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent + 12, // 80: inventory.v1.ListAgentsResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent + 13, // 81: inventory.v1.ListAgentsResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent + 16, // 82: inventory.v1.ListAgentsResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 17, // 83: inventory.v1.ListAgentsResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent + 19, // 84: inventory.v1.ListAgentsResponse.external_exporter:type_name -> inventory.v1.ExternalExporter + 18, // 85: inventory.v1.ListAgentsResponse.rds_exporter:type_name -> inventory.v1.RDSExporter + 20, // 86: inventory.v1.ListAgentsResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter + 3, // 87: inventory.v1.ListAgentsResponse.nomad_agent:type_name -> inventory.v1.NomadAgent + 9, // 88: inventory.v1.ListAgentsResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter + 15, // 89: inventory.v1.ListAgentsResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent + 1, // 90: inventory.v1.GetAgentResponse.pmm_agent:type_name -> inventory.v1.PMMAgent + 2, // 91: inventory.v1.GetAgentResponse.vmagent:type_name -> inventory.v1.VMAgent + 4, // 92: inventory.v1.GetAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter + 5, // 93: inventory.v1.GetAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 6, // 94: inventory.v1.GetAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter + 7, // 95: inventory.v1.GetAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter + 8, // 96: inventory.v1.GetAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter + 10, // 97: inventory.v1.GetAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 11, // 98: inventory.v1.GetAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent + 12, // 99: inventory.v1.GetAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent + 13, // 100: inventory.v1.GetAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent + 16, // 101: inventory.v1.GetAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 17, // 102: inventory.v1.GetAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent + 19, // 103: inventory.v1.GetAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter + 18, // 104: inventory.v1.GetAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter + 20, // 105: inventory.v1.GetAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter + 3, // 106: inventory.v1.GetAgentResponse.nomad_agent:type_name -> inventory.v1.NomadAgent + 9, // 107: inventory.v1.GetAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter + 15, // 108: inventory.v1.GetAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent + 32, // 109: inventory.v1.AddAgentRequest.pmm_agent:type_name -> inventory.v1.AddPMMAgentParams + 33, // 110: inventory.v1.AddAgentRequest.node_exporter:type_name -> inventory.v1.AddNodeExporterParams + 35, // 111: inventory.v1.AddAgentRequest.mysqld_exporter:type_name -> inventory.v1.AddMySQLdExporterParams + 37, // 112: inventory.v1.AddAgentRequest.mongodb_exporter:type_name -> inventory.v1.AddMongoDBExporterParams + 39, // 113: inventory.v1.AddAgentRequest.postgres_exporter:type_name -> inventory.v1.AddPostgresExporterParams + 41, // 114: inventory.v1.AddAgentRequest.proxysql_exporter:type_name -> inventory.v1.AddProxySQLExporterParams + 57, // 115: inventory.v1.AddAgentRequest.external_exporter:type_name -> inventory.v1.AddExternalExporterParams + 55, // 116: inventory.v1.AddAgentRequest.rds_exporter:type_name -> inventory.v1.AddRDSExporterParams + 59, // 117: inventory.v1.AddAgentRequest.azure_database_exporter:type_name -> inventory.v1.AddAzureDatabaseExporterParams + 43, // 118: inventory.v1.AddAgentRequest.qan_mysql_perfschema_agent:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams + 45, // 119: inventory.v1.AddAgentRequest.qan_mysql_slowlog_agent:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams + 47, // 120: inventory.v1.AddAgentRequest.qan_mongodb_profiler_agent:type_name -> inventory.v1.AddQANMongoDBProfilerAgentParams + 49, // 121: inventory.v1.AddAgentRequest.qan_mongodb_mongolog_agent:type_name -> inventory.v1.AddQANMongoDBMongologAgentParams + 51, // 122: inventory.v1.AddAgentRequest.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.AddQANPostgreSQLPgStatementsAgentParams + 53, // 123: inventory.v1.AddAgentRequest.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams + 62, // 124: inventory.v1.AddAgentRequest.valkey_exporter:type_name -> inventory.v1.AddValkeyExporterParams + 64, // 125: inventory.v1.AddAgentRequest.rta_mongodb_agent:type_name -> inventory.v1.AddRTAMongoDBAgentParams + 1, // 126: inventory.v1.AddAgentResponse.pmm_agent:type_name -> inventory.v1.PMMAgent + 4, // 127: inventory.v1.AddAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter + 5, // 128: inventory.v1.AddAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 6, // 129: inventory.v1.AddAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter + 7, // 130: inventory.v1.AddAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter + 8, // 131: inventory.v1.AddAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter + 19, // 132: inventory.v1.AddAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter + 18, // 133: inventory.v1.AddAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter + 20, // 134: inventory.v1.AddAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter + 10, // 135: inventory.v1.AddAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 11, // 136: inventory.v1.AddAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent + 12, // 137: inventory.v1.AddAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent + 13, // 138: inventory.v1.AddAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent + 16, // 139: inventory.v1.AddAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 17, // 140: inventory.v1.AddAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent + 9, // 141: inventory.v1.AddAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter + 15, // 142: inventory.v1.AddAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent + 34, // 143: inventory.v1.ChangeAgentRequest.node_exporter:type_name -> inventory.v1.ChangeNodeExporterParams + 36, // 144: inventory.v1.ChangeAgentRequest.mysqld_exporter:type_name -> inventory.v1.ChangeMySQLdExporterParams + 38, // 145: inventory.v1.ChangeAgentRequest.mongodb_exporter:type_name -> inventory.v1.ChangeMongoDBExporterParams + 40, // 146: inventory.v1.ChangeAgentRequest.postgres_exporter:type_name -> inventory.v1.ChangePostgresExporterParams + 42, // 147: inventory.v1.ChangeAgentRequest.proxysql_exporter:type_name -> inventory.v1.ChangeProxySQLExporterParams + 58, // 148: inventory.v1.ChangeAgentRequest.external_exporter:type_name -> inventory.v1.ChangeExternalExporterParams + 56, // 149: inventory.v1.ChangeAgentRequest.rds_exporter:type_name -> inventory.v1.ChangeRDSExporterParams + 60, // 150: inventory.v1.ChangeAgentRequest.azure_database_exporter:type_name -> inventory.v1.ChangeAzureDatabaseExporterParams + 44, // 151: inventory.v1.ChangeAgentRequest.qan_mysql_perfschema_agent:type_name -> inventory.v1.ChangeQANMySQLPerfSchemaAgentParams + 46, // 152: inventory.v1.ChangeAgentRequest.qan_mysql_slowlog_agent:type_name -> inventory.v1.ChangeQANMySQLSlowlogAgentParams + 48, // 153: inventory.v1.ChangeAgentRequest.qan_mongodb_profiler_agent:type_name -> inventory.v1.ChangeQANMongoDBProfilerAgentParams + 50, // 154: inventory.v1.ChangeAgentRequest.qan_mongodb_mongolog_agent:type_name -> inventory.v1.ChangeQANMongoDBMongologAgentParams + 52, // 155: inventory.v1.ChangeAgentRequest.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams + 54, // 156: inventory.v1.ChangeAgentRequest.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams + 61, // 157: inventory.v1.ChangeAgentRequest.nomad_agent:type_name -> inventory.v1.ChangeNomadAgentParams + 63, // 158: inventory.v1.ChangeAgentRequest.valkey_exporter:type_name -> inventory.v1.ChangeValkeyExporterParams + 65, // 159: inventory.v1.ChangeAgentRequest.rta_mongodb_agent:type_name -> inventory.v1.ChangeRTAMongoDBAgentParams + 4, // 160: inventory.v1.ChangeAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter + 5, // 161: inventory.v1.ChangeAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 6, // 162: inventory.v1.ChangeAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter + 7, // 163: inventory.v1.ChangeAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter + 8, // 164: inventory.v1.ChangeAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter + 19, // 165: inventory.v1.ChangeAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter + 18, // 166: inventory.v1.ChangeAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter + 20, // 167: inventory.v1.ChangeAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter + 10, // 168: inventory.v1.ChangeAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 11, // 169: inventory.v1.ChangeAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent + 12, // 170: inventory.v1.ChangeAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent + 13, // 171: inventory.v1.ChangeAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent + 16, // 172: inventory.v1.ChangeAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 17, // 173: inventory.v1.ChangeAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent + 3, // 174: inventory.v1.ChangeAgentResponse.nomad_agent:type_name -> inventory.v1.NomadAgent + 9, // 175: inventory.v1.ChangeAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter + 15, // 176: inventory.v1.ChangeAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent + 88, // 177: inventory.v1.AddPMMAgentParams.custom_labels:type_name -> inventory.v1.AddPMMAgentParams.CustomLabelsEntry + 89, // 178: inventory.v1.AddNodeExporterParams.custom_labels:type_name -> inventory.v1.AddNodeExporterParams.CustomLabelsEntry + 109, // 179: inventory.v1.AddNodeExporterParams.log_level:type_name -> inventory.v1.LogLevel + 112, // 180: inventory.v1.ChangeNodeExporterParams.custom_labels:type_name -> common.StringMap + 110, // 181: inventory.v1.ChangeNodeExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 182: inventory.v1.ChangeNodeExporterParams.log_level:type_name -> inventory.v1.LogLevel + 90, // 183: inventory.v1.AddMySQLdExporterParams.custom_labels:type_name -> inventory.v1.AddMySQLdExporterParams.CustomLabelsEntry + 109, // 184: inventory.v1.AddMySQLdExporterParams.log_level:type_name -> inventory.v1.LogLevel + 91, // 185: inventory.v1.AddMySQLdExporterParams.extra_dsn_params:type_name -> inventory.v1.AddMySQLdExporterParams.ExtraDsnParamsEntry + 111, // 186: inventory.v1.AddMySQLdExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 187: inventory.v1.ChangeMySQLdExporterParams.custom_labels:type_name -> common.StringMap + 110, // 188: inventory.v1.ChangeMySQLdExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 189: inventory.v1.ChangeMySQLdExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 190: inventory.v1.ChangeMySQLdExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 92, // 191: inventory.v1.AddMongoDBExporterParams.custom_labels:type_name -> inventory.v1.AddMongoDBExporterParams.CustomLabelsEntry + 109, // 192: inventory.v1.AddMongoDBExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 193: inventory.v1.AddMongoDBExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 194: inventory.v1.ChangeMongoDBExporterParams.custom_labels:type_name -> common.StringMap + 110, // 195: inventory.v1.ChangeMongoDBExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 196: inventory.v1.ChangeMongoDBExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 197: inventory.v1.ChangeMongoDBExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 93, // 198: inventory.v1.AddPostgresExporterParams.custom_labels:type_name -> inventory.v1.AddPostgresExporterParams.CustomLabelsEntry + 109, // 199: inventory.v1.AddPostgresExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 200: inventory.v1.AddPostgresExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 201: inventory.v1.ChangePostgresExporterParams.custom_labels:type_name -> common.StringMap + 110, // 202: inventory.v1.ChangePostgresExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 203: inventory.v1.ChangePostgresExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 204: inventory.v1.ChangePostgresExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 94, // 205: inventory.v1.AddProxySQLExporterParams.custom_labels:type_name -> inventory.v1.AddProxySQLExporterParams.CustomLabelsEntry + 109, // 206: inventory.v1.AddProxySQLExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 207: inventory.v1.AddProxySQLExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 208: inventory.v1.ChangeProxySQLExporterParams.custom_labels:type_name -> common.StringMap + 110, // 209: inventory.v1.ChangeProxySQLExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 210: inventory.v1.ChangeProxySQLExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 211: inventory.v1.ChangeProxySQLExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 95, // 212: inventory.v1.AddQANMySQLPerfSchemaAgentParams.custom_labels:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams.CustomLabelsEntry + 109, // 213: inventory.v1.AddQANMySQLPerfSchemaAgentParams.log_level:type_name -> inventory.v1.LogLevel + 96, // 214: inventory.v1.AddQANMySQLPerfSchemaAgentParams.extra_dsn_params:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams.ExtraDsnParamsEntry + 112, // 215: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.custom_labels:type_name -> common.StringMap + 110, // 216: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 217: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.log_level:type_name -> inventory.v1.LogLevel + 97, // 218: inventory.v1.AddQANMySQLSlowlogAgentParams.custom_labels:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams.CustomLabelsEntry + 109, // 219: inventory.v1.AddQANMySQLSlowlogAgentParams.log_level:type_name -> inventory.v1.LogLevel + 98, // 220: inventory.v1.AddQANMySQLSlowlogAgentParams.extra_dsn_params:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams.ExtraDsnParamsEntry + 112, // 221: inventory.v1.ChangeQANMySQLSlowlogAgentParams.custom_labels:type_name -> common.StringMap + 110, // 222: inventory.v1.ChangeQANMySQLSlowlogAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 223: inventory.v1.ChangeQANMySQLSlowlogAgentParams.log_level:type_name -> inventory.v1.LogLevel + 99, // 224: inventory.v1.AddQANMongoDBProfilerAgentParams.custom_labels:type_name -> inventory.v1.AddQANMongoDBProfilerAgentParams.CustomLabelsEntry + 109, // 225: inventory.v1.AddQANMongoDBProfilerAgentParams.log_level:type_name -> inventory.v1.LogLevel + 112, // 226: inventory.v1.ChangeQANMongoDBProfilerAgentParams.custom_labels:type_name -> common.StringMap + 110, // 227: inventory.v1.ChangeQANMongoDBProfilerAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 228: inventory.v1.ChangeQANMongoDBProfilerAgentParams.log_level:type_name -> inventory.v1.LogLevel + 100, // 229: inventory.v1.AddQANMongoDBMongologAgentParams.custom_labels:type_name -> inventory.v1.AddQANMongoDBMongologAgentParams.CustomLabelsEntry + 109, // 230: inventory.v1.AddQANMongoDBMongologAgentParams.log_level:type_name -> inventory.v1.LogLevel + 112, // 231: inventory.v1.ChangeQANMongoDBMongologAgentParams.custom_labels:type_name -> common.StringMap + 110, // 232: inventory.v1.ChangeQANMongoDBMongologAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 233: inventory.v1.ChangeQANMongoDBMongologAgentParams.log_level:type_name -> inventory.v1.LogLevel + 101, // 234: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.custom_labels:type_name -> inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.CustomLabelsEntry + 109, // 235: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.log_level:type_name -> inventory.v1.LogLevel + 112, // 236: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.custom_labels:type_name -> common.StringMap + 110, // 237: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 238: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.log_level:type_name -> inventory.v1.LogLevel + 102, // 239: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.custom_labels:type_name -> inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.CustomLabelsEntry + 109, // 240: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.log_level:type_name -> inventory.v1.LogLevel + 112, // 241: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.custom_labels:type_name -> common.StringMap + 110, // 242: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 243: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.log_level:type_name -> inventory.v1.LogLevel + 103, // 244: inventory.v1.AddRDSExporterParams.custom_labels:type_name -> inventory.v1.AddRDSExporterParams.CustomLabelsEntry + 109, // 245: inventory.v1.AddRDSExporterParams.log_level:type_name -> inventory.v1.LogLevel + 112, // 246: inventory.v1.ChangeRDSExporterParams.custom_labels:type_name -> common.StringMap + 110, // 247: inventory.v1.ChangeRDSExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 248: inventory.v1.ChangeRDSExporterParams.log_level:type_name -> inventory.v1.LogLevel + 104, // 249: inventory.v1.AddExternalExporterParams.custom_labels:type_name -> inventory.v1.AddExternalExporterParams.CustomLabelsEntry + 112, // 250: inventory.v1.ChangeExternalExporterParams.custom_labels:type_name -> common.StringMap + 110, // 251: inventory.v1.ChangeExternalExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 105, // 252: inventory.v1.AddAzureDatabaseExporterParams.custom_labels:type_name -> inventory.v1.AddAzureDatabaseExporterParams.CustomLabelsEntry + 109, // 253: inventory.v1.AddAzureDatabaseExporterParams.log_level:type_name -> inventory.v1.LogLevel + 112, // 254: inventory.v1.ChangeAzureDatabaseExporterParams.custom_labels:type_name -> common.StringMap + 110, // 255: inventory.v1.ChangeAzureDatabaseExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 256: inventory.v1.ChangeAzureDatabaseExporterParams.log_level:type_name -> inventory.v1.LogLevel + 106, // 257: inventory.v1.AddValkeyExporterParams.custom_labels:type_name -> inventory.v1.AddValkeyExporterParams.CustomLabelsEntry + 109, // 258: inventory.v1.AddValkeyExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 259: inventory.v1.AddValkeyExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 112, // 260: inventory.v1.ChangeValkeyExporterParams.custom_labels:type_name -> common.StringMap + 110, // 261: inventory.v1.ChangeValkeyExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 109, // 262: inventory.v1.ChangeValkeyExporterParams.log_level:type_name -> inventory.v1.LogLevel + 111, // 263: inventory.v1.ChangeValkeyExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 107, // 264: inventory.v1.AddRTAMongoDBAgentParams.custom_labels:type_name -> inventory.v1.AddRTAMongoDBAgentParams.CustomLabelsEntry + 109, // 265: inventory.v1.AddRTAMongoDBAgentParams.log_level:type_name -> inventory.v1.LogLevel + 14, // 266: inventory.v1.AddRTAMongoDBAgentParams.rta_options:type_name -> inventory.v1.RTAOptions + 112, // 267: inventory.v1.ChangeRTAMongoDBAgentParams.custom_labels:type_name -> common.StringMap + 109, // 268: inventory.v1.ChangeRTAMongoDBAgentParams.log_level:type_name -> inventory.v1.LogLevel + 14, // 269: inventory.v1.ChangeRTAMongoDBAgentParams.rta_options:type_name -> inventory.v1.RTAOptions + 22, // 270: inventory.v1.AgentsService.ListAgents:input_type -> inventory.v1.ListAgentsRequest + 24, // 271: inventory.v1.AgentsService.GetAgent:input_type -> inventory.v1.GetAgentRequest + 26, // 272: inventory.v1.AgentsService.GetAgentLogs:input_type -> inventory.v1.GetAgentLogsRequest + 28, // 273: inventory.v1.AgentsService.AddAgent:input_type -> inventory.v1.AddAgentRequest + 30, // 274: inventory.v1.AgentsService.ChangeAgent:input_type -> inventory.v1.ChangeAgentRequest + 66, // 275: inventory.v1.AgentsService.RemoveAgent:input_type -> inventory.v1.RemoveAgentRequest + 23, // 276: inventory.v1.AgentsService.ListAgents:output_type -> inventory.v1.ListAgentsResponse + 25, // 277: inventory.v1.AgentsService.GetAgent:output_type -> inventory.v1.GetAgentResponse + 27, // 278: inventory.v1.AgentsService.GetAgentLogs:output_type -> inventory.v1.GetAgentLogsResponse + 29, // 279: inventory.v1.AgentsService.AddAgent:output_type -> inventory.v1.AddAgentResponse + 31, // 280: inventory.v1.AgentsService.ChangeAgent:output_type -> inventory.v1.ChangeAgentResponse + 67, // 281: inventory.v1.AgentsService.RemoveAgent:output_type -> inventory.v1.RemoveAgentResponse + 276, // [276:282] is the sub-list for method output_type + 270, // [270:276] is the sub-list for method input_type + 270, // [270:270] is the sub-list for extension type_name + 270, // [270:270] is the sub-list for extension extendee + 0, // [0:270] is the sub-list for field type_name } func init() { file_inventory_v1_agents_proto_init() } diff --git a/api/inventory/v1/agents.pb.validate.go b/api/inventory/v1/agents.pb.validate.go index 136152848f2..533385485fb 100644 --- a/api/inventory/v1/agents.pb.validate.go +++ b/api/inventory/v1/agents.pb.validate.go @@ -437,35 +437,6 @@ func (m *NodeExporter) validate(all bool) error { } } - if all { - switch v := interface{}(m.GetConnectionTimeout()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, NodeExporterValidationError{ - field: "ConnectionTimeout", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, NodeExporterValidationError{ - field: "ConnectionTimeout", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return NodeExporterValidationError{ - field: "ConnectionTimeout", - reason: "embedded message failed validation", - cause: err, - } - } - } - if len(errors) > 0 { return NodeExporterMultiError(errors) } @@ -2640,35 +2611,6 @@ func (m *RDSExporter) validate(all bool) error { } } - if all { - switch v := interface{}(m.GetConnectionTimeout()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, RDSExporterValidationError{ - field: "ConnectionTimeout", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, RDSExporterValidationError{ - field: "ConnectionTimeout", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RDSExporterValidationError{ - field: "ConnectionTimeout", - reason: "embedded message failed validation", - cause: err, - } - } - } - if len(errors) > 0 { return RDSExporterMultiError(errors) } @@ -2823,35 +2765,6 @@ func (m *ExternalExporter) validate(all bool) error { // no validation rules for Status - if all { - switch v := interface{}(m.GetConnectionTimeout()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ExternalExporterValidationError{ - field: "ConnectionTimeout", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ExternalExporterValidationError{ - field: "ConnectionTimeout", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ExternalExporterValidationError{ - field: "ConnectionTimeout", - reason: "embedded message failed validation", - cause: err, - } - } - } - if len(errors) > 0 { return ExternalExporterMultiError(errors) } @@ -3005,35 +2918,6 @@ func (m *AzureDatabaseExporter) validate(all bool) error { } } - if all { - switch v := interface{}(m.GetConnectionTimeout()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, AzureDatabaseExporterValidationError{ - field: "ConnectionTimeout", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, AzureDatabaseExporterValidationError{ - field: "ConnectionTimeout", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetConnectionTimeout()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return AzureDatabaseExporterValidationError{ - field: "ConnectionTimeout", - reason: "embedded message failed validation", - cause: err, - } - } - } - if len(errors) > 0 { return AzureDatabaseExporterMultiError(errors) } @@ -8735,36 +8619,6 @@ func (m *AddNodeExporterParams) validate(all bool) error { // no validation rules for ExposeExporter - if d := m.GetConnectionTimeout(); d != nil { - dur, err := d.AsDuration(), d.CheckValid() - if err != nil { - err = AddNodeExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value is not a valid duration", - cause: err, - } - if !all { - return err - } - errors = append(errors, err) - } else { - - gte := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur < gte { - err := AddNodeExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value must be greater than or equal to 0s", - } - if !all { - return err - } - errors = append(errors, err) - } - - } - } - if len(errors) > 0 { return AddNodeExporterParamsMultiError(errors) } @@ -8896,36 +8750,6 @@ func (m *ChangeNodeExporterParams) validate(all bool) error { } } - if d := m.GetConnectionTimeout(); d != nil { - dur, err := d.AsDuration(), d.CheckValid() - if err != nil { - err = ChangeNodeExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value is not a valid duration", - cause: err, - } - if !all { - return err - } - errors = append(errors, err) - } else { - - gte := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur < gte { - err := ChangeNodeExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value must be greater than or equal to 0s", - } - if !all { - return err - } - errors = append(errors, err) - } - - } - } - if m.Enable != nil { // no validation rules for Enable } @@ -13131,36 +12955,6 @@ func (m *AddRDSExporterParams) validate(all bool) error { // no validation rules for LogLevel - if d := m.GetConnectionTimeout(); d != nil { - dur, err := d.AsDuration(), d.CheckValid() - if err != nil { - err = AddRDSExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value is not a valid duration", - cause: err, - } - if !all { - return err - } - errors = append(errors, err) - } else { - - gte := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur < gte { - err := AddRDSExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value must be greater than or equal to 0s", - } - if !all { - return err - } - errors = append(errors, err) - } - - } - } - if len(errors) > 0 { return AddRDSExporterParamsMultiError(errors) } @@ -13292,36 +13086,6 @@ func (m *ChangeRDSExporterParams) validate(all bool) error { } } - if d := m.GetConnectionTimeout(); d != nil { - dur, err := d.AsDuration(), d.CheckValid() - if err != nil { - err = ChangeRDSExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value is not a valid duration", - cause: err, - } - if !all { - return err - } - errors = append(errors, err) - } else { - - gte := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur < gte { - err := ChangeRDSExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value must be greater than or equal to 0s", - } - if !all { - return err - } - errors = append(errors, err) - } - - } - } - if m.Enable != nil { // no validation rules for Enable } @@ -13521,36 +13285,6 @@ func (m *AddExternalExporterParams) validate(all bool) error { // no validation rules for TlsSkipVerify - if d := m.GetConnectionTimeout(); d != nil { - dur, err := d.AsDuration(), d.CheckValid() - if err != nil { - err = AddExternalExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value is not a valid duration", - cause: err, - } - if !all { - return err - } - errors = append(errors, err) - } else { - - gte := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur < gte { - err := AddExternalExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value must be greater than or equal to 0s", - } - if !all { - return err - } - errors = append(errors, err) - } - - } - } - if len(errors) > 0 { return AddExternalExporterParamsMultiError(errors) } @@ -13682,36 +13416,6 @@ func (m *ChangeExternalExporterParams) validate(all bool) error { } } - if d := m.GetConnectionTimeout(); d != nil { - dur, err := d.AsDuration(), d.CheckValid() - if err != nil { - err = ChangeExternalExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value is not a valid duration", - cause: err, - } - if !all { - return err - } - errors = append(errors, err) - } else { - - gte := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur < gte { - err := ChangeExternalExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value must be greater than or equal to 0s", - } - if !all { - return err - } - errors = append(errors, err) - } - - } - } - if m.Enable != nil { // no validation rules for Enable } @@ -13921,36 +13625,6 @@ func (m *AddAzureDatabaseExporterParams) validate(all bool) error { // no validation rules for LogLevel - if d := m.GetConnectionTimeout(); d != nil { - dur, err := d.AsDuration(), d.CheckValid() - if err != nil { - err = AddAzureDatabaseExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value is not a valid duration", - cause: err, - } - if !all { - return err - } - errors = append(errors, err) - } else { - - gte := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur < gte { - err := AddAzureDatabaseExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value must be greater than or equal to 0s", - } - if !all { - return err - } - errors = append(errors, err) - } - - } - } - if len(errors) > 0 { return AddAzureDatabaseExporterParamsMultiError(errors) } @@ -14084,36 +13758,6 @@ func (m *ChangeAzureDatabaseExporterParams) validate(all bool) error { } } - if d := m.GetConnectionTimeout(); d != nil { - dur, err := d.AsDuration(), d.CheckValid() - if err != nil { - err = ChangeAzureDatabaseExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value is not a valid duration", - cause: err, - } - if !all { - return err - } - errors = append(errors, err) - } else { - - gte := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur < gte { - err := ChangeAzureDatabaseExporterParamsValidationError{ - field: "ConnectionTimeout", - reason: "value must be greater than or equal to 0s", - } - if !all { - return err - } - errors = append(errors, err) - } - - } - } - if m.Enable != nil { // no validation rules for Enable } diff --git a/api/inventory/v1/agents.proto b/api/inventory/v1/agents.proto index 0084ff84b87..eb408c08acf 100644 --- a/api/inventory/v1/agents.proto +++ b/api/inventory/v1/agents.proto @@ -129,8 +129,6 @@ message NodeExporter { bool expose_exporter = 14; // Metrics resolution for this agent. common.MetricsResolutions metrics_resolutions = 15; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 16; } // MySQLdExporter runs on Generic or Container Node and exposes MySQL Service metrics. @@ -689,8 +687,6 @@ message RDSExporter { int32 auto_discovery_limit = 25; // Metrics resolution for this agent. common.MetricsResolutions metrics_resolutions = 26; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 27; } // ExternalExporter runs on any Node type, including Remote Node. @@ -723,8 +719,6 @@ message ExternalExporter { bool tls_skip_verify = 13; // Actual Agent status. AgentStatus status = 14; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 15; } // AzureDatabaseExporter runs on Generic or Container Node and exposes RemoteAzure Node metrics. @@ -760,8 +754,6 @@ message AzureDatabaseExporter { LogLevel log_level = 14; // Metrics resolution for this agent. common.MetricsResolutions metrics_resolutions = 15; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 16; } // ChangeCommonAgentParams contains parameters that can be changed for all Agents. @@ -981,10 +973,6 @@ message AddNodeExporterParams { LogLevel log_level = 5; // Expose the node_exporter process on all public interfaces bool expose_exporter = 6; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 7 [(validate.rules).duration = { - gte: {seconds: 0} - }]; } message ChangeNodeExporterParams { @@ -1002,10 +990,6 @@ message ChangeNodeExporterParams { optional LogLevel log_level = 6; // Expose the node_exporter process on all public interfaces. optional bool expose_exporter = 7; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 8 [(validate.rules).duration = { - gte: {seconds: 0} - }]; } // Add/Change MySQLdExporter @@ -1800,10 +1784,6 @@ message AddRDSExporterParams { bool push_metrics = 9; // Log level for exporter. LogLevel log_level = 10; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 11 [(validate.rules).duration = { - gte: {seconds: 0} - }]; } message ChangeRDSExporterParams { @@ -1825,10 +1805,6 @@ message ChangeRDSExporterParams { optional bool disable_enhanced_metrics = 8; // Log level for exporter. optional LogLevel log_level = 9; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 10 [(validate.rules).duration = { - gte: {seconds: 0} - }]; } // Add/Change ExternalExporter @@ -1857,10 +1833,6 @@ message AddExternalExporterParams { bool push_metrics = 11; // Skip TLS certificate and hostname verification. bool tls_skip_verify = 12; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 13 [(validate.rules).duration = { - gte: {seconds: 0} - }]; } message ChangeExternalExporterParams { @@ -1880,10 +1852,6 @@ message ChangeExternalExporterParams { optional string metrics_path = 7; // Listen port for scraping metrics. optional uint32 listen_port = 8; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 9 [(validate.rules).duration = { - gte: {seconds: 0} - }]; } // Add/Change AzureDatabaseExporter @@ -1913,10 +1881,6 @@ message AddAzureDatabaseExporterParams { bool push_metrics = 11; // Log level for exporter. LogLevel log_level = 12; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 13 [(validate.rules).duration = { - gte: {seconds: 0} - }]; } message ChangeAzureDatabaseExporterParams { @@ -1940,10 +1904,6 @@ message ChangeAzureDatabaseExporterParams { optional string azure_resource_group = 9; // Log level for exporter. optional LogLevel log_level = 11; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 12 [(validate.rules).duration = { - gte: {seconds: 0} - }]; } message ChangeNomadAgentParams { diff --git a/api/inventory/v1/json/client/agents_service/add_agent_responses.go b/api/inventory/v1/json/client/agents_service/add_agent_responses.go index bc1753364b5..6a401a73398 100644 --- a/api/inventory/v1/json/client/agents_service/add_agent_responses.go +++ b/api/inventory/v1/json/client/agents_service/add_agent_responses.go @@ -2529,9 +2529,6 @@ type AddAgentOKBodyAzureDatabaseExporter struct { // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *AddAgentOKBodyAzureDatabaseExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2847,9 +2844,6 @@ type AddAgentOKBodyExternalExporter struct { // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] Status *string `json:"status,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *AddAgentOKBodyExternalExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3794,9 +3788,6 @@ type AddAgentOKBodyNodeExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *AddAgentOKBodyNodeExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -6129,9 +6120,6 @@ type AddAgentOKBodyRDSExporter struct { // Limit of databases for auto-discovery. AutoDiscoveryLimit int32 `json:"auto_discovery_limit,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *AddAgentOKBodyRDSExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -7003,9 +6991,6 @@ type AddAgentParamsBodyAzureDatabaseExporter struct { // - LOG_LEVEL_UNSPECIFIED: Auto // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` - - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add agent params body azure database exporter @@ -7133,9 +7118,6 @@ type AddAgentParamsBodyExternalExporter struct { // Skip TLS certificate and hostname verification. TLSSkipVerify bool `json:"tls_skip_verify,omitempty"` - - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add agent params body external exporter @@ -7523,9 +7505,6 @@ type AddAgentParamsBodyNodeExporter struct { // Expose the node_exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` - - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add agent params body node exporter @@ -8876,9 +8855,6 @@ type AddAgentParamsBodyRDSExporter struct { // - LOG_LEVEL_UNSPECIFIED: Auto // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` - - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this add agent params body RDS exporter diff --git a/api/inventory/v1/json/client/agents_service/change_agent_responses.go b/api/inventory/v1/json/client/agents_service/change_agent_responses.go index b1387a84fa4..7a04e267fb4 100644 --- a/api/inventory/v1/json/client/agents_service/change_agent_responses.go +++ b/api/inventory/v1/json/client/agents_service/change_agent_responses.go @@ -2529,9 +2529,6 @@ type ChangeAgentOKBodyAzureDatabaseExporter struct { // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *ChangeAgentOKBodyAzureDatabaseExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2847,9 +2844,6 @@ type ChangeAgentOKBodyExternalExporter struct { // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] Status *string `json:"status,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *ChangeAgentOKBodyExternalExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3794,9 +3788,6 @@ type ChangeAgentOKBodyNodeExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *ChangeAgentOKBodyNodeExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -6210,9 +6201,6 @@ type ChangeAgentOKBodyRDSExporter struct { // Limit of databases for auto-discovery. AutoDiscoveryLimit int32 `json:"auto_discovery_limit,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *ChangeAgentOKBodyRDSExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -7073,9 +7061,6 @@ type ChangeAgentParamsBodyAzureDatabaseExporter struct { // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // custom labels CustomLabels *ChangeAgentParamsBodyAzureDatabaseExporterCustomLabels `json:"custom_labels,omitempty"` @@ -7392,9 +7377,6 @@ type ChangeAgentParamsBodyExternalExporter struct { // Listen port for scraping metrics. ListenPort *int64 `json:"listen_port,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // custom labels CustomLabels *ChangeAgentParamsBodyExternalExporterCustomLabels `json:"custom_labels,omitempty"` @@ -8363,9 +8345,6 @@ type ChangeAgentParamsBodyNodeExporter struct { // Expose the node_exporter process on all public interfaces. ExposeExporter *bool `json:"expose_exporter,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // custom labels CustomLabels *ChangeAgentParamsBodyNodeExporterCustomLabels `json:"custom_labels,omitempty"` @@ -11457,9 +11436,6 @@ type ChangeAgentParamsBodyRDSExporter struct { // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // custom labels CustomLabels *ChangeAgentParamsBodyRDSExporterCustomLabels `json:"custom_labels,omitempty"` diff --git a/api/inventory/v1/json/client/agents_service/get_agent_responses.go b/api/inventory/v1/json/client/agents_service/get_agent_responses.go index b933f9d8c3f..13269939737 100644 --- a/api/inventory/v1/json/client/agents_service/get_agent_responses.go +++ b/api/inventory/v1/json/client/agents_service/get_agent_responses.go @@ -1615,9 +1615,6 @@ type GetAgentOKBodyAzureDatabaseExporter struct { // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *GetAgentOKBodyAzureDatabaseExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -1933,9 +1930,6 @@ type GetAgentOKBodyExternalExporter struct { // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] Status *string `json:"status,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *GetAgentOKBodyExternalExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2880,9 +2874,6 @@ type GetAgentOKBodyNodeExporter struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *GetAgentOKBodyNodeExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -5345,9 +5336,6 @@ type GetAgentOKBodyRDSExporter struct { // Limit of databases for auto-discovery. AutoDiscoveryLimit int32 `json:"auto_discovery_limit,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *GetAgentOKBodyRDSExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } diff --git a/api/inventory/v1/json/client/agents_service/list_agents_responses.go b/api/inventory/v1/json/client/agents_service/list_agents_responses.go index 734c5395d01..52b12e76585 100644 --- a/api/inventory/v1/json/client/agents_service/list_agents_responses.go +++ b/api/inventory/v1/json/client/agents_service/list_agents_responses.go @@ -1786,9 +1786,6 @@ type ListAgentsOKBodyAzureDatabaseExporterItems0 struct { // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] LogLevel *string `json:"log_level,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *ListAgentsOKBodyAzureDatabaseExporterItems0MetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2104,9 +2101,6 @@ type ListAgentsOKBodyExternalExporterItems0 struct { // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] Status *string `json:"status,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *ListAgentsOKBodyExternalExporterItems0MetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -3051,9 +3045,6 @@ type ListAgentsOKBodyNodeExporterItems0 struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `json:"expose_exporter,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *ListAgentsOKBodyNodeExporterItems0MetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -5516,9 +5507,6 @@ type ListAgentsOKBodyRDSExporterItems0 struct { // Limit of databases for auto-discovery. AutoDiscoveryLimit int32 `json:"auto_discovery_limit,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *ListAgentsOKBodyRDSExporterItems0MetricsResolutions `json:"metrics_resolutions,omitempty"` } diff --git a/api/inventory/v1/json/v1.json b/api/inventory/v1/json/v1.json index 05a8bbccc16..1b0a2395e83 100644 --- a/api/inventory/v1/json/v1.json +++ b/api/inventory/v1/json/v1.json @@ -273,11 +273,6 @@ } }, "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } } }, @@ -1686,11 +1681,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } } }, @@ -1819,11 +1809,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } } }, @@ -1941,11 +1926,6 @@ } }, "x-order": 12 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 13 } } }, @@ -2341,11 +2321,6 @@ "type": "boolean", "title": "Expose the node_exporter process on all public interfaces", "x-order": 5 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 6 } }, "x-order": 1 @@ -2882,11 +2857,6 @@ "description": "Skip TLS certificate and hostname verification.", "type": "boolean", "x-order": 9 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 10 } }, "x-order": 6 @@ -2956,11 +2926,6 @@ "LOG_LEVEL_DEBUG" ], "x-order": 9 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 10 } }, "x-order": 7 @@ -3040,11 +3005,6 @@ "LOG_LEVEL_DEBUG" ], "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } }, "x-order": 8 @@ -3992,11 +3952,6 @@ } }, "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } }, "x-order": 1 @@ -4733,11 +4688,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 6 @@ -4863,11 +4813,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } }, "x-order": 7 @@ -4982,11 +4927,6 @@ } }, "x-order": 12 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 13 } }, "x-order": 8 @@ -6092,11 +6032,6 @@ } }, "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } }, "x-order": 2 @@ -7472,11 +7407,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 13 @@ -7602,11 +7532,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } }, "x-order": 14 @@ -7721,11 +7646,6 @@ } }, "x-order": 12 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 13 } }, "x-order": 15 @@ -8131,11 +8051,6 @@ "type": "boolean", "x-nullable": true, "x-order": 6 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 7 } }, "x-order": 0 @@ -8822,11 +8737,6 @@ "format": "int64", "x-nullable": true, "x-order": 7 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 8 } }, "x-order": 5 @@ -8922,11 +8832,6 @@ ], "x-nullable": true, "x-order": 8 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 9 } }, "x-order": 6 @@ -9028,11 +8933,6 @@ ], "x-nullable": true, "x-order": 9 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 10 } }, "x-order": 7 @@ -10214,11 +10114,6 @@ } }, "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } }, "x-order": 0 @@ -10955,11 +10850,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 5 @@ -11085,11 +10975,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } }, "x-order": 6 @@ -11204,11 +11089,6 @@ } }, "x-order": 12 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 13 } }, "x-order": 7 diff --git a/api/management/v1/external.pb.go b/api/management/v1/external.pb.go index cd62e06086e..1f2612371ce 100644 --- a/api/management/v1/external.pb.go +++ b/api/management/v1/external.pb.go @@ -14,7 +14,6 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" v1 "github.com/percona/pmm/api/inventory/v1" ) @@ -77,10 +76,8 @@ type AddExternalServiceParams struct { SkipConnectionCheck bool `protobuf:"varint,18,opt,name=skip_connection_check,json=skipConnectionCheck,proto3" json:"skip_connection_check,omitempty"` // Skip TLS certificate and hostname validation. TlsSkipVerify bool `protobuf:"varint,19,opt,name=tls_skip_verify,json=tlsSkipVerify,proto3" json:"tls_skip_verify,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,20,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddExternalServiceParams) Reset() { @@ -246,13 +243,6 @@ func (x *AddExternalServiceParams) GetTlsSkipVerify() bool { return false } -func (x *AddExternalServiceParams) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - type ExternalServiceResult struct { state protoimpl.MessageState `protogen:"open.v1"` Service *v1.ExternalService `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` @@ -309,7 +299,7 @@ var File_management_v1_external_proto protoreflect.FileDescriptor const file_management_v1_external_proto_rawDesc = "" + "\n" + - "\x1cmanagement/v1/external.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xa2\a\n" + + "\x1cmanagement/v1/external.proto\x12\rmanagement.v1\x1a\x19inventory/v1/agents.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xce\x06\n" + "\x18AddExternalServiceParams\x12%\n" + "\x0fruns_on_node_id\x18\x01 \x01(\tR\frunsOnNodeId\x12\x1b\n" + "\tnode_name\x18\x02 \x01(\tR\bnodeName\x127\n" + @@ -331,8 +321,7 @@ const file_management_v1_external_proto_rawDesc = "" + "\x05group\x18\x10 \x01(\tR\x05group\x12=\n" + "\fmetrics_mode\x18\x11 \x01(\x0e2\x1a.management.v1.MetricsModeR\vmetricsMode\x122\n" + "\x15skip_connection_check\x18\x12 \x01(\bR\x13skipConnectionCheck\x12&\n" + - "\x0ftls_skip_verify\x18\x13 \x01(\bR\rtlsSkipVerify\x12R\n" + - "\x12connection_timeout\x18\x14 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + + "\x0ftls_skip_verify\x18\x13 \x01(\bR\rtlsSkipVerify\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x9d\x01\n" + @@ -361,9 +350,8 @@ var ( nil, // 2: management.v1.AddExternalServiceParams.CustomLabelsEntry (*AddNodeParams)(nil), // 3: management.v1.AddNodeParams (MetricsMode)(0), // 4: management.v1.MetricsMode - (*durationpb.Duration)(nil), // 5: google.protobuf.Duration - (*v1.ExternalService)(nil), // 6: inventory.v1.ExternalService - (*v1.ExternalExporter)(nil), // 7: inventory.v1.ExternalExporter + (*v1.ExternalService)(nil), // 5: inventory.v1.ExternalService + (*v1.ExternalExporter)(nil), // 6: inventory.v1.ExternalExporter } ) @@ -371,14 +359,13 @@ var file_management_v1_external_proto_depIdxs = []int32{ 3, // 0: management.v1.AddExternalServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddExternalServiceParams.custom_labels:type_name -> management.v1.AddExternalServiceParams.CustomLabelsEntry 4, // 2: management.v1.AddExternalServiceParams.metrics_mode:type_name -> management.v1.MetricsMode - 5, // 3: management.v1.AddExternalServiceParams.connection_timeout:type_name -> google.protobuf.Duration - 6, // 4: management.v1.ExternalServiceResult.service:type_name -> inventory.v1.ExternalService - 7, // 5: management.v1.ExternalServiceResult.external_exporter:type_name -> inventory.v1.ExternalExporter - 6, // [6:6] is the sub-list for method output_type - 6, // [6:6] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name + 5, // 3: management.v1.ExternalServiceResult.service:type_name -> inventory.v1.ExternalService + 6, // 4: management.v1.ExternalServiceResult.external_exporter:type_name -> inventory.v1.ExternalExporter + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name } func init() { file_management_v1_external_proto_init() } diff --git a/api/management/v1/external.pb.validate.go b/api/management/v1/external.pb.validate.go index 1c9415d2587..232949e1810 100644 --- a/api/management/v1/external.pb.validate.go +++ b/api/management/v1/external.pb.validate.go @@ -140,36 +140,6 @@ func (m *AddExternalServiceParams) validate(all bool) error { // no validation rules for TlsSkipVerify - if d := m.GetConnectionTimeout(); d != nil { - dur, err := d.AsDuration(), d.CheckValid() - if err != nil { - err = AddExternalServiceParamsValidationError{ - field: "ConnectionTimeout", - reason: "value is not a valid duration", - cause: err, - } - if !all { - return err - } - errors = append(errors, err) - } else { - - gte := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur < gte { - err := AddExternalServiceParamsValidationError{ - field: "ConnectionTimeout", - reason: "value must be greater than or equal to 0s", - } - if !all { - return err - } - errors = append(errors, err) - } - - } - } - if len(errors) > 0 { return AddExternalServiceParamsMultiError(errors) } diff --git a/api/management/v1/external.proto b/api/management/v1/external.proto index efe8308e278..7030f0364ee 100644 --- a/api/management/v1/external.proto +++ b/api/management/v1/external.proto @@ -2,7 +2,6 @@ syntax = "proto3"; package management.v1; -import "google/protobuf/duration.proto"; import "inventory/v1/agents.proto"; import "inventory/v1/services.proto"; import "management/v1/metrics.proto"; @@ -64,10 +63,6 @@ message AddExternalServiceParams { bool skip_connection_check = 18; // Skip TLS certificate and hostname validation. bool tls_skip_verify = 19; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 20 [(validate.rules).duration = { - gte: {seconds: 0} - }]; } message ExternalServiceResult { diff --git a/api/management/v1/json/client/management_service/add_service_responses.go b/api/management/v1/json/client/management_service/add_service_responses.go index c818725913c..14d6b0c504e 100644 --- a/api/management/v1/json/client/management_service/add_service_responses.go +++ b/api/management/v1/json/client/management_service/add_service_responses.go @@ -1645,9 +1645,6 @@ type AddServiceOKBodyExternalExternalExporter struct { // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] Status *string `json:"status,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *AddServiceOKBodyExternalExternalExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -2129,9 +2126,6 @@ type AddServiceOKBodyHaproxyExternalExporter struct { // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] Status *string `json:"status,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *AddServiceOKBodyHaproxyExternalExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -8583,9 +8577,6 @@ type AddServiceOKBodyRDSRDSExporter struct { // Limit of databases for auto-discovery. AutoDiscoveryLimit int32 `json:"auto_discovery_limit,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // metrics resolutions MetricsResolutions *AddServiceOKBodyRDSRDSExporterMetricsResolutions `json:"metrics_resolutions,omitempty"` } @@ -9409,9 +9400,6 @@ type AddServiceParamsBodyExternal struct { // Skip TLS certificate and hostname validation. TLSSkipVerify bool `json:"tls_skip_verify,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` - // add node AddNode *AddServiceParamsBodyExternalAddNode `json:"add_node,omitempty"` } diff --git a/api/management/v1/json/client/management_service/register_node_responses.go b/api/management/v1/json/client/management_service/register_node_responses.go index 1b03576ee0d..f4c682e05e9 100644 --- a/api/management/v1/json/client/management_service/register_node_responses.go +++ b/api/management/v1/json/client/management_service/register_node_responses.go @@ -248,9 +248,6 @@ type RegisterNodeBody struct { // AWS instance ID. InstanceID string `json:"instance_id,omitempty"` - - // Connection timeout for exporter (if set). - ConnectionTimeout string `json:"connection_timeout,omitempty"` } // Validate validates this register node body diff --git a/api/management/v1/json/v1.json b/api/management/v1/json/v1.json index 4f50186376c..98e5b993d75 100644 --- a/api/management/v1/json/v1.json +++ b/api/management/v1/json/v1.json @@ -959,11 +959,6 @@ "description": "AWS instance ID.", "type": "string", "x-order": 16 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 17 } } } @@ -3391,11 +3386,6 @@ "description": "Skip TLS certificate and hostname validation.", "type": "boolean", "x-order": 18 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 19 } }, "x-order": 5 @@ -5655,11 +5645,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 1 @@ -5836,11 +5821,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 1 @@ -6022,11 +6002,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } }, "x-order": 1 diff --git a/api/management/v1/node.pb.go b/api/management/v1/node.pb.go index c6cfaefe593..8915b579dfd 100644 --- a/api/management/v1/node.pb.go +++ b/api/management/v1/node.pb.go @@ -14,7 +14,6 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" v1 "github.com/percona/pmm/api/inventory/v1" @@ -248,11 +247,9 @@ type RegisterNodeRequest struct { // Optionally expose the exporter process on all public interfaces ExposeExporter bool `protobuf:"varint,16,opt,name=expose_exporter,json=exposeExporter,proto3" json:"expose_exporter,omitempty"` // AWS instance ID. - InstanceId string `protobuf:"bytes,17,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // Connection timeout for exporter (if set). - ConnectionTimeout *durationpb.Duration `protobuf:"bytes,18,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + InstanceId string `protobuf:"bytes,17,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RegisterNodeRequest) Reset() { @@ -404,13 +401,6 @@ func (x *RegisterNodeRequest) GetInstanceId() string { return "" } -func (x *RegisterNodeRequest) GetConnectionTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectionTimeout - } - return nil -} - type RegisterNodeResponse struct { state protoimpl.MessageState `protogen:"open.v1"` GenericNode *v1.GenericNode `protobuf:"bytes,1,opt,name=generic_node,json=genericNode,proto3" json:"generic_node,omitempty"` @@ -1113,7 +1103,7 @@ var File_management_v1_node_proto protoreflect.FileDescriptor const file_management_v1_node_proto_rawDesc = "" + "\n" + - "\x18management/v1/node.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19inventory/v1/agents.proto\x1a\x18inventory/v1/nodes.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x17validate/validate.proto\"\xc8\x03\n" + + "\x18management/v1/node.proto\x12\rmanagement.v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19inventory/v1/agents.proto\x1a\x18inventory/v1/nodes.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x17validate/validate.proto\"\xc8\x03\n" + "\rAddNodeParams\x123\n" + "\tnode_type\x18\x01 \x01(\x0e2\x16.inventory.v1.NodeTypeR\bnodeType\x12$\n" + "\tnode_name\x18\x02 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\bnodeName\x12\x1d\n" + @@ -1130,7 +1120,7 @@ const file_management_v1_node_proto_rawDesc = "" + " \x03(\v2..management.v1.AddNodeParams.CustomLabelsEntryR\fcustomLabels\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xc1\x06\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xed\x05\n" + "\x13RegisterNodeRequest\x123\n" + "\tnode_type\x18\x01 \x01(\x0e2\x16.inventory.v1.NodeTypeR\bnodeType\x12$\n" + "\tnode_name\x18\x02 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\bnodeName\x12\x18\n" + @@ -1154,8 +1144,7 @@ const file_management_v1_node_proto_rawDesc = "" + "\x0eagent_password\x18\x0f \x01(\tR\ragentPassword\x12'\n" + "\x0fexpose_exporter\x18\x10 \x01(\bR\x0eexposeExporter\x12\x1f\n" + "\vinstance_id\x18\x11 \x01(\tR\n" + - "instanceId\x12R\n" + - "\x12connection_timeout\x18\x12 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + + "instanceId\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xfd\x01\n" + @@ -1259,11 +1248,10 @@ var ( nil, // 15: management.v1.UniversalNode.CustomLabelsEntry (v1.NodeType)(0), // 16: inventory.v1.NodeType (MetricsMode)(0), // 17: management.v1.MetricsMode - (*durationpb.Duration)(nil), // 18: google.protobuf.Duration - (*v1.GenericNode)(nil), // 19: inventory.v1.GenericNode - (*v1.ContainerNode)(nil), // 20: inventory.v1.ContainerNode - (*v1.PMMAgent)(nil), // 21: inventory.v1.PMMAgent - (*timestamppb.Timestamp)(nil), // 22: google.protobuf.Timestamp + (*v1.GenericNode)(nil), // 18: inventory.v1.GenericNode + (*v1.ContainerNode)(nil), // 19: inventory.v1.ContainerNode + (*v1.PMMAgent)(nil), // 20: inventory.v1.PMMAgent + (*timestamppb.Timestamp)(nil), // 21: google.protobuf.Timestamp } ) @@ -1273,24 +1261,23 @@ var file_management_v1_node_proto_depIdxs = []int32{ 16, // 2: management.v1.RegisterNodeRequest.node_type:type_name -> inventory.v1.NodeType 12, // 3: management.v1.RegisterNodeRequest.custom_labels:type_name -> management.v1.RegisterNodeRequest.CustomLabelsEntry 17, // 4: management.v1.RegisterNodeRequest.metrics_mode:type_name -> management.v1.MetricsMode - 18, // 5: management.v1.RegisterNodeRequest.connection_timeout:type_name -> google.protobuf.Duration - 19, // 6: management.v1.RegisterNodeResponse.generic_node:type_name -> inventory.v1.GenericNode - 20, // 7: management.v1.RegisterNodeResponse.container_node:type_name -> inventory.v1.ContainerNode - 21, // 8: management.v1.RegisterNodeResponse.pmm_agent:type_name -> inventory.v1.PMMAgent - 15, // 9: management.v1.UniversalNode.custom_labels:type_name -> management.v1.UniversalNode.CustomLabelsEntry - 22, // 10: management.v1.UniversalNode.created_at:type_name -> google.protobuf.Timestamp - 22, // 11: management.v1.UniversalNode.updated_at:type_name -> google.protobuf.Timestamp - 0, // 12: management.v1.UniversalNode.status:type_name -> management.v1.UniversalNode.Status - 14, // 13: management.v1.UniversalNode.agents:type_name -> management.v1.UniversalNode.Agent - 13, // 14: management.v1.UniversalNode.services:type_name -> management.v1.UniversalNode.Service - 16, // 15: management.v1.ListNodesRequest.node_type:type_name -> inventory.v1.NodeType - 6, // 16: management.v1.ListNodesResponse.nodes:type_name -> management.v1.UniversalNode - 6, // 17: management.v1.GetNodeResponse.node:type_name -> management.v1.UniversalNode - 18, // [18:18] is the sub-list for method output_type - 18, // [18:18] is the sub-list for method input_type - 18, // [18:18] is the sub-list for extension type_name - 18, // [18:18] is the sub-list for extension extendee - 0, // [0:18] is the sub-list for field type_name + 18, // 5: management.v1.RegisterNodeResponse.generic_node:type_name -> inventory.v1.GenericNode + 19, // 6: management.v1.RegisterNodeResponse.container_node:type_name -> inventory.v1.ContainerNode + 20, // 7: management.v1.RegisterNodeResponse.pmm_agent:type_name -> inventory.v1.PMMAgent + 15, // 8: management.v1.UniversalNode.custom_labels:type_name -> management.v1.UniversalNode.CustomLabelsEntry + 21, // 9: management.v1.UniversalNode.created_at:type_name -> google.protobuf.Timestamp + 21, // 10: management.v1.UniversalNode.updated_at:type_name -> google.protobuf.Timestamp + 0, // 11: management.v1.UniversalNode.status:type_name -> management.v1.UniversalNode.Status + 14, // 12: management.v1.UniversalNode.agents:type_name -> management.v1.UniversalNode.Agent + 13, // 13: management.v1.UniversalNode.services:type_name -> management.v1.UniversalNode.Service + 16, // 14: management.v1.ListNodesRequest.node_type:type_name -> inventory.v1.NodeType + 6, // 15: management.v1.ListNodesResponse.nodes:type_name -> management.v1.UniversalNode + 6, // 16: management.v1.GetNodeResponse.node:type_name -> management.v1.UniversalNode + 17, // [17:17] is the sub-list for method output_type + 17, // [17:17] is the sub-list for method input_type + 17, // [17:17] is the sub-list for extension type_name + 17, // [17:17] is the sub-list for extension extendee + 0, // [0:17] is the sub-list for field type_name } func init() { file_management_v1_node_proto_init() } diff --git a/api/management/v1/node.pb.validate.go b/api/management/v1/node.pb.validate.go index a7632faa339..62a389ade8a 100644 --- a/api/management/v1/node.pb.validate.go +++ b/api/management/v1/node.pb.validate.go @@ -231,36 +231,6 @@ func (m *RegisterNodeRequest) validate(all bool) error { // no validation rules for InstanceId - if d := m.GetConnectionTimeout(); d != nil { - dur, err := d.AsDuration(), d.CheckValid() - if err != nil { - err = RegisterNodeRequestValidationError{ - field: "ConnectionTimeout", - reason: "value is not a valid duration", - cause: err, - } - if !all { - return err - } - errors = append(errors, err) - } else { - - gte := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur < gte { - err := RegisterNodeRequestValidationError{ - field: "ConnectionTimeout", - reason: "value must be greater than or equal to 0s", - } - if !all { - return err - } - errors = append(errors, err) - } - - } - } - if len(errors) > 0 { return RegisterNodeRequestMultiError(errors) } diff --git a/api/management/v1/node.proto b/api/management/v1/node.proto index b2c80ce00ee..74b16d47f3a 100644 --- a/api/management/v1/node.proto +++ b/api/management/v1/node.proto @@ -2,7 +2,6 @@ syntax = "proto3"; package management.v1; -import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "inventory/v1/agents.proto"; import "inventory/v1/nodes.proto"; @@ -70,10 +69,6 @@ message RegisterNodeRequest { bool expose_exporter = 16; // AWS instance ID. string instance_id = 17; - // Connection timeout for exporter (if set). - google.protobuf.Duration connection_timeout = 18 [(validate.rules).duration = { - gte: {seconds: 0} - }]; } message RegisterNodeResponse { diff --git a/api/swagger/swagger-dev.json b/api/swagger/swagger-dev.json index 70e6186976a..0bc31d31651 100644 --- a/api/swagger/swagger-dev.json +++ b/api/swagger/swagger-dev.json @@ -5546,11 +5546,6 @@ } }, "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } } }, @@ -6959,11 +6954,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } } }, @@ -7092,11 +7082,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } } }, @@ -7214,11 +7199,6 @@ } }, "x-order": 12 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 13 } } }, @@ -7614,11 +7594,6 @@ "type": "boolean", "title": "Expose the node_exporter process on all public interfaces", "x-order": 5 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 6 } }, "x-order": 1 @@ -8155,11 +8130,6 @@ "description": "Skip TLS certificate and hostname verification.", "type": "boolean", "x-order": 9 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 10 } }, "x-order": 6 @@ -8229,11 +8199,6 @@ "LOG_LEVEL_DEBUG" ], "x-order": 9 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 10 } }, "x-order": 7 @@ -8313,11 +8278,6 @@ "LOG_LEVEL_DEBUG" ], "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } }, "x-order": 8 @@ -9265,11 +9225,6 @@ } }, "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } }, "x-order": 1 @@ -10006,11 +9961,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 6 @@ -10136,11 +10086,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } }, "x-order": 7 @@ -10255,11 +10200,6 @@ } }, "x-order": 12 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 13 } }, "x-order": 8 @@ -11365,11 +11305,6 @@ } }, "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } }, "x-order": 2 @@ -12745,11 +12680,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 13 @@ -12875,11 +12805,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } }, "x-order": 14 @@ -12994,11 +12919,6 @@ } }, "x-order": 12 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 13 } }, "x-order": 15 @@ -13404,11 +13324,6 @@ "type": "boolean", "x-nullable": true, "x-order": 6 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 7 } }, "x-order": 0 @@ -14095,11 +14010,6 @@ "format": "int64", "x-nullable": true, "x-order": 7 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 8 } }, "x-order": 5 @@ -14195,11 +14105,6 @@ ], "x-nullable": true, "x-order": 8 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 9 } }, "x-order": 6 @@ -14301,11 +14206,6 @@ ], "x-nullable": true, "x-order": 9 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 10 } }, "x-order": 7 @@ -15487,11 +15387,6 @@ } }, "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } }, "x-order": 0 @@ -16228,11 +16123,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 5 @@ -16358,11 +16248,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } }, "x-order": 6 @@ -16477,11 +16362,6 @@ } }, "x-order": 12 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 13 } }, "x-order": 7 @@ -22450,11 +22330,6 @@ "description": "AWS instance ID.", "type": "string", "x-order": 16 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 17 } } } @@ -24882,11 +24757,6 @@ "description": "Skip TLS certificate and hostname validation.", "type": "boolean", "x-order": 18 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 19 } }, "x-order": 5 @@ -27146,11 +27016,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 1 @@ -27327,11 +27192,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 1 @@ -27513,11 +27373,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } }, "x-order": 1 diff --git a/api/swagger/swagger.json b/api/swagger/swagger.json index 703a0fc83a4..ae34b9296a5 100644 --- a/api/swagger/swagger.json +++ b/api/swagger/swagger.json @@ -4588,11 +4588,6 @@ } }, "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } } }, @@ -6001,11 +5996,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } } }, @@ -6134,11 +6124,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } } }, @@ -6256,11 +6241,6 @@ } }, "x-order": 12 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 13 } } }, @@ -6656,11 +6636,6 @@ "type": "boolean", "title": "Expose the node_exporter process on all public interfaces", "x-order": 5 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 6 } }, "x-order": 1 @@ -7197,11 +7172,6 @@ "description": "Skip TLS certificate and hostname verification.", "type": "boolean", "x-order": 9 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 10 } }, "x-order": 6 @@ -7271,11 +7241,6 @@ "LOG_LEVEL_DEBUG" ], "x-order": 9 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 10 } }, "x-order": 7 @@ -7355,11 +7320,6 @@ "LOG_LEVEL_DEBUG" ], "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } }, "x-order": 8 @@ -8307,11 +8267,6 @@ } }, "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } }, "x-order": 1 @@ -9048,11 +9003,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 6 @@ -9178,11 +9128,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } }, "x-order": 7 @@ -9297,11 +9242,6 @@ } }, "x-order": 12 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 13 } }, "x-order": 8 @@ -10407,11 +10347,6 @@ } }, "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } }, "x-order": 2 @@ -11787,11 +11722,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 13 @@ -11917,11 +11847,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } }, "x-order": 14 @@ -12036,11 +11961,6 @@ } }, "x-order": 12 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 13 } }, "x-order": 15 @@ -12446,11 +12366,6 @@ "type": "boolean", "x-nullable": true, "x-order": 6 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 7 } }, "x-order": 0 @@ -13137,11 +13052,6 @@ "format": "int64", "x-nullable": true, "x-order": 7 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 8 } }, "x-order": 5 @@ -13237,11 +13147,6 @@ ], "x-nullable": true, "x-order": 8 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 9 } }, "x-order": 6 @@ -13343,11 +13248,6 @@ ], "x-nullable": true, "x-order": 9 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 10 } }, "x-order": 7 @@ -14529,11 +14429,6 @@ } }, "x-order": 11 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 12 } }, "x-order": 0 @@ -15270,11 +15165,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 5 @@ -15400,11 +15290,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } }, "x-order": 6 @@ -15519,11 +15404,6 @@ } }, "x-order": 12 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 13 } }, "x-order": 7 @@ -21492,11 +21372,6 @@ "description": "AWS instance ID.", "type": "string", "x-order": 16 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 17 } } } @@ -23924,11 +23799,6 @@ "description": "Skip TLS certificate and hostname validation.", "type": "boolean", "x-order": 18 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 19 } }, "x-order": 5 @@ -26188,11 +26058,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 1 @@ -26369,11 +26234,6 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 14 } }, "x-order": 1 @@ -26555,11 +26415,6 @@ } }, "x-order": 14 - }, - "connection_timeout": { - "description": "Connection timeout for exporter (if set).", - "type": "string", - "x-order": 15 } }, "x-order": 1 diff --git a/managed/models/agent_helpers.go b/managed/models/agent_helpers.go index 00234ec6aa4..bdb075eb571 100644 --- a/managed/models/agent_helpers.go +++ b/managed/models/agent_helpers.go @@ -721,8 +721,6 @@ type CreateExternalExporterParams struct { CustomLabels map[string]string PushMetrics bool TLSSkipVerify bool - // Connection timeout for exporter (if set). - ConnectionTimeout *time.Duration } // CreateExternalExporter creates ExternalExporter. @@ -780,10 +778,9 @@ func CreateExternalExporter(q *reform.Querier, params *CreateExternalExporterPar Password: pointer.ToStringOrNil(params.Password), ListenPort: pointer.ToUint16(uint16(params.ListenPort)), ExporterOptions: ExporterOptions{ - PushMetrics: params.PushMetrics, - MetricsPath: metricsPath, - MetricsScheme: scheme, - ConnectionTimeout: params.ConnectionTimeout, + PushMetrics: params.PushMetrics, + MetricsPath: metricsPath, + MetricsScheme: scheme, }, TLSSkipVerify: params.TLSSkipVerify, } diff --git a/managed/models/agent_helpers_test.go b/managed/models/agent_helpers_test.go index f3421a56c9f..e4aa4524570 100644 --- a/managed/models/agent_helpers_test.go +++ b/managed/models/agent_helpers_test.go @@ -514,21 +514,6 @@ func TestAgentHelpers(t *testing.T) { UpdatedAt: now, }, agent) }) - t.Run("With connection timeout", func(t *testing.T) { - q, teardown := setup(t) - defer teardown(t) - - connectionTimeout := 3 * time.Second - agent, err := models.CreateExternalExporter(q, &models.CreateExternalExporterParams{ - RunsOnNodeID: "N1", - ServiceID: "S1", - ListenPort: 9104, - ConnectionTimeout: pointer.ToDuration(connectionTimeout), - }) - require.NoError(t, err) - require.NotNil(t, agent.ExporterOptions.ConnectionTimeout) - assert.Equal(t, connectionTimeout, *agent.ExporterOptions.ConnectionTimeout) - }) t.Run("Invalid listen port", func(t *testing.T) { q, teardown := setup(t) defer teardown(t) @@ -750,33 +735,6 @@ func TestAgentHelpers(t *testing.T) { require.NoError(t, err) assert.Equal(t, "https", persistedAgent.ExporterOptions.MetricsScheme) assert.Equal(t, "/custom-metrics", persistedAgent.ExporterOptions.MetricsPath) - - // Test setting and then clearing connection timeout back to default/unset. - agent, err = models.ChangeAgent(q, "A5", &models.ChangeAgentParams{ - ExporterOptions: &models.ChangeExporterOptions{ - ConnectionTimeout: pointer.ToDuration(7 * time.Second), - }, - }) - require.NoError(t, err) - require.NotNil(t, agent.ExporterOptions.ConnectionTimeout) - assert.Equal(t, 7*time.Second, *agent.ExporterOptions.ConnectionTimeout) - - persistedAgent, err = models.FindAgentByID(q, "A5") - require.NoError(t, err) - require.NotNil(t, persistedAgent.ExporterOptions.ConnectionTimeout) - assert.Equal(t, 7*time.Second, *persistedAgent.ExporterOptions.ConnectionTimeout) - - agent, err = models.ChangeAgent(q, "A5", &models.ChangeAgentParams{ - ExporterOptions: &models.ChangeExporterOptions{ - ConnectionTimeout: pointer.ToDuration(0), - }, - }) - require.NoError(t, err) - assert.Nil(t, agent.ExporterOptions.ConnectionTimeout) - - persistedAgent, err = models.FindAgentByID(q, "A5") - require.NoError(t, err) - assert.Nil(t, persistedAgent.ExporterOptions.ConnectionTimeout) }) t.Run("ChangeMetricsResolutions", func(t *testing.T) { diff --git a/managed/services/converters.go b/managed/services/converters.go index 71c8fff5771..d5cc42bb053 100644 --- a/managed/services/converters.go +++ b/managed/services/converters.go @@ -273,9 +273,6 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro ExposeExporter: agent.ExporterOptions.ExposeExporter, MetricsResolutions: ConvertMetricsResolutions(agent.ExporterOptions.MetricsResolutions), } - if agent.ExporterOptions.ConnectionTimeout != nil { - exporter.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) - } return exporter, nil case models.MySQLdExporterType: @@ -508,9 +505,6 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro LogLevel: inventoryv1.LogLevelAPIValue(agent.LogLevel), MetricsResolutions: ConvertMetricsResolutions(agent.ExporterOptions.MetricsResolutions), } - if agent.ExporterOptions.ConnectionTimeout != nil { - exporter.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) - } return exporter, nil case models.ExternalExporterType: @@ -537,9 +531,6 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro TlsSkipVerify: agent.TLSSkipVerify, Status: inventoryv1.AgentStatus(inventoryv1.AgentStatus_value[agent.Status]), } - if agent.ExporterOptions.ConnectionTimeout != nil { - ext.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) - } return ext, nil case models.AzureDatabaseExporterType: @@ -557,9 +548,6 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro LogLevel: inventoryv1.LogLevelAPIValue(agent.LogLevel), MetricsResolutions: ConvertMetricsResolutions(agent.ExporterOptions.MetricsResolutions), } - if agent.ExporterOptions.ConnectionTimeout != nil { - exporter.ConnectionTimeout = durationpb.New(*agent.ExporterOptions.ConnectionTimeout) - } return exporter, nil case models.VMAgentType: diff --git a/managed/services/inventory/agents.go b/managed/services/inventory/agents.go index 69fa20b55f5..a183016d237 100644 --- a/managed/services/inventory/agents.go +++ b/managed/services/inventory/agents.go @@ -173,7 +173,7 @@ func (as *AgentsService) AddNodeExporter(ctx context.Context, p *inventoryv1.Add var agent *inventoryv1.NodeExporter e := as.db.InTransactionContext(ctx, nil, func(tx *reform.TX) error { row, err := models.CreateNodeExporter(tx.Querier, p.PmmAgentId, p.CustomLabels, p.PushMetrics, p.ExposeExporter, - p.DisableCollectors, nil, services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), duration.OptionalFromProto(p.ConnectionTimeout)) + p.DisableCollectors, nil, services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), nil) if err != nil { return err } @@ -214,7 +214,6 @@ func (as *AgentsService) ChangeNodeExporter(ctx context.Context, agentID string, DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), - ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -1467,8 +1466,7 @@ func (as *AgentsService) AddRDSExporter(ctx context.Context, p *inventoryv1.AddR NodeID: p.NodeId, CustomLabels: p.CustomLabels, ExporterOptions: models.ExporterOptions{ - PushMetrics: p.PushMetrics, - ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), + PushMetrics: p.PushMetrics, }, AWSOptions: models.AWSOptions{ AWSAccessKey: p.AwsAccessKey, @@ -1530,7 +1528,6 @@ func (as *AgentsService) ChangeRDSExporter(ctx context.Context, agentID string, params.ExporterOptions = &models.ChangeExporterOptions{ PushMetrics: p.EnablePushMetrics, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), - ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -1558,17 +1555,16 @@ func (as *AgentsService) AddExternalExporter(ctx context.Context, p *inventoryv1 e := as.db.InTransactionContext(ctx, nil, func(tx *reform.TX) error { params := &models.CreateExternalExporterParams{ - RunsOnNodeID: p.RunsOnNodeId, - ServiceID: p.ServiceId, - Username: p.Username, - Password: p.Password, - Scheme: p.Scheme, - MetricsPath: p.MetricsPath, - ListenPort: p.ListenPort, - CustomLabels: p.CustomLabels, - PushMetrics: p.PushMetrics, - TLSSkipVerify: p.TlsSkipVerify, - ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), + RunsOnNodeID: p.RunsOnNodeId, + ServiceID: p.ServiceId, + Username: p.Username, + Password: p.Password, + Scheme: p.Scheme, + MetricsPath: p.MetricsPath, + ListenPort: p.ListenPort, + CustomLabels: p.CustomLabels, + PushMetrics: p.PushMetrics, + TLSSkipVerify: p.TlsSkipVerify, } row, err := models.CreateExternalExporter(tx.Querier, params) if err != nil { @@ -1619,7 +1615,6 @@ func (as *AgentsService) ChangeExternalExporter(ctx context.Context, agentID str MetricsScheme: p.Scheme, MetricsPath: p.MetricsPath, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), - ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -1651,8 +1646,7 @@ func (as *AgentsService) AddAzureDatabaseExporter(ctx context.Context, p *invent NodeID: p.NodeId, CustomLabels: p.CustomLabels, ExporterOptions: models.ExporterOptions{ - PushMetrics: p.PushMetrics, - ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), + PushMetrics: p.PushMetrics, }, AzureOptions: models.AzureOptionsFromRequest(p), LogLevel: services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_FATAL), @@ -1709,7 +1703,6 @@ func (as *AgentsService) ChangeAzureDatabaseExporter( params.ExporterOptions = &models.ChangeExporterOptions{ PushMetrics: p.EnablePushMetrics, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), - ConnectionTimeout: duration.OptionalFromProto(p.ConnectionTimeout), } agent, err := as.executeAgentChange(ctx, agentID, params) diff --git a/managed/services/inventory/agents_test.go b/managed/services/inventory/agents_test.go index b7848d04655..1ea711f3d64 100644 --- a/managed/services/inventory/agents_test.go +++ b/managed/services/inventory/agents_test.go @@ -112,40 +112,13 @@ func TestAgents(t *testing.T) { &inventoryv1.ChangeNodeExporterParams{ Enable: pointer.ToBool(false), // passing an empty map to remove custom labels - CustomLabels: &common.StringMap{}, - ConnectionTimeout: durationpb.New(7 * time.Second), + CustomLabels: &common.StringMap{}, MetricsResolutions: &common.MetricsResolutions{ Hr: durationpb.New(10 * time.Second), }, }, ) require.NoError(t, err) - expectedNodeExporter = &inventoryv1.NodeExporter{ - AgentId: "00000000-0000-4000-8000-000000000006", - PmmAgentId: "00000000-0000-4000-8000-000000000005", - Disabled: true, - Status: inventoryv1.AgentStatus_AGENT_STATUS_DONE, - ConnectionTimeout: durationpb.New(7 * time.Second), - MetricsResolutions: &common.MetricsResolutions{ - Hr: durationpb.New(10 * time.Second), - }, - } - assert.Equal(t, expectedNodeExporter, actualNodeExporter.GetNodeExporter()) - - actualAgent, err := as.Get(ctx, "00000000-0000-4000-8000-000000000006") - require.NoError(t, err) - assert.Equal(t, expectedNodeExporter, actualAgent.(*inventoryv1.NodeExporter)) - }) - - t.Run("ChangeNodeExporterClearConnectionTimeout", func(t *testing.T) { - actualNodeExporter, err := as.ChangeNodeExporter( - ctx, - "00000000-0000-4000-8000-000000000006", - &inventoryv1.ChangeNodeExporterParams{ - ConnectionTimeout: durationpb.New(0), - }, - ) - require.NoError(t, err) expectedNodeExporter = &inventoryv1.NodeExporter{ AgentId: "00000000-0000-4000-8000-000000000006", PmmAgentId: "00000000-0000-4000-8000-000000000005", @@ -300,65 +273,6 @@ func TestAgents(t *testing.T) { assert.Equal(t, expectedExternalExporter, actualAgent.GetExternalExporter()) }) - t.Run("ChangeExternalExporterConnectionTimeout", func(t *testing.T) { - as.vmdb.(*mockPrometheusService).On("RequestConfigurationUpdate").Return() - as.state.(*mockAgentsStateUpdater).On("RequestStateUpdate", ctx, models.PMMServerNodeID) - - actualAgent, err := as.ChangeExternalExporter( - ctx, - "00000000-0000-4000-8000-00000000000e", - &inventoryv1.ChangeExternalExporterParams{ - ConnectionTimeout: durationpb.New(17 * time.Second), - }, - ) - require.NoError(t, err) - expectedExternalExporter = &inventoryv1.ExternalExporter{ - AgentId: "00000000-0000-4000-8000-00000000000e", - RunsOnNodeId: models.PMMServerNodeID, - ServiceId: ps.ServiceId, - Username: "username", - Scheme: "http", - MetricsPath: "/metrics", - ListenPort: 9222, - Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, - ConnectionTimeout: durationpb.New(17 * time.Second), - } - assert.Equal(t, expectedExternalExporter, actualAgent.GetExternalExporter()) - - exporter, err := as.Get(ctx, "00000000-0000-4000-8000-00000000000e") - require.NoError(t, err) - assert.Equal(t, expectedExternalExporter, exporter.(*inventoryv1.ExternalExporter)) - }) - - t.Run("ChangeExternalExporterClearConnectionTimeout", func(t *testing.T) { - as.vmdb.(*mockPrometheusService).On("RequestConfigurationUpdate").Return() - as.state.(*mockAgentsStateUpdater).On("RequestStateUpdate", ctx, models.PMMServerNodeID) - - actualAgent, err := as.ChangeExternalExporter( - ctx, - "00000000-0000-4000-8000-00000000000e", - &inventoryv1.ChangeExternalExporterParams{ - ConnectionTimeout: durationpb.New(0), - }, - ) - require.NoError(t, err) - expectedExternalExporter = &inventoryv1.ExternalExporter{ - AgentId: "00000000-0000-4000-8000-00000000000e", - RunsOnNodeId: models.PMMServerNodeID, - ServiceId: ps.ServiceId, - Username: "username", - Scheme: "http", - MetricsPath: "/metrics", - ListenPort: 9222, - Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, - } - assert.Equal(t, expectedExternalExporter, actualAgent.GetExternalExporter()) - - exporter, err := as.Get(ctx, "00000000-0000-4000-8000-00000000000e") - require.NoError(t, err) - assert.Equal(t, expectedExternalExporter, exporter.(*inventoryv1.ExternalExporter)) - }) - t.Run("AddValkeyExporter", func(t *testing.T) { var err error valkey, err = ss.AddValkey(ctx, &models.AddDBMSServiceParams{ @@ -538,47 +452,40 @@ func TestAgents(t *testing.T) { as.state.(*mockAgentsStateUpdater).On("RequestStateUpdate", ctx, "pmm-server") agent, err := as.AddRDSExporter(ctx, &inventoryv1.AddRDSExporterParams{ - PmmAgentId: "pmm-server", - NodeId: node.NodeId, - AwsAccessKey: "EXAMPLE_ACCESS_KEY", - AwsSecretKey: "EXAMPLE_SECRET_KEY", - CustomLabels: map[string]string{"baz": "qux"}, - ConnectionTimeout: durationpb.New(19 * time.Second), + PmmAgentId: "pmm-server", + NodeId: node.NodeId, + AwsAccessKey: "EXAMPLE_ACCESS_KEY", + AwsSecretKey: "EXAMPLE_SECRET_KEY", + CustomLabels: map[string]string{"baz": "qux"}, }) require.NoError(t, err) expectedAgent := &inventoryv1.RDSExporter{ - AgentId: "00000000-0000-4000-8000-000000000006", - PmmAgentId: "pmm-server", - NodeId: "00000000-0000-4000-8000-000000000005", - AwsAccessKey: "EXAMPLE_ACCESS_KEY", - CustomLabels: map[string]string{"baz": "qux"}, - Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, - ConnectionTimeout: durationpb.New(19 * time.Second), + AgentId: "00000000-0000-4000-8000-000000000006", + PmmAgentId: "pmm-server", + NodeId: "00000000-0000-4000-8000-000000000005", + AwsAccessKey: "EXAMPLE_ACCESS_KEY", + CustomLabels: map[string]string{"baz": "qux"}, + Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, } assert.Equal(t, expectedAgent, agent.GetRdsExporter()) as.state.(*mockAgentsStateUpdater).On("RequestStateUpdate", ctx, "pmm-server") - changedAgent, err := as.ChangeRDSExporter(ctx, "00000000-0000-4000-8000-000000000006", &inventoryv1.ChangeRDSExporterParams{ - ConnectionTimeout: durationpb.New(23 * time.Second), - }) + changedAgent, err := as.ChangeRDSExporter(ctx, "00000000-0000-4000-8000-000000000006", &inventoryv1.ChangeRDSExporterParams{}) require.NoError(t, err) expectedAgent = &inventoryv1.RDSExporter{ - AgentId: "00000000-0000-4000-8000-000000000006", - PmmAgentId: "pmm-server", - NodeId: "00000000-0000-4000-8000-000000000005", - AwsAccessKey: "EXAMPLE_ACCESS_KEY", - CustomLabels: map[string]string{"baz": "qux"}, - Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, - ConnectionTimeout: durationpb.New(23 * time.Second), + AgentId: "00000000-0000-4000-8000-000000000006", + PmmAgentId: "pmm-server", + NodeId: "00000000-0000-4000-8000-000000000005", + AwsAccessKey: "EXAMPLE_ACCESS_KEY", + CustomLabels: map[string]string{"baz": "qux"}, + Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, } assert.Equal(t, expectedAgent, changedAgent.GetRdsExporter()) as.state.(*mockAgentsStateUpdater).On("RequestStateUpdate", ctx, "pmm-server") - changedAgent, err = as.ChangeRDSExporter(ctx, "00000000-0000-4000-8000-000000000006", &inventoryv1.ChangeRDSExporterParams{ - ConnectionTimeout: durationpb.New(0), - }) + changedAgent, err = as.ChangeRDSExporter(ctx, "00000000-0000-4000-8000-000000000006", &inventoryv1.ChangeRDSExporterParams{}) require.NoError(t, err) expectedAgent = &inventoryv1.RDSExporter{ AgentId: "00000000-0000-4000-8000-000000000006", @@ -887,13 +794,12 @@ func TestAgents(t *testing.T) { as.state.(*mockAgentsStateUpdater).On("RequestStateUpdate", ctx, "pmm-server") agent, err := as.AddRDSExporter(ctx, &inventoryv1.AddRDSExporterParams{ - PmmAgentId: "pmm-server", - NodeId: node.NodeId, - AwsAccessKey: "EXAMPLE_ACCESS_KEY", - AwsSecretKey: "EXAMPLE_SECRET_KEY", - CustomLabels: map[string]string{"baz": "qux"}, - PushMetrics: true, - ConnectionTimeout: durationpb.New(29 * time.Second), + PmmAgentId: "pmm-server", + NodeId: node.NodeId, + AwsAccessKey: "EXAMPLE_ACCESS_KEY", + AwsSecretKey: "EXAMPLE_SECRET_KEY", + CustomLabels: map[string]string{"baz": "qux"}, + PushMetrics: true, }) require.NoError(t, err) expectedAgent := &inventoryv1.RDSExporter{ @@ -904,7 +810,6 @@ func TestAgents(t *testing.T) { CustomLabels: map[string]string{"baz": "qux"}, PushMetricsEnabled: true, Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, - ConnectionTimeout: durationpb.New(29 * time.Second), } assert.Equal(t, expectedAgent, agent.GetRdsExporter()) }) diff --git a/managed/services/management/add_service_exporter_timeout_test.go b/managed/services/management/add_service_exporter_timeout_test.go index 5e1f069c598..5fd4bb86ff4 100644 --- a/managed/services/management/add_service_exporter_timeout_test.go +++ b/managed/services/management/add_service_exporter_timeout_test.go @@ -169,30 +169,6 @@ func TestAddServiceExporterTimeout(t *testing.T) { assert.Equal(t, want, resp.GetValkey().GetValkeyExporter().GetConnectionTimeout()) }) - t.Run("External", func(t *testing.T) { - vmdb.On("RequestConfigurationUpdate").Once() - - resp, err := s.AddService(ctx, &managementv1.AddServiceRequest{ - Service: &managementv1.AddServiceRequest_External{ - External: &managementv1.AddExternalServiceParams{ - NodeId: models.PMMServerNodeID, - RunsOnNodeId: models.PMMServerNodeID, - ServiceName: "mgmt-test-external-timeout", - Address: "127.0.0.1", - ListenPort: 42000, - Scheme: "http", - MetricsPath: "/metrics", - SkipConnectionCheck: true, - MetricsMode: managementv1.MetricsMode_METRICS_MODE_PULL, - ConnectionTimeout: want, - }, - }, - }) - require.NoError(t, err) - require.NotNil(t, resp.GetExternal()) - assert.Equal(t, want, resp.GetExternal().GetExternalExporter().GetConnectionTimeout()) - }) - t.Run("Azure Database", func(t *testing.T) { _, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{ EnableAzurediscover: pointer.ToBool(true), @@ -235,7 +211,7 @@ func TestAddServiceExporterTimeout(t *testing.T) { got[agent.AgentType] = pointer.GetDuration(agent.ExporterOptions.ConnectionTimeout) } - assert.Equal(t, want.AsDuration(), got[models.AzureDatabaseExporterType]) + assert.Zero(t, got[models.AzureDatabaseExporterType]) assert.Equal(t, want.AsDuration(), got[models.MySQLdExporterType]) }) @@ -261,7 +237,6 @@ func TestAddServiceExporterTimeout(t *testing.T) { }) require.NoError(t, err) require.NotNil(t, resp.GetRds()) - assert.Equal(t, want, resp.GetRds().GetRdsExporter().GetConnectionTimeout()) assert.Equal(t, want, resp.GetRds().GetMysqldExporter().GetConnectionTimeout()) }) @@ -290,7 +265,6 @@ func TestAddServiceExporterTimeout(t *testing.T) { }) require.NoError(t, err) require.NotNil(t, resp.GetRds()) - assert.Equal(t, want, resp.GetRds().GetRdsExporter().GetConnectionTimeout()) assert.Equal(t, want, resp.GetRds().GetPostgresqlExporter().GetConnectionTimeout()) }) } diff --git a/managed/services/management/azure_database.go b/managed/services/management/azure_database.go index a227b72f9c0..64d87eca376 100644 --- a/managed/services/management/azure_database.go +++ b/managed/services/management/azure_database.go @@ -264,9 +264,6 @@ func (s *ManagementService) AddAzureDatabase(ctx context.Context, req *managemen PMMAgentID: models.PMMServerAgentID, ServiceID: service.ServiceID, AzureOptions: models.AzureOptionsFromRequest(req), - ExporterOptions: models.ExporterOptions{ - ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), - }, }) if err != nil { return err diff --git a/managed/services/management/external.go b/managed/services/management/external.go index b505c53c77f..ffc5c53de2b 100644 --- a/managed/services/management/external.go +++ b/managed/services/management/external.go @@ -26,7 +26,6 @@ import ( managementv1 "github.com/percona/pmm/api/management/v1" "github.com/percona/pmm/managed/models" "github.com/percona/pmm/managed/services" - "github.com/percona/pmm/managed/utils/duration" ) // AddExternal adds an external service based on the provided request. @@ -101,17 +100,16 @@ func (s *ManagementService) addExternal(ctx context.Context, req *managementv1.A } params := &models.CreateExternalExporterParams{ - RunsOnNodeID: runsOnNodeID, - ServiceID: service.ServiceID, - Username: req.Username, - Password: req.Password, - Scheme: req.Scheme, - MetricsPath: req.MetricsPath, - ListenPort: req.ListenPort, - CustomLabels: req.CustomLabels, - PushMetrics: isPushMode(req.MetricsMode), - TLSSkipVerify: req.TlsSkipVerify, - ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), + RunsOnNodeID: runsOnNodeID, + ServiceID: service.ServiceID, + Username: req.Username, + Password: req.Password, + Scheme: req.Scheme, + MetricsPath: req.MetricsPath, + ListenPort: req.ListenPort, + CustomLabels: req.CustomLabels, + PushMetrics: isPushMode(req.MetricsMode), + TLSSkipVerify: req.TlsSkipVerify, } row, err := models.CreateExternalExporter(tx.Querier, params) if err != nil { diff --git a/managed/services/management/node.go b/managed/services/management/node.go index f552d2ade60..3a9ba4ed2cd 100644 --- a/managed/services/management/node.go +++ b/managed/services/management/node.go @@ -33,7 +33,6 @@ import ( "github.com/percona/pmm/managed/models" "github.com/percona/pmm/managed/services" "github.com/percona/pmm/managed/utils/auth" - "github.com/percona/pmm/managed/utils/duration" ) // RegisterNode performs the registration of a new node. @@ -115,7 +114,7 @@ func (s *ManagementService) RegisterNode(ctx context.Context, req *managementv1. res.PmmAgent = a.(*inventoryv1.PMMAgent) //nolint:forcetypeassert _, err = models.CreateNodeExporter(tx.Querier, pmmAgent.AgentID, nil, isPushMode(req.MetricsMode), req.ExposeExporter, - req.DisableCollectors, pointer.ToStringOrNil(req.AgentPassword), "", duration.OptionalFromProto(req.ConnectionTimeout)) + req.DisableCollectors, pointer.ToStringOrNil(req.AgentPassword), "", nil) if err != nil { return err } diff --git a/managed/services/management/rds.go b/managed/services/management/rds.go index 488d3fcfa65..0f6c2603738 100644 --- a/managed/services/management/rds.go +++ b/managed/services/management/rds.go @@ -321,8 +321,7 @@ func (s *ManagementService) addRDS(ctx context.Context, req *managementv1.AddRDS RDSEnhancedMetricsDisabled: req.DisableEnhancedMetrics, }, ExporterOptions: models.ExporterOptions{ - PushMetrics: isPushMode(metricsMode), - ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), + PushMetrics: isPushMode(metricsMode), }, }) if err != nil { From deda3195c702abd1bdced14ffeabd19bde49d7e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Ctvrtka?= Date: Tue, 21 Apr 2026 11:40:51 +0200 Subject: [PATCH 03/10] PMM-12832 Remove node exporter leftovers. --- managed/models/agent_helpers.go | 2 -- managed/models/database.go | 4 ++-- managed/services/inventory/agents.go | 2 +- managed/services/management/node.go | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/managed/models/agent_helpers.go b/managed/models/agent_helpers.go index bdb075eb571..df2eafcf5af 100644 --- a/managed/models/agent_helpers.go +++ b/managed/models/agent_helpers.go @@ -669,7 +669,6 @@ func CreateNodeExporter(q *reform.Querier, disableCollectors []string, agentPassword *string, logLevel string, - connectionTimeout *time.Duration, ) (*Agent, error) { // TODO merge into CreateAgent @@ -692,7 +691,6 @@ func CreateNodeExporter(q *reform.Querier, ExposeExporter: exposeExporter, PushMetrics: pushMetrics, DisabledCollectors: disableCollectors, - ConnectionTimeout: connectionTimeout, }, LogLevel: pointer.ToStringOrNil(logLevel), } diff --git a/managed/models/database.go b/managed/models/database.go index 7432a046fd1..85c11fac28e 100644 --- a/managed/models/database.go +++ b/managed/models/database.go @@ -1570,7 +1570,7 @@ func setupPMMServerHAAgents(q *reform.Querier, params SetupDBParams) error { return err } - if _, err = CreateNodeExporter(q, agent.AgentID, labels, false, false, []string{}, nil, "", nil); err != nil { + if _, err = CreateNodeExporter(q, agent.AgentID, labels, false, false, []string{}, nil, ""); err != nil { return err } @@ -1601,7 +1601,7 @@ func setupPMMServerAgents(q *reform.Querier, params SetupDBParams) error { if _, err = createPMMAgentWithID(q, PMMServerAgentID, node.NodeID, nil); err != nil { return err } - if _, err = CreateNodeExporter(q, PMMServerAgentID, nil, false, false, []string{}, nil, "", nil); err != nil { + if _, err = CreateNodeExporter(q, PMMServerAgentID, nil, false, false, []string{}, nil, ""); err != nil { return err } diff --git a/managed/services/inventory/agents.go b/managed/services/inventory/agents.go index a183016d237..37f2ea114d2 100644 --- a/managed/services/inventory/agents.go +++ b/managed/services/inventory/agents.go @@ -173,7 +173,7 @@ func (as *AgentsService) AddNodeExporter(ctx context.Context, p *inventoryv1.Add var agent *inventoryv1.NodeExporter e := as.db.InTransactionContext(ctx, nil, func(tx *reform.TX) error { row, err := models.CreateNodeExporter(tx.Querier, p.PmmAgentId, p.CustomLabels, p.PushMetrics, p.ExposeExporter, - p.DisableCollectors, nil, services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), nil) + p.DisableCollectors, nil, services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR)) if err != nil { return err } diff --git a/managed/services/management/node.go b/managed/services/management/node.go index 3a9ba4ed2cd..b91b875b409 100644 --- a/managed/services/management/node.go +++ b/managed/services/management/node.go @@ -114,7 +114,7 @@ func (s *ManagementService) RegisterNode(ctx context.Context, req *managementv1. res.PmmAgent = a.(*inventoryv1.PMMAgent) //nolint:forcetypeassert _, err = models.CreateNodeExporter(tx.Querier, pmmAgent.AgentID, nil, isPushMode(req.MetricsMode), req.ExposeExporter, - req.DisableCollectors, pointer.ToStringOrNil(req.AgentPassword), "", nil) + req.DisableCollectors, pointer.ToStringOrNil(req.AgentPassword), "") if err != nil { return err } From 988cdbaafdbdbd6630ff4d1bfa0e39941bd3b086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Ctvrtka?= Date: Tue, 21 Apr 2026 12:59:53 +0200 Subject: [PATCH 04/10] PMM-12832 Refactor. --- managed/models/agent_helpers.go | 10 +++----- managed/services/agents/mysql.go | 6 ++--- managed/services/agents/postgresql.go | 6 ++--- managed/services/inventory/agents.go | 1 - managed/services/management/mysql.go | 31 +++++++++++------------ managed/services/management/postgresql.go | 27 ++++++++++---------- managed/services/management/proxysql.go | 29 ++++++++++----------- 7 files changed, 52 insertions(+), 58 deletions(-) diff --git a/managed/models/agent_helpers.go b/managed/models/agent_helpers.go index df2eafcf5af..31ca36ce02f 100644 --- a/managed/models/agent_helpers.go +++ b/managed/models/agent_helpers.go @@ -1193,12 +1193,10 @@ func ChangeAgent(q *reform.Querier, agentID string, params *ChangeAgentParams) ( row.ExporterOptions.MetricsPath = *params.ExporterOptions.MetricsPath } - if params.ExporterOptions.ConnectionTimeout != nil { - if pointer.GetDuration(params.ExporterOptions.ConnectionTimeout) == 0 { - row.ExporterOptions.ConnectionTimeout = nil - } else { - row.ExporterOptions.ConnectionTimeout = params.ExporterOptions.ConnectionTimeout - } + if pointer.GetDuration(params.ExporterOptions.ConnectionTimeout) == 0 { + row.ExporterOptions.ConnectionTimeout = nil + } else { + row.ExporterOptions.ConnectionTimeout = params.ExporterOptions.ConnectionTimeout } } diff --git a/managed/services/agents/mysql.go b/managed/services/agents/mysql.go index 4798897b448..e840fd9a83f 100644 --- a/managed/services/agents/mysql.go +++ b/managed/services/agents/mysql.go @@ -152,7 +152,7 @@ func mysqldExporterConfig( // MySQL client connection timeout is configured in whole seconds, so round up // once here and reuse the normalized value for both my.cnf and legacy DSN paths. - roundedConnectionTimeout := time.Second * time.Duration(max(1, int(math.Ceil(exporter.EffectiveDialTimeout().Seconds())))) + connectionTimeout := time.Second * time.Duration(max(1, int(math.Ceil(exporter.EffectiveDialTimeout().Seconds())))) if pmmAgentVersion.IsFeatureSupported(version.MysqlExporterV0_17_2) { if textFiles == nil { @@ -160,7 +160,7 @@ func mysqldExporterConfig( } res.TextFiles = textFiles - cfg, err := buildMyCnfConfig(service, exporter, textFiles, roundedConnectionTimeout) + cfg, err := buildMyCnfConfig(service, exporter, textFiles, connectionTimeout) if err != nil { return nil, err } @@ -172,7 +172,7 @@ func mysqldExporterConfig( } } else { env := []string{ - fmt.Sprintf("DATA_SOURCE_NAME=%s", exporter.DSN(service, models.DSNParams{DialTimeout: roundedConnectionTimeout, Database: ""}, nil, pmmAgentVersion)), + fmt.Sprintf("DATA_SOURCE_NAME=%s", exporter.DSN(service, models.DSNParams{DialTimeout: connectionTimeout, Database: ""}, nil, pmmAgentVersion)), fmt.Sprintf("HTTP_AUTH=pmm:%s", exporter.GetAgentPassword()), } res.Env = env diff --git a/managed/services/agents/postgresql.go b/managed/services/agents/postgresql.go index 26ea80125a0..5fb858868c6 100644 --- a/managed/services/agents/postgresql.go +++ b/managed/services/agents/postgresql.go @@ -32,7 +32,7 @@ import ( "github.com/percona/pmm/version" ) -const postgresRemoteCloudDefaultDialTimeout = 5 * time.Second +const postgresCloudConnectionTimeout = 5 * time.Second var ( postgresExporterAutodiscoveryVersion = version.MustParse("2.15.99") @@ -134,13 +134,13 @@ func postgresExporterConfig(node *models.Node, service *models.Service, exporter var connectionTimeout time.Duration - // Remote RDS / Azure: default 5s dial unless the user set ExporterOptions.ConnectionTimeout. + // Remote RDS / Azure: default use postgresCloudConnectionTimeout dial unless the user set ExporterOptions.ConnectionTimeout. switch { case exporter.AzureOptions.ClientID != "", node.NodeType == models.RemoteRDSNodeType: connectionTimeout = pointer.GetDuration(exporter.ExporterOptions.ConnectionTimeout) if connectionTimeout == 0 { - connectionTimeout = postgresRemoteCloudDefaultDialTimeout + connectionTimeout = postgresCloudConnectionTimeout } default: connectionTimeout = exporter.EffectiveDialTimeout() diff --git a/managed/services/inventory/agents.go b/managed/services/inventory/agents.go index 37f2ea114d2..f0ac3731021 100644 --- a/managed/services/inventory/agents.go +++ b/managed/services/inventory/agents.go @@ -1552,7 +1552,6 @@ func (as *AgentsService) AddExternalExporter(ctx context.Context, p *inventoryv1 agent *inventoryv1.ExternalExporter PMMAgentID *string ) - e := as.db.InTransactionContext(ctx, nil, func(tx *reform.TX) error { params := &models.CreateExternalExporterParams{ RunsOnNodeID: p.RunsOnNodeId, diff --git a/managed/services/management/mysql.go b/managed/services/management/mysql.go index 755efdc43f9..564b04e28c1 100644 --- a/managed/services/management/mysql.go +++ b/managed/services/management/mysql.go @@ -93,23 +93,22 @@ func (s *ManagementService) addMySQL(ctx context.Context, req *managementv1.AddM } mysqlOptions.TableCountTablestatsGroupLimit = tablestatsGroupTableLimit - exporterOptions := models.ExporterOptions{ - ExposeExporter: req.ExposeExporter, - PushMetrics: isPushMode(req.MetricsMode), - DisabledCollectors: req.DisableCollectors, - ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), - } row, err := models.CreateAgent(tx.Querier, models.MySQLdExporterType, &models.CreateAgentParams{ - PMMAgentID: req.PmmAgentId, - ServiceID: service.ServiceID, - Username: req.Username, - Password: req.Password, - AgentPassword: req.AgentPassword, - TLS: req.Tls, - TLSSkipVerify: req.TlsSkipVerify, - MySQLOptions: mysqlOptions, - ExporterOptions: exporterOptions, - LogLevel: services.SpecifyLogLevel(req.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), + PMMAgentID: req.PmmAgentId, + ServiceID: service.ServiceID, + Username: req.Username, + Password: req.Password, + AgentPassword: req.AgentPassword, + TLS: req.Tls, + TLSSkipVerify: req.TlsSkipVerify, + MySQLOptions: mysqlOptions, + ExporterOptions: models.ExporterOptions{ + ExposeExporter: req.ExposeExporter, + PushMetrics: isPushMode(req.MetricsMode), + DisabledCollectors: req.DisableCollectors, + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), + }, + LogLevel: services.SpecifyLogLevel(req.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), }) if err != nil { return err diff --git a/managed/services/management/postgresql.go b/managed/services/management/postgresql.go index cb1a8c57e30..7fa898f1ef5 100644 --- a/managed/services/management/postgresql.go +++ b/managed/services/management/postgresql.go @@ -65,21 +65,20 @@ func (s *ManagementService) addPostgreSQL(ctx context.Context, req *managementv1 return err } - exporterOptions := models.ExporterOptions{ - ExposeExporter: req.ExposeExporter, - PushMetrics: isPushMode(req.MetricsMode), - DisabledCollectors: req.DisableCollectors, - ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), - } row, err := models.CreateAgent(tx.Querier, models.PostgresExporterType, &models.CreateAgentParams{ - PMMAgentID: req.PmmAgentId, - ServiceID: service.ServiceID, - Username: req.Username, - Password: req.Password, - AgentPassword: req.AgentPassword, - TLS: req.Tls, - TLSSkipVerify: req.TlsSkipVerify, - ExporterOptions: exporterOptions, + PMMAgentID: req.PmmAgentId, + ServiceID: service.ServiceID, + Username: req.Username, + Password: req.Password, + AgentPassword: req.AgentPassword, + TLS: req.Tls, + TLSSkipVerify: req.TlsSkipVerify, + ExporterOptions: models.ExporterOptions{ + ExposeExporter: req.ExposeExporter, + PushMetrics: isPushMode(req.MetricsMode), + DisabledCollectors: req.DisableCollectors, + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), + }, PostgreSQLOptions: models.PostgreSQLOptionsFromRequest(req), LogLevel: services.SpecifyLogLevel(req.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_ERROR), }) diff --git a/managed/services/management/proxysql.go b/managed/services/management/proxysql.go index fa0cdb8014f..93e0210f5f4 100644 --- a/managed/services/management/proxysql.go +++ b/managed/services/management/proxysql.go @@ -63,22 +63,21 @@ func (s *ManagementService) addProxySQL(ctx context.Context, req *managementv1.A return err } - exporterOptions := models.ExporterOptions{ - ExposeExporter: req.ExposeExporter, - PushMetrics: isPushMode(req.MetricsMode), - DisabledCollectors: req.DisableCollectors, - ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), - } row, err := models.CreateAgent(tx.Querier, models.ProxySQLExporterType, &models.CreateAgentParams{ - PMMAgentID: req.PmmAgentId, - ServiceID: service.ServiceID, - Username: req.Username, - Password: req.Password, - AgentPassword: req.AgentPassword, - TLS: req.Tls, - TLSSkipVerify: req.TlsSkipVerify, - ExporterOptions: exporterOptions, - LogLevel: services.SpecifyLogLevel(req.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_FATAL), + PMMAgentID: req.PmmAgentId, + ServiceID: service.ServiceID, + Username: req.Username, + Password: req.Password, + AgentPassword: req.AgentPassword, + TLS: req.Tls, + TLSSkipVerify: req.TlsSkipVerify, + ExporterOptions: models.ExporterOptions{ + ExposeExporter: req.ExposeExporter, + PushMetrics: isPushMode(req.MetricsMode), + DisabledCollectors: req.DisableCollectors, + ConnectionTimeout: duration.OptionalFromProto(req.ConnectionTimeout), + }, + LogLevel: services.SpecifyLogLevel(req.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_FATAL), }) if err != nil { return err From 5a7102de44dc09482291553f7d54abbe02f32b0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Ctvrtka?= Date: Tue, 21 Apr 2026 13:02:50 +0200 Subject: [PATCH 05/10] PMM-12832 pointer.Get instead of GetDuration everywhere. --- managed/models/agent_helpers.go | 4 ++-- managed/models/agent_model.go | 2 +- managed/services/agents/postgresql.go | 2 +- .../services/management/add_service_exporter_timeout_test.go | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/managed/models/agent_helpers.go b/managed/models/agent_helpers.go index 31ca36ce02f..8cd0e182edf 100644 --- a/managed/models/agent_helpers.go +++ b/managed/models/agent_helpers.go @@ -942,7 +942,7 @@ func CreateAgent(q *reform.Querier, agentType AgentType, params *CreateAgentPara } exporterOptions := params.ExporterOptions - if pointer.GetDuration(exporterOptions.ConnectionTimeout) == 0 { + if pointer.Get(exporterOptions.ConnectionTimeout) == 0 { exporterOptions.ConnectionTimeout = nil } @@ -1193,7 +1193,7 @@ func ChangeAgent(q *reform.Querier, agentID string, params *ChangeAgentParams) ( row.ExporterOptions.MetricsPath = *params.ExporterOptions.MetricsPath } - if pointer.GetDuration(params.ExporterOptions.ConnectionTimeout) == 0 { + if pointer.Get(params.ExporterOptions.ConnectionTimeout) == 0 { row.ExporterOptions.ConnectionTimeout = nil } else { row.ExporterOptions.ConnectionTimeout = params.ExporterOptions.ConnectionTimeout diff --git a/managed/models/agent_model.go b/managed/models/agent_model.go index d8700dc5893..5a4cc7b28e6 100644 --- a/managed/models/agent_model.go +++ b/managed/models/agent_model.go @@ -127,7 +127,7 @@ func (c ExporterOptions) IsEmpty() bool { c.MetricsResolutions == nil && c.MetricsPath == "" && c.MetricsScheme == "" && - pointer.GetDuration(c.ConnectionTimeout) == 0 + pointer.Get(c.ConnectionTimeout) == 0 } // QANOptions represents structure for special QAN options. diff --git a/managed/services/agents/postgresql.go b/managed/services/agents/postgresql.go index 5fb858868c6..5bf9f51ddb5 100644 --- a/managed/services/agents/postgresql.go +++ b/managed/services/agents/postgresql.go @@ -138,7 +138,7 @@ func postgresExporterConfig(node *models.Node, service *models.Service, exporter switch { case exporter.AzureOptions.ClientID != "", node.NodeType == models.RemoteRDSNodeType: - connectionTimeout = pointer.GetDuration(exporter.ExporterOptions.ConnectionTimeout) + connectionTimeout = pointer.Get(exporter.ExporterOptions.ConnectionTimeout) if connectionTimeout == 0 { connectionTimeout = postgresCloudConnectionTimeout } diff --git a/managed/services/management/add_service_exporter_timeout_test.go b/managed/services/management/add_service_exporter_timeout_test.go index 5fd4bb86ff4..159b7515e47 100644 --- a/managed/services/management/add_service_exporter_timeout_test.go +++ b/managed/services/management/add_service_exporter_timeout_test.go @@ -208,7 +208,7 @@ func TestAddServiceExporterTimeout(t *testing.T) { got := map[models.AgentType]time.Duration{} for _, agent := range agents { - got[agent.AgentType] = pointer.GetDuration(agent.ExporterOptions.ConnectionTimeout) + got[agent.AgentType] = pointer.Get(agent.ExporterOptions.ConnectionTimeout) } assert.Zero(t, got[models.AzureDatabaseExporterType]) From ff7ff95c2b8689627ed1dc88b5ae028fa9812d2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Ctvrtka?= Date: Tue, 21 Apr 2026 13:14:38 +0200 Subject: [PATCH 06/10] PMM-12832 Better duration conversion. --- admin/commands/helpers.go | 3 +- admin/commands/helpers_test.go | 60 +++++++++++++++++++++++++++++++++ managed/models/agent_helpers.go | 1 - 3 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 admin/commands/helpers_test.go diff --git a/admin/commands/helpers.go b/admin/commands/helpers.go index 1a5ce83b368..41d84a1f486 100644 --- a/admin/commands/helpers.go +++ b/admin/commands/helpers.go @@ -15,6 +15,7 @@ package commands import ( + "strconv" "time" ) @@ -24,5 +25,5 @@ func DurationString(value *time.Duration) string { return "" } - return value.String() + return strconv.FormatFloat(value.Seconds(), 'f', -1, 64) + "s" } diff --git a/admin/commands/helpers_test.go b/admin/commands/helpers_test.go new file mode 100644 index 00000000000..73d2f684a2f --- /dev/null +++ b/admin/commands/helpers_test.go @@ -0,0 +1,60 @@ +// Copyright (C) 2023 Percona LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package commands + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" +) + +func TestDurationString(t *testing.T) { + t.Parallel() + + t.Run("nil", func(t *testing.T) { + t.Parallel() + + assert.Equal(t, "", DurationString(nil)) + }) + + for _, testCase := range []struct { + name string + value time.Duration + expected string + }{ + { + name: "sub-second", + value: 500 * time.Millisecond, + expected: "0.5s", + }, + { + name: "multi-minute", + value: 90 * time.Second, + expected: "90s", + }, + { + name: "hour", + value: time.Hour, + expected: "3600s", + }, + } { + t.Run(testCase.name, func(t *testing.T) { + t.Parallel() + + assert.Equal(t, testCase.expected, DurationString(&testCase.value)) + }) + } +} diff --git a/managed/models/agent_helpers.go b/managed/models/agent_helpers.go index 8cd0e182edf..9294eb7bf5d 100644 --- a/managed/models/agent_helpers.go +++ b/managed/models/agent_helpers.go @@ -765,7 +765,6 @@ func CreateExternalExporter(q *reform.Querier, params *CreateExternalExporterPar if metricsPath == "" { metricsPath = "/metrics" } - row := &Agent{ PMMAgentID: pmmAgentID, AgentID: id, From 5e15937802db28c75248e40fec1960e6d85f2139 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Ctvrtka?= Date: Tue, 21 Apr 2026 13:40:12 +0200 Subject: [PATCH 07/10] PMM-12832 Gen. --- api/agent/v1/agent.pb.go | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/api/agent/v1/agent.pb.go b/api/agent/v1/agent.pb.go index 9169133a80d..4b0177c29ff 100644 --- a/api/agent/v1/agent.pb.go +++ b/api/agent/v1/agent.pb.go @@ -3794,7 +3794,7 @@ type SetStateRequest_BuiltinAgent struct { func (x *SetStateRequest_BuiltinAgent) Reset() { *x = SetStateRequest_BuiltinAgent{} - mi := &file_agent_v1_agent_proto_msgTypes[45] + mi := &file_agent_v1_agent_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3806,7 +3806,7 @@ func (x *SetStateRequest_BuiltinAgent) String() string { func (*SetStateRequest_BuiltinAgent) ProtoMessage() {} func (x *SetStateRequest_BuiltinAgent) ProtoReflect() protoreflect.Message { - mi := &file_agent_v1_agent_proto_msgTypes[45] + mi := &file_agent_v1_agent_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3819,7 +3819,7 @@ func (x *SetStateRequest_BuiltinAgent) ProtoReflect() protoreflect.Message { // Deprecated: Use SetStateRequest_BuiltinAgent.ProtoReflect.Descriptor instead. func (*SetStateRequest_BuiltinAgent) Descriptor() ([]byte, []int) { - return file_agent_v1_agent_proto_rawDescGZIP(), []int{7, 2} + return file_agent_v1_agent_proto_rawDescGZIP(), []int{7, 1} } func (x *SetStateRequest_BuiltinAgent) GetType() v1.AgentType { @@ -6670,10 +6670,7 @@ const file_agent_v1_agent_proto_rawDesc = "" + "\x12env_variable_names\x18\b \x03(\tR\x10envVariableNames\x1a<\n" + "\x0eTextFilesEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1ai\n" + - "\x13AgentProcessesEntry\x12\x10\n" + - "\x03key\x18\x01 \x01(\tR\x03key\x12<\n" + - "\x05value\x18\x02 \x01(\v2&.agent.v1.SetStateRequest.AgentProcessR\x05value:\x028\x01\x1a\xfa\x04\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1a\xfa\x04\n" + "\fBuiltinAgent\x12+\n" + "\x04type\x18\x01 \x01(\x0e2\x17.inventory.v1.AgentTypeR\x04type\x12\x10\n" + "\x03dsn\x18\x02 \x01(\tR\x03dsn\x12(\n" + @@ -6694,7 +6691,10 @@ const file_agent_v1_agent_proto_rawDesc = "" + "\fservice_name\x18\r \x01(\tR\vserviceName\x1a6\n" + "\bEnvEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1ah\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1ai\n" + + "\x13AgentProcessesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12<\n" + + "\x05value\x18\x02 \x01(\v2&.agent.v1.SetStateRequest.AgentProcessR\x05value:\x028\x01\x1ah\n" + "\x12BuiltinAgentsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12<\n" + "\x05value\x18\x02 \x01(\v2&.agent.v1.SetStateRequest.BuiltinAgentR\x05value:\x028\x01\"\x12\n" + @@ -7159,8 +7159,8 @@ var ( (*ServerMessage)(nil), // 43: agent.v1.ServerMessage nil, // 44: agent.v1.TextFiles.FilesEntry (*SetStateRequest_AgentProcess)(nil), // 45: agent.v1.SetStateRequest.AgentProcess - nil, // 46: agent.v1.SetStateRequest.AgentProcessesEntry - (*SetStateRequest_BuiltinAgent)(nil), // 47: agent.v1.SetStateRequest.BuiltinAgent + (*SetStateRequest_BuiltinAgent)(nil), // 46: agent.v1.SetStateRequest.BuiltinAgent + nil, // 47: agent.v1.SetStateRequest.AgentProcessesEntry nil, // 48: agent.v1.SetStateRequest.BuiltinAgentsEntry nil, // 49: agent.v1.SetStateRequest.AgentProcess.TextFilesEntry nil, // 50: agent.v1.SetStateRequest.BuiltinAgent.EnvEntry @@ -7226,7 +7226,7 @@ var file_agent_v1_agent_proto_depIdxs = []int32{ 94, // 1: agent.v1.Pong.current_time:type_name -> google.protobuf.Timestamp 95, // 2: agent.v1.QANCollectRequest.metrics_bucket:type_name -> agent.v1.MetricsBucket 96, // 3: agent.v1.StateChangedRequest.status:type_name -> inventory.v1.AgentStatus - 46, // 4: agent.v1.SetStateRequest.agent_processes:type_name -> agent.v1.SetStateRequest.AgentProcessesEntry + 47, // 4: agent.v1.SetStateRequest.agent_processes:type_name -> agent.v1.SetStateRequest.AgentProcessesEntry 48, // 5: agent.v1.SetStateRequest.builtin_agents:type_name -> agent.v1.SetStateRequest.BuiltinAgentsEntry 94, // 6: agent.v1.QueryActionValue.timestamp:type_name -> google.protobuf.Timestamp 12, // 7: agent.v1.QueryActionValue.slice:type_name -> agent.v1.QueryActionSlice @@ -7320,12 +7320,12 @@ var file_agent_v1_agent_proto_depIdxs = []int32{ 28, // 95: agent.v1.ServerMessage.service_info:type_name -> agent.v1.ServiceInfoRequest 100, // 96: agent.v1.SetStateRequest.AgentProcess.type:type_name -> inventory.v1.AgentType 49, // 97: agent.v1.SetStateRequest.AgentProcess.text_files:type_name -> agent.v1.SetStateRequest.AgentProcess.TextFilesEntry - 45, // 98: agent.v1.SetStateRequest.AgentProcessesEntry.value:type_name -> agent.v1.SetStateRequest.AgentProcess - 100, // 99: agent.v1.SetStateRequest.BuiltinAgent.type:type_name -> inventory.v1.AgentType - 2, // 100: agent.v1.SetStateRequest.BuiltinAgent.text_files:type_name -> agent.v1.TextFiles - 50, // 101: agent.v1.SetStateRequest.BuiltinAgent.env:type_name -> agent.v1.SetStateRequest.BuiltinAgent.EnvEntry - 101, // 102: agent.v1.SetStateRequest.BuiltinAgent.rta_options:type_name -> inventory.v1.RTAOptions - 47, // 103: agent.v1.SetStateRequest.BuiltinAgentsEntry.value:type_name -> agent.v1.SetStateRequest.BuiltinAgent + 100, // 98: agent.v1.SetStateRequest.BuiltinAgent.type:type_name -> inventory.v1.AgentType + 2, // 99: agent.v1.SetStateRequest.BuiltinAgent.text_files:type_name -> agent.v1.TextFiles + 50, // 100: agent.v1.SetStateRequest.BuiltinAgent.env:type_name -> agent.v1.SetStateRequest.BuiltinAgent.EnvEntry + 101, // 101: agent.v1.SetStateRequest.BuiltinAgent.rta_options:type_name -> inventory.v1.RTAOptions + 45, // 102: agent.v1.SetStateRequest.AgentProcessesEntry.value:type_name -> agent.v1.SetStateRequest.AgentProcess + 46, // 103: agent.v1.SetStateRequest.BuiltinAgentsEntry.value:type_name -> agent.v1.SetStateRequest.BuiltinAgent 11, // 104: agent.v1.QueryActionMap.MapEntry.value:type_name -> agent.v1.QueryActionValue 0, // 105: agent.v1.StartActionRequest.MySQLExplainParams.output_format:type_name -> agent.v1.MysqlExplainOutputFormat 2, // 106: agent.v1.StartActionRequest.MySQLExplainParams.tls_files:type_name -> agent.v1.TextFiles From 2879d987c888711e79b27d08f2e27cce1454be25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Ctvrtka?= Date: Tue, 21 Apr 2026 14:37:49 +0200 Subject: [PATCH 08/10] PMM-12832 Lint. --- admin/commands/helpers_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/admin/commands/helpers_test.go b/admin/commands/helpers_test.go index 73d2f684a2f..4009485ebc2 100644 --- a/admin/commands/helpers_test.go +++ b/admin/commands/helpers_test.go @@ -18,7 +18,7 @@ import ( "testing" "time" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestDurationString(t *testing.T) { @@ -27,7 +27,7 @@ func TestDurationString(t *testing.T) { t.Run("nil", func(t *testing.T) { t.Parallel() - assert.Equal(t, "", DurationString(nil)) + require.Empty(t, DurationString(nil)) }) for _, testCase := range []struct { @@ -54,7 +54,7 @@ func TestDurationString(t *testing.T) { t.Run(testCase.name, func(t *testing.T) { t.Parallel() - assert.Equal(t, testCase.expected, DurationString(&testCase.value)) + require.Equal(t, testCase.expected, DurationString(&testCase.value)) }) } } From 3e0f98ffa115f69c9377f2eed42d107fbac5420c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Ctvrtka?= Date: Tue, 21 Apr 2026 14:45:19 +0200 Subject: [PATCH 09/10] PMM-12832 Required instead assert. --- managed/utils/duration/duration_test.go | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/managed/utils/duration/duration_test.go b/managed/utils/duration/duration_test.go index 11f6936c697..33ac1606c0d 100644 --- a/managed/utils/duration/duration_test.go +++ b/managed/utils/duration/duration_test.go @@ -19,26 +19,24 @@ import ( "testing" "time" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "google.golang.org/protobuf/types/known/durationpb" ) func TestOptionalFromProto(t *testing.T) { t.Run("nil", func(t *testing.T) { - assert.Nil(t, OptionalFromProto(nil)) + require.Nil(t, OptionalFromProto(nil)) }) t.Run("zero", func(t *testing.T) { actual := OptionalFromProto(durationpb.New(0)) - if assert.NotNil(t, actual) { - assert.Equal(t, time.Duration(0), *actual) - } + require.NotNil(t, actual) + require.Equal(t, time.Duration(0), *actual) }) t.Run("non-zero", func(t *testing.T) { actual := OptionalFromProto(durationpb.New(1500 * time.Millisecond)) - if assert.NotNil(t, actual) { - assert.Equal(t, 1500*time.Millisecond, *actual) - } + require.NotNil(t, actual) + require.Equal(t, 1500*time.Millisecond, *actual) }) } From f6609df384ea248380bdb76a7d62304fe2623bd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Ctvrtka?= Date: Mon, 27 Apr 2026 10:18:33 +0200 Subject: [PATCH 10/10] PMM-12832 Regen. --- api/management/v1/agent.pb.go | 2 +- api/management/v1/azure.pb.go | 2 +- api/management/v1/mongodb.pb.go | 2 +- api/management/v1/mysql.pb.go | 2 +- api/management/v1/postgresql.pb.go | 2 +- api/management/v1/proxysql.pb.go | 2 +- api/management/v1/rds.pb.go | 2 +- api/management/v1/valkey.pb.go | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/api/management/v1/agent.pb.go b/api/management/v1/agent.pb.go index 011bffc0700..2c64d9835a6 100644 --- a/api/management/v1/agent.pb.go +++ b/api/management/v1/agent.pb.go @@ -1100,7 +1100,7 @@ var File_management_v1_agent_proto protoreflect.FileDescriptor const file_management_v1_agent_proto_rawDesc = "" + "\n" + - "\x19management/v1/agent.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1aextensions/v1/redact.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\"\x9a\x19\n" + + "\x19management/v1/agent.proto\x12\rmanagement.v1\x1a\x1aextensions/v1/redact.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\"\x9a\x19\n" + "\x0eUniversalAgent\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x121\n" + "\x15is_agent_password_set\x18\x02 \x01(\bR\x12isAgentPasswordSet\x12\x1d\n" + diff --git a/api/management/v1/azure.pb.go b/api/management/v1/azure.pb.go index 2b1f25a1705..11933db57d2 100644 --- a/api/management/v1/azure.pb.go +++ b/api/management/v1/azure.pb.go @@ -637,7 +637,7 @@ var File_management_v1_azure_proto protoreflect.FileDescriptor const file_management_v1_azure_proto_rawDesc = "" + "\n" + - "\x19management/v1/azure.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1aextensions/v1/redact.proto\x1a\x17validate/validate.proto\"\xfe\x01\n" + + "\x19management/v1/azure.proto\x12\rmanagement.v1\x1a\x1aextensions/v1/redact.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x17validate/validate.proto\"\xfe\x01\n" + "\x1cDiscoverAzureDatabaseRequest\x123\n" + "\x0fazure_client_id\x18\x01 \x01(\tB\v\xfaB\x04r\x02\x10\x01\x88\xb5\x18\x01R\razureClientId\x12;\n" + "\x13azure_client_secret\x18\x02 \x01(\tB\v\xfaB\x04r\x02\x10\x01\x88\xb5\x18\x01R\x11azureClientSecret\x12/\n" + diff --git a/api/management/v1/mongodb.pb.go b/api/management/v1/mongodb.pb.go index 1c1429bd456..b24e9707277 100644 --- a/api/management/v1/mongodb.pb.go +++ b/api/management/v1/mongodb.pb.go @@ -479,7 +479,7 @@ var File_management_v1_mongodb_proto protoreflect.FileDescriptor const file_management_v1_mongodb_proto_rawDesc = "" + "\n" + - "\x1bmanagement/v1/mongodb.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1aextensions/v1/redact.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xd9\r\n" + + "\x1bmanagement/v1/mongodb.proto\x12\rmanagement.v1\x1a\x1aextensions/v1/redact.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xd9\r\n" + "\x17AddMongoDBServiceParams\x12\x17\n" + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12\x1b\n" + "\tnode_name\x18\x02 \x01(\tR\bnodeName\x127\n" + diff --git a/api/management/v1/mysql.pb.go b/api/management/v1/mysql.pb.go index ff0632778c6..a2c184a89f1 100644 --- a/api/management/v1/mysql.pb.go +++ b/api/management/v1/mysql.pb.go @@ -462,7 +462,7 @@ var File_management_v1_mysql_proto protoreflect.FileDescriptor const file_management_v1_mysql_proto_rawDesc = "" + "\n" + - "\x19management/v1/mysql.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1aextensions/v1/redact.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\x8a\r\n" + + "\x19management/v1/mysql.proto\x12\rmanagement.v1\x1a\x1aextensions/v1/redact.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\x8a\r\n" + "\x15AddMySQLServiceParams\x12\x17\n" + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12\x1b\n" + "\tnode_name\x18\x02 \x01(\tR\bnodeName\x127\n" + diff --git a/api/management/v1/postgresql.pb.go b/api/management/v1/postgresql.pb.go index de2aea272d0..9c86074932f 100644 --- a/api/management/v1/postgresql.pb.go +++ b/api/management/v1/postgresql.pb.go @@ -458,7 +458,7 @@ var File_management_v1_postgresql_proto protoreflect.FileDescriptor const file_management_v1_postgresql_proto_rawDesc = "" + "\n" + - "\x1emanagement/v1/postgresql.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1aextensions/v1/redact.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xbb\f\n" + + "\x1emanagement/v1/postgresql.proto\x12\rmanagement.v1\x1a\x1aextensions/v1/redact.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xbb\f\n" + "\x1aAddPostgreSQLServiceParams\x12\x17\n" + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12\x1b\n" + "\tnode_name\x18\x02 \x01(\tR\bnodeName\x127\n" + diff --git a/api/management/v1/proxysql.pb.go b/api/management/v1/proxysql.pb.go index 1aff9ec5921..8fe9e495fe4 100644 --- a/api/management/v1/proxysql.pb.go +++ b/api/management/v1/proxysql.pb.go @@ -334,7 +334,7 @@ var File_management_v1_proxysql_proto protoreflect.FileDescriptor const file_management_v1_proxysql_proto_rawDesc = "" + "\n" + - "\x1cmanagement/v1/proxysql.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1aextensions/v1/redact.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xb2\b\n" + + "\x1cmanagement/v1/proxysql.proto\x12\rmanagement.v1\x1a\x1aextensions/v1/redact.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xb2\b\n" + "\x18AddProxySQLServiceParams\x12\x17\n" + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12\x1b\n" + "\tnode_name\x18\x02 \x01(\tR\bnodeName\x127\n" + diff --git a/api/management/v1/rds.pb.go b/api/management/v1/rds.pb.go index 6c0dc5884cb..ba9b65897d7 100644 --- a/api/management/v1/rds.pb.go +++ b/api/management/v1/rds.pb.go @@ -742,7 +742,7 @@ var File_management_v1_rds_proto protoreflect.FileDescriptor const file_management_v1_rds_proto_rawDesc = "" + "\n" + - "\x17management/v1/rds.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1aextensions/v1/redact.proto\x1a\x19inventory/v1/agents.proto\x1a\x18inventory/v1/nodes.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x17validate/validate.proto\"\x8c\x02\n" + + "\x17management/v1/rds.proto\x12\rmanagement.v1\x1a\x1aextensions/v1/redact.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x18inventory/v1/nodes.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x17validate/validate.proto\"\x8c\x02\n" + "\x13DiscoverRDSInstance\x12\x16\n" + "\x06region\x18\x01 \x01(\tR\x06region\x12\x0e\n" + "\x02az\x18\x02 \x01(\tR\x02az\x12\x1f\n" + diff --git a/api/management/v1/valkey.pb.go b/api/management/v1/valkey.pb.go index 7d58dd7b93a..b6eaef2be51 100644 --- a/api/management/v1/valkey.pb.go +++ b/api/management/v1/valkey.pb.go @@ -352,7 +352,7 @@ var File_management_v1_valkey_proto protoreflect.FileDescriptor const file_management_v1_valkey_proto_rawDesc = "" + "\n" + - "\x1amanagement/v1/valkey.proto\x12\rmanagement.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1aextensions/v1/redact.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xdb\b\n" + + "\x1amanagement/v1/valkey.proto\x12\rmanagement.v1\x1a\x1aextensions/v1/redact.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xdb\b\n" + "\x16AddValkeyServiceParams\x12#\n" + "\anode_id\x18\x01 \x01(\tB\n" + "\xfaB\ar\x05\x10\x01\xd0\x01\x01R\x06nodeId\x12'\n" +