diff --git a/admin/commands/inventory/add_agent_external_exporter.go b/admin/commands/inventory/add_agent_external_exporter.go index 039faf30a2a..76d5f5f3353 100644 --- a/admin/commands/inventory/add_agent_external_exporter.go +++ b/admin/commands/inventory/add_agent_external_exporter.go @@ -61,6 +61,7 @@ type AddAgentExternalExporterCommand struct { 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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` } // RunCmd executes the AddAgentExternalExporterCommand and returns the result. @@ -84,6 +85,7 @@ func (cmd *AddAgentExternalExporterCommand) RunCmd() (commands.Result, error) { CustomLabels: pointer.Get(customLabels), PushMetrics: cmd.PushMetrics, TLSSkipVerify: cmd.TLSSkipVerify, + Timeout: cmd.Timeout, }, }, 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..f06f5bc63df 100644 --- a/admin/commands/inventory/add_agent_mongodb_exporter.go +++ b/admin/commands/inventory/add_agent_mongodb_exporter.go @@ -67,6 +67,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 + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` flags.LogLevelFatalFlags } @@ -105,6 +106,7 @@ func (cmd *AddAgentMongodbExporterCommand) RunCmd() (commands.Result, error) { StatsCollections: commands.ParseDisableCollectors(cmd.StatsCollections), CollectionsLimit: cmd.CollectionsLimit, LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + Timeout: cmd.Timeout, }, }, 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..1ae471d21ff 100644 --- a/admin/commands/inventory/add_agent_mysqld_exporter.go +++ b/admin/commands/inventory/add_agent_mysqld_exporter.go @@ -103,6 +103,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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` flags.LogLevelNoFatalFlags } @@ -153,6 +154,7 @@ func (cmd *AddAgentMysqldExporterCommand) RunCmd() (commands.Result, error) { ExposeExporter: cmd.ExposeExporter, DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), + Timeout: cmd.Timeout, }, }, 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..5940f468e69 100644 --- a/admin/commands/inventory/add_agent_node_exporter.go +++ b/admin/commands/inventory/add_agent_node_exporter.go @@ -49,6 +49,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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` flags.LogLevelNoFatalFlags } @@ -65,6 +66,7 @@ func (cmd *AddAgentNodeExporterCommand) RunCmd() (commands.Result, error) { ExposeExporter: cmd.ExposeExporter, DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), + Timeout: cmd.Timeout, }, }, 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..b91ee091a5a 100644 --- a/admin/commands/inventory/add_agent_postgres_exporter.go +++ b/admin/commands/inventory/add_agent_postgres_exporter.go @@ -67,6 +67,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)"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` flags.LogLevelNoFatalFlags } @@ -118,6 +119,7 @@ func (cmd *AddAgentPostgresExporterCommand) RunCmd() (commands.Result, error) { TLSCert: tlsCert, TLSKey: tlsKey, LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), + Timeout: cmd.Timeout, }, }, 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..373d8cba4e5 100644 --- a/admin/commands/inventory/add_agent_proxysql_exporter.go +++ b/admin/commands/inventory/add_agent_proxysql_exporter.go @@ -60,6 +60,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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` flags.LogLevelFatalFlags } @@ -83,6 +84,7 @@ func (cmd *AddAgentProxysqlExporterCommand) RunCmd() (commands.Result, error) { ExposeExporter: cmd.ExposeExporter, DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + Timeout: cmd.Timeout, }, }, 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..65033b31c23 100644 --- a/admin/commands/inventory/add_agent_rds_exporter.go +++ b/admin/commands/inventory/add_agent_rds_exporter.go @@ -56,6 +56,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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` flags.LogLevelFatalFlags } @@ -76,6 +77,7 @@ func (cmd *AddAgentRDSExporterCommand) RunCmd() (commands.Result, error) { DisableEnhancedMetrics: cmd.DisableEnhancedMetrics, PushMetrics: cmd.PushMetrics, LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + Timeout: cmd.Timeout, }, }, 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..cbdac6d1fc3 100644 --- a/admin/commands/inventory/add_agent_valkey_exporter.go +++ b/admin/commands/inventory/add_agent_valkey_exporter.go @@ -68,6 +68,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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` flags.LogLevelNoFatalFlags } @@ -116,6 +117,7 @@ func (cmd *AddAgentValkeyExporterCommand) RunCmd() (commands.Result, error) { ExposeExporter: cmd.ExposeExporter, DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), LogLevel: convertLogLevelPtr(&cmd.LogLevel), + Timeout: cmd.Timeout, }, }, 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..d886b9c6d86 100644 --- a/admin/commands/inventory/change_agent_azure_database_exporter.go +++ b/admin/commands/inventory/change_agent_azure_database_exporter.go @@ -77,7 +77,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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -99,6 +100,7 @@ func (cmd *ChangeAgentAzureDatabaseExporterCommand) RunCmd() (commands.Result, e AzureResourceGroup: cmd.AzureResourceGroup, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), + Timeout: cmd.Timeout, } 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..f6f2398fd10 100644 --- a/admin/commands/inventory/change_agent_external_exporter.go +++ b/admin/commands/inventory/change_agent_external_exporter.go @@ -69,6 +69,7 @@ type ChangeAgentExternalExporterCommand struct { MetricsScheme *string `help:"Metrics scheme (http or https)"` MetricsPath *string `help:"Metrics path"` PushMetrics *bool `help:"Enable push metrics with vmagent"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -88,6 +89,7 @@ func (cmd *ChangeAgentExternalExporterCommand) RunCmd() (commands.Result, error) Scheme: cmd.MetricsScheme, MetricsPath: cmd.MetricsPath, EnablePushMetrics: cmd.PushMetrics, + Timeout: cmd.Timeout, } 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..6ca7fc3e212 100644 --- a/admin/commands/inventory/change_agent_mongodb_exporter.go +++ b/admin/commands/inventory/change_agent_mongodb_exporter.go @@ -92,6 +92,7 @@ type ChangeAgentMongodbExporterCommand struct { 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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -152,6 +153,7 @@ func (cmd *ChangeAgentMongodbExporterCommand) RunCmd() (commands.Result, error) ExposeExporter: cmd.ExposeExporter, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), + Timeout: cmd.Timeout, } 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..ff0f2325b43 100644 --- a/admin/commands/inventory/change_agent_mysqld_exporter.go +++ b/admin/commands/inventory/change_agent_mysqld_exporter.go @@ -86,6 +86,7 @@ type ChangeAgentMysqldExporterCommand struct { 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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -143,6 +144,7 @@ func (cmd *ChangeAgentMysqldExporterCommand) RunCmd() (commands.Result, error) { ExposeExporter: cmd.ExposeExporter, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), + Timeout: cmd.Timeout, } 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..e88fe9f2727 100644 --- a/admin/commands/inventory/change_agent_node_exporter.go +++ b/admin/commands/inventory/change_agent_node_exporter.go @@ -71,6 +71,7 @@ type ChangeAgentNodeExporterCommand struct { 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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -89,6 +90,7 @@ func (cmd *ChangeAgentNodeExporterCommand) RunCmd() (commands.Result, error) { DisableCollectors: cmd.DisableCollectors, ExposeExporter: cmd.ExposeExporter, LogLevel: convertLogLevelPtr(cmd.LogLevel), + Timeout: cmd.Timeout, } 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..69123e81f54 100644 --- a/admin/commands/inventory/change_agent_postgres_exporter.go +++ b/admin/commands/inventory/change_agent_postgres_exporter.go @@ -87,6 +87,7 @@ type ChangeAgentPostgresExporterCommand struct { 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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -145,6 +146,7 @@ func (cmd *ChangeAgentPostgresExporterCommand) RunCmd() (commands.Result, error) AutoDiscoveryLimit: cmd.AutoDiscoveryLimit, MaxExporterConnections: cmd.MaxExporterConnections, LogLevel: convertLogLevelPtr(cmd.LogLevel), + Timeout: cmd.Timeout, } 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..0a44b667b72 100644 --- a/admin/commands/inventory/change_agent_proxysql_exporter.go +++ b/admin/commands/inventory/change_agent_proxysql_exporter.go @@ -82,6 +82,7 @@ type ChangeAgentProxysqlExporterCommand struct { 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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -105,6 +106,7 @@ func (cmd *ChangeAgentProxysqlExporterCommand) RunCmd() (commands.Result, error) ExposeExporter: cmd.ExposeExporter, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), + Timeout: cmd.Timeout, } 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..08ed72b2bf3 100644 --- a/admin/commands/inventory/change_agent_rds_exporter.go +++ b/admin/commands/inventory/change_agent_rds_exporter.go @@ -78,7 +78,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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -99,6 +100,7 @@ func (cmd *ChangeAgentRDSExporterCommand) RunCmd() (commands.Result, error) { DisableEnhancedMetrics: cmd.DisableEnhancedMetrics, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), + Timeout: cmd.Timeout, } 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..cb2a3e46bab 100644 --- a/admin/commands/inventory/change_agent_valkey_exporter.go +++ b/admin/commands/inventory/change_agent_valkey_exporter.go @@ -84,6 +84,7 @@ type ChangeAgentValkeyExporterCommand struct { 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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` // Custom labels CustomLabels *map[string]string `mapsep:"," help:"Custom user-assigned labels"` @@ -137,6 +138,7 @@ func (cmd *ChangeAgentValkeyExporterCommand) RunCmd() (commands.Result, error) { ExposeExporter: cmd.ExposeExporter, EnablePushMetrics: cmd.PushMetrics, LogLevel: convertLogLevelPtr(cmd.LogLevel), + Timeout: cmd.Timeout, } if customLabels != nil { diff --git a/admin/commands/management/add_external.go b/admin/commands/management/add_external.go index acc5aed1c05..ebf814dfba0 100644 --- a/admin/commands/management/add_external.go +++ b/admin/commands/management/add_external.go @@ -70,6 +70,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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` flags.MetricsModeFlags } @@ -140,6 +141,7 @@ func (cmd *AddExternalCommand) RunCmd() (commands.Result, error) { Group: cmd.Group, SkipConnectionCheck: cmd.SkipConnectionCheck, TLSSkipVerify: cmd.TLSSkipVerify, + Timeout: cmd.Timeout, }, }, Context: commands.Ctx, diff --git a/admin/commands/management/add_mongodb.go b/admin/commands/management/add_mongodb.go index 65e0d5d2dbc..5990e4dd2f2 100644 --- a/admin/commands/management/add_mongodb.go +++ b/admin/commands/management/add_mongodb.go @@ -83,6 +83,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'"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` AddCommonFlags flags.MetricsModeFlags @@ -203,6 +204,7 @@ func (cmd *AddMongoDBCommand) RunCmd() (commands.Result, error) { StatsCollections: commands.ParseDisableCollectors(cmd.StatsCollections), CollectionsLimit: cmd.CollectionsLimit, LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + Timeout: cmd.Timeout, }, }, Context: commands.Ctx, diff --git a/admin/commands/management/add_mysql.go b/admin/commands/management/add_mysql.go index 20a71531320..0438486cb1c 100644 --- a/admin/commands/management/add_mysql.go +++ b/admin/commands/management/add_mysql.go @@ -120,6 +120,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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` AddCommonFlags flags.MetricsModeFlags @@ -242,6 +243,7 @@ func (cmd *AddMySQLCommand) RunCmd() (commands.Result, error) { MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), + Timeout: cmd.Timeout, }, }, Context: commands.Ctx, diff --git a/admin/commands/management/add_postgresql.go b/admin/commands/management/add_postgresql.go index 8ea4b763e18..811ff08ef56 100644 --- a/admin/commands/management/add_postgresql.go +++ b/admin/commands/management/add_postgresql.go @@ -76,6 +76,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)"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` AddCommonFlags flags.MetricsModeFlags @@ -213,6 +214,7 @@ func (cmd *AddPostgreSQLCommand) RunCmd() (commands.Result, error) { AutoDiscoveryLimit: cmd.AutoDiscoveryLimit, MaxExporterConnections: cmd.MaxExporterConnections, LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), + Timeout: cmd.Timeout, }, }, Context: commands.Ctx, diff --git a/admin/commands/management/add_proxysql.go b/admin/commands/management/add_proxysql.go index 4401f47345d..7d9090b47d0 100644 --- a/admin/commands/management/add_proxysql.go +++ b/admin/commands/management/add_proxysql.go @@ -60,6 +60,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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` AddCommonFlags flags.MetricsModeFlags @@ -152,6 +153,7 @@ func (cmd *AddProxySQLCommand) RunCmd() (commands.Result, error) { MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + Timeout: cmd.Timeout, }, }, Context: commands.Ctx, diff --git a/admin/commands/management/add_valkey.go b/admin/commands/management/add_valkey.go index 43e8df4b8bd..a39d1df8be4 100644 --- a/admin/commands/management/add_valkey.go +++ b/admin/commands/management/add_valkey.go @@ -63,6 +63,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"` + Timeout string `help:"Connection timeout to use for exporter (e.g. 1s, 500ms)"` AddCommonFlags flags.MetricsModeFlags @@ -159,6 +160,7 @@ func (cmd *AddValkeyCommand) RunCmd() (commands.Result, error) { TLSKey: tlsKey, MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), + Timeout: cmd.Timeout, }, }, Context: commands.Ctx, diff --git a/api/inventory/v1/agents.pb.go b/api/inventory/v1/agents.pb.go index e619a04e91a..62a4d9c8543 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). + Timeout *durationpb.Duration `protobuf:"bytes,16,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,28,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,30,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,28,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,26,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,25,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,27,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + return nil +} + // ExternalExporter runs on any Node type, including Remote Node. type ExternalExporter struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -2944,7 +3007,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"` + Status AgentStatus `protobuf:"varint,14,opt,name=status,proto3,enum=inventory.v1.AgentStatus" json:"status,omitempty"` + // Connection timeout for exporter (if set). + Timeout *durationpb.Duration `protobuf:"bytes,15,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3077,6 +3142,13 @@ func (x *ExternalExporter) GetStatus() AgentStatus { return AgentStatus_AGENT_STATUS_UNSPECIFIED } +func (x *ExternalExporter) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,16,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,7,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,8,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,19,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,18,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,23,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,22,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,19,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,19,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,14,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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). + Timeout *durationpb.Duration `protobuf:"bytes,13,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + return nil +} + type AddQANMySQLPerfSchemaAgentParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The pmm-agent identifier which runs this instance. @@ -9270,7 +9441,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"` + 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). + Timeout *durationpb.Duration `protobuf:"bytes,11,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9375,6 +9548,13 @@ func (x *AddRDSExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } +func (x *AddRDSExporterParams) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + return nil +} + type ChangeRDSExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -9394,7 +9574,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"` + 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). + Timeout *durationpb.Duration `protobuf:"bytes,10,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9492,6 +9674,13 @@ func (x *ChangeRDSExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } +func (x *ChangeRDSExporterParams) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + return nil +} + type AddExternalExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The node identifier where this instance is run. @@ -9514,6 +9703,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). + Timeout *durationpb.Duration `protobuf:"bytes,13,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9618,6 +9809,13 @@ func (x *AddExternalExporterParams) GetTlsSkipVerify() bool { return false } +func (x *AddExternalExporterParams) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + return nil +} + type ChangeExternalExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -9635,7 +9833,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"` + ListenPort *uint32 `protobuf:"varint,8,opt,name=listen_port,json=listenPort,proto3,oneof" json:"listen_port,omitempty"` + // Connection timeout for exporter (if set). + Timeout *durationpb.Duration `protobuf:"bytes,9,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9726,6 +9926,13 @@ func (x *ChangeExternalExporterParams) GetListenPort() uint32 { return 0 } +func (x *ChangeExternalExporterParams) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + return nil +} + type AddAzureDatabaseExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // The pmm-agent identifier which runs this instance. @@ -9751,7 +9958,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"` + 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). + Timeout *durationpb.Duration `protobuf:"bytes,13,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9870,6 +10079,13 @@ func (x *AddAzureDatabaseExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } +func (x *AddAzureDatabaseExporterParams) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + return nil +} + type ChangeAzureDatabaseExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -9891,7 +10107,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"` + 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). + Timeout *durationpb.Duration `protobuf:"bytes,12,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9996,6 +10214,13 @@ func (x *ChangeAzureDatabaseExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } +func (x *ChangeAzureDatabaseExporterParams) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + return nil +} + type ChangeNomadAgentParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -10074,7 +10299,9 @@ 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"` + 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). + Timeout *durationpb.Duration `protobuf:"bytes,17,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -10221,6 +10448,13 @@ func (x *AddValkeyExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } +func (x *AddValkeyExporterParams) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + return nil +} + type ChangeValkeyExporterParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Enable this Agent. Agents are enabled by default when they get added. @@ -10252,7 +10486,9 @@ 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"` + 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). + Timeout *durationpb.Duration `protobuf:"bytes,16,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -10392,6 +10628,13 @@ func (x *ChangeValkeyExporterParams) GetLogLevel() LogLevel { return LogLevel_LOG_LEVEL_UNSPECIFIED } +func (x *ChangeValkeyExporterParams) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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\"\xbe\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\x123\n" + + "\atimeout\x18\x10 \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\xbf\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\x123\n" + + "\atimeout\x18\x1c \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\x85\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\x123\n" + + "\atimeout\x18\x1e \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\xa7\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\x123\n" + + "\atimeout\x18\x1c \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\xbb\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\x123\n" + + "\atimeout\x18\x1a \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\x82\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\x123\n" + + "\atimeout\x18\x19 \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\xc5\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\x123\n" + + "\atimeout\x18\x1b \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\xda\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\x123\n" + + "\atimeout\x18\x0f \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\x95\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\x123\n" + + "\atimeout\x18\x10 \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\xc4\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\x123\n" + + "\atimeout\x18\a \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\x99\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\x123\n" + + "\atimeout\x18\b \x01(\v2\x19.google.protobuf.DurationR\atimeoutB\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\"\xfa\a\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\x123\n" + + "\atimeout\x18\x13 \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\xce\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\x123\n" + + "\atimeout\x18\x12 \x01(\v2\x19.google.protobuf.DurationR\atimeoutB\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\"\x90\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\x123\n" + + "\atimeout\x18\x17 \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\xd2\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\x123\n" + + "\atimeout\x18\x16 \x01(\v2\x19.google.protobuf.DurationR\atimeoutB\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\"\x81\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\x123\n" + + "\atimeout\x18\x13 \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\x95\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\x123\n" + + "\atimeout\x18\x13 \x01(\v2\x19.google.protobuf.DurationR\atimeoutB\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\"\xca\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\x123\n" + + "\atimeout\x18\x0e \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\x98\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\x123\n" + + "\atimeout\x18\r \x01(\v2\x19.google.protobuf.DurationR\atimeoutB\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\"\xfa\x04\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\x123\n" + + "\atimeout\x18\v \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\xd2\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\x123\n" + + "\atimeout\x18\n" + + " \x01(\v2\x19.google.protobuf.DurationR\atimeoutB\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\"\xac\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\x123\n" + + "\atimeout\x18\r \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\xa9\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\x123\n" + + "\atimeout\x18\t \x01(\v2\x19.google.protobuf.DurationR\atimeoutB\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\"\x84\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\x123\n" + + "\atimeout\x18\r \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\xa3\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\x123\n" + + "\atimeout\x18\f \x01(\v2\x19.google.protobuf.DurationR\atimeoutB\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\"\x92\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\x123\n" + + "\atimeout\x18\x11 \x01(\v2\x19.google.protobuf.DurationR\atimeout\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\"\x9d\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\x123\n" + + "\atimeout\x18\x10 \x01(\v2\x19.google.protobuf.DurationR\atimeoutB\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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.timeout:type_name -> google.protobuf.Duration + 104, // 257: inventory.v1.AddExternalExporterParams.custom_labels:type_name -> inventory.v1.AddExternalExporterParams.CustomLabelsEntry + 111, // 258: inventory.v1.AddExternalExporterParams.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.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.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.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.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.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..76a04c3f460 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.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return NodeExporterValidationError{ + field: "Timeout", + 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.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MySQLdExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MySQLdExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MySQLdExporterValidationError{ + field: "Timeout", + 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.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MongoDBExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MongoDBExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MongoDBExporterValidationError{ + field: "Timeout", + 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.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, PostgresExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, PostgresExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PostgresExporterValidationError{ + field: "Timeout", + 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.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ProxySQLExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ProxySQLExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ProxySQLExporterValidationError{ + field: "Timeout", + 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.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ValkeyExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ValkeyExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ValkeyExporterValidationError{ + field: "Timeout", + 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.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RDSExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RDSExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RDSExporterValidationError{ + field: "Timeout", + 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.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ExternalExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ExternalExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExternalExporterValidationError{ + field: "Timeout", + 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.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AzureDatabaseExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AzureDatabaseExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AzureDatabaseExporterValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AzureDatabaseExporterMultiError(errors) } @@ -8474,6 +8735,35 @@ func (m *AddNodeExporterParams) validate(all bool) error { // no validation rules for ExposeExporter + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddNodeExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddNodeExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddNodeExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddNodeExporterParamsMultiError(errors) } @@ -8605,25 +8895,54 @@ func (m *ChangeNodeExporterParams) validate(all bool) error { } } - 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", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ChangeNodeExporterParamsValidationError{ - field: "CustomLabels", + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangeNodeExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangeNodeExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangeNodeExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: 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", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangeNodeExporterParamsValidationError{ + field: "CustomLabels", reason: "embedded message failed validation", cause: err, }) @@ -8815,6 +9134,35 @@ func (m *AddMySQLdExporterParams) validate(all bool) error { // no validation rules for ExtraDsnParams + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddMySQLdExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddMySQLdExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddMySQLdExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddMySQLdExporterParamsMultiError(errors) } @@ -8946,6 +9294,35 @@ func (m *ChangeMySQLdExporterParams) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangeMySQLdExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangeMySQLdExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangeMySQLdExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -9191,6 +9568,35 @@ func (m *AddMongoDBExporterParams) validate(all bool) error { // no validation rules for EnableAllCollectors + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddMongoDBExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddMongoDBExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddMongoDBExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddMongoDBExporterParamsMultiError(errors) } @@ -9322,6 +9728,35 @@ func (m *ChangeMongoDBExporterParams) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangeMongoDBExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangeMongoDBExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangeMongoDBExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -9585,6 +10020,35 @@ func (m *AddPostgresExporterParams) validate(all bool) error { // no validation rules for MaxExporterConnections + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddPostgresExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddPostgresExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddPostgresExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddPostgresExporterParamsMultiError(errors) } @@ -9716,6 +10180,35 @@ func (m *ChangePostgresExporterParams) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangePostgresExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangePostgresExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangePostgresExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -9961,6 +10454,35 @@ func (m *AddProxySQLExporterParams) validate(all bool) error { // no validation rules for ExposeExporter + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddProxySQLExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddProxySQLExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddProxySQLExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddProxySQLExporterParamsMultiError(errors) } @@ -10092,6 +10614,35 @@ func (m *ChangeProxySQLExporterParams) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangeProxySQLExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangeProxySQLExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangeProxySQLExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -12570,6 +13121,35 @@ func (m *AddRDSExporterParams) validate(all bool) error { // no validation rules for LogLevel + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddRDSExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddRDSExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddRDSExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddRDSExporterParamsMultiError(errors) } @@ -12701,6 +13281,35 @@ func (m *ChangeRDSExporterParams) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangeRDSExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangeRDSExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangeRDSExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -12900,6 +13509,35 @@ func (m *AddExternalExporterParams) validate(all bool) error { // no validation rules for TlsSkipVerify + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddExternalExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddExternalExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddExternalExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddExternalExporterParamsMultiError(errors) } @@ -13031,6 +13669,35 @@ func (m *ChangeExternalExporterParams) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangeExternalExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangeExternalExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangeExternalExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -13240,6 +13907,35 @@ func (m *AddAzureDatabaseExporterParams) validate(all bool) error { // no validation rules for LogLevel + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddAzureDatabaseExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddAzureDatabaseExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddAzureDatabaseExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddAzureDatabaseExporterParamsMultiError(errors) } @@ -13373,6 +14069,35 @@ func (m *ChangeAzureDatabaseExporterParams) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangeAzureDatabaseExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangeAzureDatabaseExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangeAzureDatabaseExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if m.Enable != nil { // no validation rules for Enable } @@ -13704,6 +14429,35 @@ func (m *AddValkeyExporterParams) validate(all bool) error { // no validation rules for LogLevel + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddValkeyExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddValkeyExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddValkeyExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddValkeyExporterParamsMultiError(errors) } @@ -13843,6 +14597,35 @@ func (m *ChangeValkeyExporterParams) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangeValkeyExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangeValkeyExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangeValkeyExporterParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: 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..ccec7c27e48 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 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 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 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 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 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 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 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 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 timeout = 16; } // ChangeCommonAgentParams contains parameters that can be changed for all Agents. @@ -963,6 +981,8 @@ 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 timeout = 7; } message ChangeNodeExporterParams { @@ -980,6 +1000,8 @@ 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 timeout = 8; } // Add/Change MySQLdExporter @@ -1023,6 +1045,8 @@ 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 timeout = 19; } message ChangeMySQLdExporterParams { @@ -1060,6 +1084,8 @@ 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 timeout = 18; } // Add/Change MongoDBExporter @@ -1113,6 +1139,8 @@ 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 timeout = 23; } message ChangeMongoDBExporterParams { @@ -1158,6 +1186,8 @@ 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 timeout = 22; } // Add/Change PostgresExporter @@ -1199,6 +1229,8 @@ 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 timeout = 19; } message ChangePostgresExporterParams { @@ -1238,6 +1270,8 @@ 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 timeout = 19; } // Add/Change ProxySQLExporter @@ -1269,6 +1303,8 @@ 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 timeout = 14; } message ChangeProxySQLExporterParams { @@ -1296,6 +1332,8 @@ 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 timeout = 13; } // Add/Change QANMySQLPerfSchemaAgent @@ -1742,6 +1780,8 @@ message AddRDSExporterParams { bool push_metrics = 9; // Log level for exporter. LogLevel log_level = 10; + // Connection timeout for exporter (if set). + google.protobuf.Duration timeout = 11; } message ChangeRDSExporterParams { @@ -1763,6 +1803,8 @@ 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 timeout = 10; } // Add/Change ExternalExporter @@ -1791,6 +1833,8 @@ 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 timeout = 13; } message ChangeExternalExporterParams { @@ -1810,6 +1854,8 @@ 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 timeout = 9; } // Add/Change AzureDatabaseExporter @@ -1839,6 +1885,8 @@ message AddAzureDatabaseExporterParams { bool push_metrics = 11; // Log level for exporter. LogLevel log_level = 12; + // Connection timeout for exporter (if set). + google.protobuf.Duration timeout = 13; } message ChangeAzureDatabaseExporterParams { @@ -1862,6 +1910,8 @@ 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 timeout = 12; } message ChangeNomadAgentParams { @@ -1904,6 +1954,8 @@ message AddValkeyExporterParams { bool expose_exporter = 15; // Log level for exporter. LogLevel log_level = 16; + // Connection timeout for exporter (if set). + google.protobuf.Duration timeout = 17; } message ChangeValkeyExporterParams { @@ -1937,6 +1989,8 @@ 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 timeout = 16; } // 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..2b68f64f308 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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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..40ff2f42289 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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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..084ef296664 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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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..3f5ee0168db 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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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..d09b1a60cdd 100644 --- a/api/inventory/v1/json/v1.json +++ b/api/inventory/v1/json/v1.json @@ -273,6 +273,11 @@ } }, "x-order": 11 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } } }, @@ -448,6 +453,11 @@ "type": "string" }, "x-order": 22 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } } }, @@ -610,6 +620,11 @@ "type": "string" }, "x-order": 19 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } } }, @@ -757,6 +772,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } } }, @@ -892,6 +912,11 @@ } }, "x-order": 15 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } } }, @@ -1661,6 +1686,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } } }, @@ -1789,6 +1819,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } } }, @@ -1906,6 +1941,11 @@ } }, "x-order": 12 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } } }, @@ -2077,6 +2117,11 @@ } }, "x-order": 14 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 15 @@ -3902,6 +3992,11 @@ } }, "x-order": 11 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 3 @@ -4377,6 +4482,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 4 @@ -4509,6 +4619,11 @@ } }, "x-order": 15 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 6 @@ -4743,6 +4863,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 7 @@ -4857,6 +4982,11 @@ } }, "x-order": 12 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 8 @@ -5613,6 +5743,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -5957,6 +6092,11 @@ } }, "x-order": 11 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 4 @@ -6432,6 +6582,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 5 @@ -6564,6 +6719,11 @@ } }, "x-order": 15 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 13 @@ -7437,6 +7602,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 14 @@ -7551,6 +7721,11 @@ } }, "x-order": 12 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 15 @@ -7716,6 +7891,11 @@ } }, "x-order": 14 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -9989,6 +10214,11 @@ } }, "x-order": 11 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 2 @@ -10464,6 +10704,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 3 @@ -10596,6 +10841,11 @@ } }, "x-order": 15 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 5 @@ -10830,6 +11085,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 6 @@ -10944,6 +11204,11 @@ } }, "x-order": 12 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 7 @@ -11748,6 +12013,11 @@ } }, "x-order": 14 + }, + "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..475c3c46522 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,7 +172,9 @@ 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"` + RtaOptions *v1.RTAOptions `protobuf:"bytes,42,opt,name=rta_options,json=rtaOptions,proto3" json:"rta_options,omitempty"` + // Connection timeout for exporter (if set). + Timeout *durationpb.Duration `protobuf:"bytes,43,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -500,6 +503,13 @@ func (x *UniversalAgent) GetRtaOptions() *v1.RTAOptions { return nil } +func (x *UniversalAgent) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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\"\xff\x18\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\x123\n" + + "\atimeout\x18+ \x01(\v2\x19.google.protobuf.DurationR\atimeout\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.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..6e253a9b3eb 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.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UniversalAgentValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UniversalAgentValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UniversalAgentValidationError{ + field: "Timeout", + 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..862c3d46d46 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 timeout = 43; } message ListAgentsRequest { diff --git a/api/management/v1/azure.pb.go b/api/management/v1/azure.pb.go index fdd2f154751..3aec4a299f3 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,7 +376,9 @@ 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"` + Type DiscoverAzureDatabaseType `protobuf:"varint,25,opt,name=type,proto3,enum=management.v1.DiscoverAzureDatabaseType" json:"type,omitempty"` + // Connection timeout for exporter (if set). + Timeout *durationpb.Duration `protobuf:"bytes,26,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -585,6 +588,13 @@ func (x *AddAzureDatabaseRequest) GetType() DiscoverAzureDatabaseType { return DiscoverAzureDatabaseType_DISCOVER_AZURE_DATABASE_TYPE_UNSPECIFIED } +func (x *AddAzureDatabaseRequest) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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\"\xcb\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\x123\n" + + "\atimeout\x18\x1a \x01(\v2\x19.google.protobuf.DurationR\atimeout\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.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..ec3d941aa4a 100644 --- a/api/management/v1/azure.pb.validate.go +++ b/api/management/v1/azure.pb.validate.go @@ -604,6 +604,35 @@ func (m *AddAzureDatabaseRequest) validate(all bool) error { // no validation rules for Type + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddAzureDatabaseRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddAzureDatabaseRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddAzureDatabaseRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddAzureDatabaseRequestMultiError(errors) } diff --git a/api/management/v1/azure.proto b/api/management/v1/azure.proto index b99503aa2ec..206c3678772 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,8 @@ 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 timeout = 26; } message AddAzureDatabaseResponse {} diff --git a/api/management/v1/external.pb.go b/api/management/v1/external.pb.go index 1f2612371ce..b394378f9c9 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,6 +77,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). + Timeout *durationpb.Duration `protobuf:"bytes,20,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -243,6 +246,13 @@ func (x *AddExternalServiceParams) GetTlsSkipVerify() bool { return false } +func (x *AddExternalServiceParams) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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\"\x83\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\x123\n" + + "\atimeout\x18\x14 \x01(\v2\x19.google.protobuf.DurationR\atimeout\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.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..1743546800d 100644 --- a/api/management/v1/external.pb.validate.go +++ b/api/management/v1/external.pb.validate.go @@ -140,6 +140,35 @@ func (m *AddExternalServiceParams) validate(all bool) error { // no validation rules for TlsSkipVerify + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddExternalServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddExternalServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddExternalServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddExternalServiceParamsMultiError(errors) } diff --git a/api/management/v1/external.proto b/api/management/v1/external.proto index 7030f0364ee..902b87a1277 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,8 @@ 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 timeout = 20; } 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..2f6175e6766 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). + Timeout string `json:"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..81f10444c1a 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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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). + Timeout string `json:"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..c96178cd20e 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). + Timeout string `json:"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..a5b1ac036dc 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). + Timeout string `json:"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..fc4c0f3a894 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). + Timeout string `json:"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..9aabee29800 100644 --- a/api/management/v1/json/v1.json +++ b/api/management/v1/json/v1.json @@ -385,6 +385,11 @@ } }, "x-order": 41 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 17 } } } @@ -1939,6 +1949,11 @@ } }, "x-order": 41 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 42 } } }, @@ -2276,6 +2291,11 @@ "type": "string" }, "x-order": 32 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 1 @@ -5017,6 +5077,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 1 @@ -5425,6 +5490,11 @@ } }, "x-order": 15 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 1 @@ -5942,6 +6022,11 @@ } }, "x-order": 14 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 3 @@ -6534,6 +6624,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 6 @@ -6820,6 +6915,11 @@ } }, "x-order": 14 + }, + "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 + }, + "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..1e68f07e567 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). + Timeout *durationpb.Duration `protobuf:"bytes,38,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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\"\xa2\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\x123\n" + + "\atimeout\x18& \x01(\v2\x19.google.protobuf.DurationR\atimeout\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.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..ede78fe3b6e 100644 --- a/api/management/v1/mongodb.pb.validate.go +++ b/api/management/v1/mongodb.pb.validate.go @@ -170,6 +170,35 @@ func (m *AddMongoDBServiceParams) validate(all bool) error { // no validation rules for RtaMongodbAgent + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddMongoDBServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddMongoDBServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddMongoDBServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddMongoDBServiceParamsMultiError(errors) } diff --git a/api/management/v1/mongodb.proto b/api/management/v1/mongodb.proto index e9350342675..f34d8eff1a4 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,8 @@ 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 timeout = 38; } message MongoDBServiceResult { diff --git a/api/management/v1/mysql.pb.go b/api/management/v1/mysql.pb.go index 880618f4403..b8ad49893bb 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). + Timeout *durationpb.Duration `protobuf:"bytes,34,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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\"\xdb\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\x123\n" + + "\atimeout\x18\" \x01(\v2\x19.google.protobuf.DurationR\atimeout\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.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..e0f5a3e5400 100644 --- a/api/management/v1/mysql.pb.validate.go +++ b/api/management/v1/mysql.pb.validate.go @@ -179,6 +179,35 @@ func (m *AddMySQLServiceParams) validate(all bool) error { // no validation rules for ExtraDsnParams + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddMySQLServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddMySQLServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddMySQLServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddMySQLServiceParamsMultiError(errors) } diff --git a/api/management/v1/mysql.proto b/api/management/v1/mysql.proto index 918e6606df3..347734250ef 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,8 @@ 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 timeout = 34; } message MySQLServiceResult { diff --git a/api/management/v1/node.pb.go b/api/management/v1/node.pb.go index 8915b579dfd..4803907baa1 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,7 +248,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"` + InstanceId string `protobuf:"bytes,17,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // Connection timeout for exporter (if set). + Timeout *durationpb.Duration `protobuf:"bytes,18,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -401,6 +404,13 @@ func (x *RegisterNodeRequest) GetInstanceId() string { return "" } +func (x *RegisterNodeRequest) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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\"\xa2\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\x123\n" + + "\atimeout\x18\x12 \x01(\v2\x19.google.protobuf.DurationR\atimeout\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.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..73df91fe2db 100644 --- a/api/management/v1/node.pb.validate.go +++ b/api/management/v1/node.pb.validate.go @@ -231,6 +231,35 @@ func (m *RegisterNodeRequest) validate(all bool) error { // no validation rules for InstanceId + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RegisterNodeRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RegisterNodeRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RegisterNodeRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return RegisterNodeRequestMultiError(errors) } diff --git a/api/management/v1/node.proto b/api/management/v1/node.proto index 74b16d47f3a..7a03718cb4b 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,8 @@ message RegisterNodeRequest { bool expose_exporter = 16; // AWS instance ID. string instance_id = 17; + // Connection timeout for exporter (if set). + google.protobuf.Duration timeout = 18; } message RegisterNodeResponse { diff --git a/api/management/v1/postgresql.pb.go b/api/management/v1/postgresql.pb.go index 20b9fe29eaf..4deea0acc64 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). + Timeout *durationpb.Duration `protobuf:"bytes,34,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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\"\x8c\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\x123\n" + + "\atimeout\x18\" \x01(\v2\x19.google.protobuf.DurationR\atimeout\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.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..75a44833c13 100644 --- a/api/management/v1/postgresql.pb.validate.go +++ b/api/management/v1/postgresql.pb.validate.go @@ -179,6 +179,35 @@ func (m *AddPostgreSQLServiceParams) validate(all bool) error { // no validation rules for MaxExporterConnections + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddPostgreSQLServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddPostgreSQLServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddPostgreSQLServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddPostgreSQLServiceParamsMultiError(errors) } diff --git a/api/management/v1/postgresql.proto b/api/management/v1/postgresql.proto index c81d9966800..32e1919fb9f 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,8 @@ 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 timeout = 34; } message PostgreSQLServiceResult { diff --git a/api/management/v1/proxysql.pb.go b/api/management/v1/proxysql.pb.go index df8c4011336..25c7f3b658a 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). + Timeout *durationpb.Duration `protobuf:"bytes,24,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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\"\x83\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\x123\n" + + "\atimeout\x18\x18 \x01(\v2\x19.google.protobuf.DurationR\atimeout\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.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..6bf0f7fa352 100644 --- a/api/management/v1/proxysql.pb.validate.go +++ b/api/management/v1/proxysql.pb.validate.go @@ -157,6 +157,35 @@ func (m *AddProxySQLServiceParams) validate(all bool) error { // no validation rules for ExposeExporter + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddProxySQLServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddProxySQLServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddProxySQLServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddProxySQLServiceParamsMultiError(errors) } diff --git a/api/management/v1/proxysql.proto b/api/management/v1/proxysql.proto index 71805ec03c3..40b729bcc10 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,8 @@ 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 timeout = 24; } message ProxySQLServiceResult { diff --git a/api/management/v1/rds.pb.go b/api/management/v1/rds.pb.go index 6f8449b00ab..2b67e345a95 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). + Timeout *durationpb.Duration `protobuf:"bytes,35,opt,name=timeout,proto3" json:"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) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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\"\xd3\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\x123\n" + + "\atimeout\x18# \x01(\v2\x19.google.protobuf.DurationR\atimeout\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.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..9d830b574a9 100644 --- a/api/management/v1/rds.pb.validate.go +++ b/api/management/v1/rds.pb.validate.go @@ -530,6 +530,35 @@ func (m *AddRDSServiceParams) validate(all bool) error { // no validation rules for MaxPostgresqlExporterConnections + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddRDSServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddRDSServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddRDSServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddRDSServiceParamsMultiError(errors) } diff --git a/api/management/v1/rds.proto b/api/management/v1/rds.proto index 2d24e545fb5..50b77267b90 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,8 @@ 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 timeout = 35; } message RDSServiceResult { diff --git a/api/management/v1/valkey.pb.go b/api/management/v1/valkey.pb.go index 37723eea5ec..1f474fd9ba2 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,6 +84,8 @@ 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"` + // Connection timeout for exporter (if set). + Timeout *durationpb.Duration `protobuf:"bytes,25,opt,name=timeout,proto3" json:"timeout,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -285,6 +288,13 @@ func (x *AddValkeyServiceParams) GetAgentPassword() string { return "" } +func (x *AddValkeyServiceParams) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + 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\"\xaa\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\x123\n" + + "\atimeout\x18\x19 \x01(\v2\x19.google.protobuf.DurationR\atimeout\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.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..5643ef6d73d 100644 --- a/api/management/v1/valkey.pb.validate.go +++ b/api/management/v1/valkey.pb.validate.go @@ -176,6 +176,35 @@ func (m *AddValkeyServiceParams) validate(all bool) error { // no validation rules for AgentPassword + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddValkeyServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddValkeyServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddValkeyServiceParamsValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return AddValkeyServiceParamsMultiError(errors) } diff --git a/api/management/v1/valkey.proto b/api/management/v1/valkey.proto index b51e1da3a45..7736e65dbcd 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,8 @@ 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 timeout = 25; } message ValkeyServiceResult { diff --git a/api/swagger/swagger-dev.json b/api/swagger/swagger-dev.json index 1ca1471e02b..a0bf585c201 100644 --- a/api/swagger/swagger-dev.json +++ b/api/swagger/swagger-dev.json @@ -5546,6 +5546,11 @@ } }, "x-order": 11 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } } }, @@ -5721,6 +5726,11 @@ "type": "string" }, "x-order": 22 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } } }, @@ -5883,6 +5893,11 @@ "type": "string" }, "x-order": 19 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } } }, @@ -6030,6 +6045,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } } }, @@ -6165,6 +6185,11 @@ } }, "x-order": 15 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } } }, @@ -6934,6 +6959,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } } }, @@ -7062,6 +7092,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } } }, @@ -7179,6 +7214,11 @@ } }, "x-order": 12 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } } }, @@ -7350,6 +7390,11 @@ } }, "x-order": 14 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 15 @@ -9175,6 +9265,11 @@ } }, "x-order": 11 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 3 @@ -9650,6 +9755,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 4 @@ -9782,6 +9892,11 @@ } }, "x-order": 15 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 6 @@ -10016,6 +10136,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 7 @@ -10130,6 +10255,11 @@ } }, "x-order": 12 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 8 @@ -10886,6 +11016,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -11230,6 +11365,11 @@ } }, "x-order": 11 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 4 @@ -11705,6 +11855,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 5 @@ -11837,6 +11992,11 @@ } }, "x-order": 15 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 13 @@ -12710,6 +12875,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 14 @@ -12824,6 +12994,11 @@ } }, "x-order": 12 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 15 @@ -12989,6 +13164,11 @@ } }, "x-order": 14 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -15262,6 +15487,11 @@ } }, "x-order": 11 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 2 @@ -15737,6 +15977,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 3 @@ -15869,6 +16114,11 @@ } }, "x-order": 15 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 5 @@ -16103,6 +16358,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 6 @@ -16217,6 +16477,11 @@ } }, "x-order": 12 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 7 @@ -17021,6 +17286,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -21606,6 +21876,11 @@ } }, "x-order": 41 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 17 } } } @@ -23160,6 +23440,11 @@ } }, "x-order": 41 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 42 } } }, @@ -23497,6 +23782,11 @@ "type": "string" }, "x-order": 32 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 1 @@ -26238,6 +26568,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 1 @@ -26646,6 +26981,11 @@ } }, "x-order": 15 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 1 @@ -27163,6 +27513,11 @@ } }, "x-order": 14 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 3 @@ -27755,6 +28115,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 6 @@ -28041,6 +28406,11 @@ } }, "x-order": 14 + }, + "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 + }, + "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..fc71f40412d 100644 --- a/api/swagger/swagger.json +++ b/api/swagger/swagger.json @@ -4588,6 +4588,11 @@ } }, "x-order": 11 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 12 } } }, @@ -4763,6 +4768,11 @@ "type": "string" }, "x-order": 22 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } } }, @@ -4925,6 +4935,11 @@ "type": "string" }, "x-order": 19 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } } }, @@ -5072,6 +5087,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } } }, @@ -5207,6 +5227,11 @@ } }, "x-order": 15 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } } }, @@ -5976,6 +6001,11 @@ "AGENT_STATUS_UNKNOWN" ], "x-order": 13 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } } }, @@ -6104,6 +6134,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } } }, @@ -6221,6 +6256,11 @@ } }, "x-order": 12 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } } }, @@ -6392,6 +6432,11 @@ } }, "x-order": 14 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 16 } }, "x-order": 15 @@ -8217,6 +8307,11 @@ } }, "x-order": 11 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 3 @@ -8692,6 +8797,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 4 @@ -8824,6 +8934,11 @@ } }, "x-order": 15 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 6 @@ -9058,6 +9178,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 7 @@ -9172,6 +9297,11 @@ } }, "x-order": 12 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 8 @@ -9928,6 +10058,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -10272,6 +10407,11 @@ } }, "x-order": 11 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 4 @@ -10747,6 +10897,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 5 @@ -10879,6 +11034,11 @@ } }, "x-order": 15 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 13 @@ -11752,6 +11917,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 14 @@ -11866,6 +12036,11 @@ } }, "x-order": 12 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 15 @@ -12031,6 +12206,11 @@ } }, "x-order": 14 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -14304,6 +14529,11 @@ } }, "x-order": 11 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 2 @@ -14779,6 +15019,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 3 @@ -14911,6 +15156,11 @@ } }, "x-order": 15 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 5 @@ -15145,6 +15400,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 6 @@ -15259,6 +15519,11 @@ } }, "x-order": 12 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 13 } }, "x-order": 7 @@ -16063,6 +16328,11 @@ } }, "x-order": 14 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 15 } }, "x-order": 15 @@ -20648,6 +20918,11 @@ } }, "x-order": 41 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 17 } } } @@ -22202,6 +22482,11 @@ } }, "x-order": 41 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 42 } } }, @@ -22539,6 +22824,11 @@ "type": "string" }, "x-order": 32 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 20 } }, "x-order": 1 @@ -25280,6 +25610,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 1 @@ -25688,6 +26023,11 @@ } }, "x-order": 15 + }, + "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 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 14 } }, "x-order": 1 @@ -26205,6 +26555,11 @@ } }, "x-order": 14 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 23 } }, "x-order": 3 @@ -26797,6 +27157,11 @@ } }, "x-order": 17 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 18 } }, "x-order": 6 @@ -27083,6 +27448,11 @@ } }, "x-order": 14 + }, + "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 + }, + "timeout": { + "description": "Connection timeout for exporter (if set).", + "type": "string", + "x-order": 25 } } } diff --git a/managed/models/agent_helpers.go b/managed/models/agent_helpers.go index 8796bfa0b34..63a02d4ef7c 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, + timeout time.Duration, ) (*Agent, error) { // TODO merge into CreateAgent @@ -691,6 +692,7 @@ func CreateNodeExporter(q *reform.Querier, ExposeExporter: exposeExporter, PushMetrics: pushMetrics, DisabledCollectors: disableCollectors, + Timeout: timeout, }, LogLevel: pointer.ToStringOrNil(logLevel), } @@ -719,6 +721,8 @@ type CreateExternalExporterParams struct { CustomLabels map[string]string PushMetrics bool TLSSkipVerify bool + // Timeout for exporter connection (nanoseconds). Optional. + Timeout 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, @@ -778,6 +783,7 @@ func CreateExternalExporter(q *reform.Querier, params *CreateExternalExporterPar PushMetrics: params.PushMetrics, MetricsPath: metricsPath, MetricsScheme: scheme, + Timeout: params.Timeout, }, TLSSkipVerify: params.TLSSkipVerify, } @@ -1025,6 +1031,7 @@ type ChangeExporterOptions struct { MetricsScheme *string MetricsPath *string MetricsResolutions *ChangeMetricsResolutionsParams + Timeout time.Duration } // ChangeQANOptions contains QANOptions fields that can be changed. @@ -1185,6 +1192,8 @@ func ChangeAgent(q *reform.Querier, agentID string, params *ChangeAgentParams) ( if params.ExporterOptions.MetricsPath != nil { row.ExporterOptions.MetricsPath = *params.ExporterOptions.MetricsPath } + + row.ExporterOptions.Timeout = params.ExporterOptions.Timeout } // Update database connection fields diff --git a/managed/models/agent_model.go b/managed/models/agent_model.go index 75840e8e8de..e1031316e70 100644 --- a/managed/models/agent_model.go +++ b/managed/models/agent_model.go @@ -51,11 +51,12 @@ 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" + effectiveDialTimeoutFallbackSec = 2 ) // Agent types (in the same order as in agents.proto). @@ -107,6 +108,8 @@ type ExporterOptions struct { MetricsResolutions *MetricsResolutions `json:"metrics_resolutions"` MetricsPath string `json:"metrics_path"` MetricsScheme string `json:"metrics_scheme"` + // Connection timeout for exporter (in nanoseconds). Optional. + Timeout time.Duration `json:"timeout"` } // Value implements database/sql/driver.Valuer interface. Should be defined on the value. @@ -122,7 +125,7 @@ func (c ExporterOptions) IsEmpty() bool { len(c.DisabledCollectors) == 0 && c.MetricsResolutions == nil && c.MetricsPath == "" && - c.MetricsScheme == "" + c.MetricsScheme == "" && c.Timeout == 0 } // QANOptions represents structure for special QAN options. @@ -378,80 +381,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 +462,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 +510,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 +529,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 +554,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 +596,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 +642,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 +675,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 +724,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 +736,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 +785,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 +813,43 @@ 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 timeout configured for this agent's exporter. +func (a *Agent) EffectiveDialTimeout() time.Duration { + if a.ExporterOptions.Timeout != 0 { + return a.ExporterOptions.Timeout + } + + switch a.AgentType { + case NodeExporterType, + MySQLdExporterType, + MongoDBExporterType, + PostgresExporterType, + ProxySQLExporterType, + AzureDatabaseExporterType, + ExternalExporterType, + ValkeyExporterType: + return 1 * time.Second + default: + } + + return time.Duration(effectiveDialTimeoutFallbackSec) * time.Second +} + // 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..585703fad17 100644 --- a/managed/models/agent_model_test.go +++ b/managed/models/agent_model_test.go @@ -622,3 +622,45 @@ func TestExporterURL(t *testing.T) { } }) } + +func TestEffectiveDialTimeout(t *testing.T) { + t.Parallel() + + custom := 7 * time.Second + t.Run("explicit ExporterOptions.Timeout", func(t *testing.T) { + t.Parallel() + a := &models.Agent{ + AgentType: models.QANMySQLPerfSchemaAgentType, + ExporterOptions: models.ExporterOptions{ + Timeout: custom, + }, + } + assert.Equal(t, custom, a.EffectiveDialTimeout()) + }) + + t.Run("exporter agent types default to 1s", func(t *testing.T) { + t.Parallel() + for _, typ := range []models.AgentType{ + models.NodeExporterType, + models.MySQLdExporterType, + models.MongoDBExporterType, + models.PostgresExporterType, + models.ProxySQLExporterType, + models.AzureDatabaseExporterType, + models.ExternalExporterType, + models.ValkeyExporterType, + } { + t.Run(string(typ), func(t *testing.T) { + t.Parallel() + a := &models.Agent{AgentType: typ} + assert.Equal(t, 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} + assert.Equal(t, 2*time.Second, a.EffectiveDialTimeout()) + }) +} diff --git a/managed/models/database.go b/managed/models/database.go index 85c11fac28e..5a00fc58f51 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, "", 0); 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, "", 0); err != nil { return err } diff --git a/managed/models/dsn_helpers.go b/managed/models/dsn_helpers.go index f49d47c90a0..8290c69fe66 100644 --- a/managed/models/dsn_helpers.go +++ b/managed/models/dsn_helpers.go @@ -70,9 +70,7 @@ func FindDSNByServiceIDandPMMAgentID(q *reform.Querier, serviceID, pmmAgentID, d agentTypes = append( agentTypes, QANMongoDBProfilerAgentType, - QANMongoDBMongologAgentType, - MongoDBExporterType, - RTAMongoDBAgentType) + MongoDBExporterType) default: return "", nil, status.Errorf(codes.FailedPrecondition, "Couldn't resolve dsn, as service is unsupported") } @@ -89,6 +87,15 @@ func FindDSNByServiceIDandPMMAgentID(q *reform.Querier, serviceID, pmmAgentID, d if len(fexp) == 1 { agent := fexp[0] pmmAgentVersion := ExtractPmmAgentVersionFromAgent(q, agent) + + // Custom timeout applies only to exporter agents. + switch agent.AgentType { + case NodeExporterType, MySQLdExporterType, MongoDBExporterType, PostgresExporterType, + ProxySQLExporterType, RDSExporterType, AzureDatabaseExporterType, ExternalExporterType, ValkeyExporterType: + dsnParams.DialTimeout = agent.EffectiveDialTimeout() + default: + } + return agent.DSN(svc, dsnParams, nil, pmmAgentVersion), agent, nil } if len(fexp) > 1 { 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/mysql.go b/managed/services/agents/mysql.go index 21ab987e7a4..574a185d2ab 100644 --- a/managed/services/agents/mysql.go +++ b/managed/services/agents/mysql.go @@ -167,7 +167,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: exporter.EffectiveDialTimeout(), Database: ""}, nil, pmmAgentVersion)), fmt.Sprintf("HTTP_AUTH=pmm:%s", exporter.GetAgentPassword()), } res.Env = env @@ -226,6 +226,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}} @@ -241,22 +242,25 @@ func buildMyCnfConfig(service *models.Service, agent *models.Agent, files map[st tdp := agent.TemplateDelimiters(service) var configBuffer bytes.Buffer + connectSec := max(1, int(agent.EffectiveDialTimeout().Seconds())) myCnfParams := struct { User string Password string 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: connectSec, } if files["tlsCa"] != "" { diff --git a/managed/services/agents/mysql_test.go b/managed/services/agents/mysql_test.go index 3a709970832..1fb111d2ab6 100644 --- a/managed/services/agents/mysql_test.go +++ b/managed/services/agents/mysql_test.go @@ -412,7 +412,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=1\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 +477,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=1\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 +540,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=1\n\n\n\n\n", "webConfig": "basic_auth_users:\n pmm: agent-password\n", }, } diff --git a/managed/services/agents/postgresql.go b/managed/services/agents/postgresql.go index 9b13c41c4ed..0771d4ab091 100644 --- a/managed/services/agents/postgresql.go +++ b/managed/services/agents/postgresql.go @@ -31,6 +31,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,20 +127,26 @@ 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 - - // 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.Timeout. + switch { + case exporter.AzureOptions.ClientID != "": + if exporter.ExporterOptions.Timeout != 0 { + dsnParams.DialTimeout = exporter.ExporterOptions.Timeout + } else { + dsnParams.DialTimeout = postgresRemoteCloudDefaultDialTimeout + } + case node.NodeType == models.RemoteRDSNodeType: + if exporter.ExporterOptions.Timeout != 0 { + dsnParams.DialTimeout = exporter.ExporterOptions.Timeout + } else { + dsnParams.DialTimeout = postgresRemoteCloudDefaultDialTimeout + } + default: + dsnParams.DialTimeout = exporter.EffectiveDialTimeout() } res := &agentv1.SetStateRequest_AgentProcess{ diff --git a/managed/services/agents/postgresql_test.go b/managed/services/agents/postgresql_test.go index 4a1620f46bb..3b22e6e30b6 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" @@ -207,6 +208,52 @@ 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{Timeout: 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) 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) TestDialTimeoutAzureCustom() { + s.exporter.ExporterOptions = models.ExporterOptions{Timeout: 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" 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/valkey.go b/managed/services/agents/valkey.go index 4267bc401f0..830fde54353 100644 --- a/managed/services/agents/valkey.go +++ b/managed/services/agents/valkey.go @@ -25,6 +25,8 @@ import ( "github.com/percona/pmm/version" ) +const defaultValkeyTimeout = 3 * time.Second + // valkeyExporterConfig returns the desired configuration of the valkey_exporter process. func valkeyExporterConfig(node *models.Node, service *models.Service, exporter *models.Agent, redactMode redactMode, pmmAgentVersion *version.Parsed, @@ -41,11 +43,14 @@ 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, - } + dnsParams := models.DSNParams{} args = append(args, "--redis.addr="+exporter.DSN(service, dnsParams, nil, pmmAgentVersion)) + timeout := exporter.ExporterOptions.Timeout + if timeout == 0 { + timeout = defaultValkeyTimeout + } + args = append(args, "--connection-timeout="+timeout.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..b69c4bdfbc2 --- /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.Timeout = 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..90b6b14b970 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.Timeout != 0 { + exporter.Timeout = durationpb.New(agent.ExporterOptions.Timeout) + } + 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.Timeout != 0 { + exporter.Timeout = durationpb.New(agent.ExporterOptions.Timeout) + } + 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.Timeout != 0 { + exporter.Timeout = durationpb.New(agent.ExporterOptions.Timeout) + } 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.Timeout != 0 { + exporter.Timeout = durationpb.New(agent.ExporterOptions.Timeout) + } 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.Timeout != 0 { + exporter.Timeout = durationpb.New(agent.ExporterOptions.Timeout) + } + 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.Timeout != 0 { + exporter.Timeout = durationpb.New(agent.ExporterOptions.Timeout) + } + 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.Timeout != 0 { + ext.Timeout = durationpb.New(agent.ExporterOptions.Timeout) + } + 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.Timeout != 0 { + exporter.Timeout = durationpb.New(agent.ExporterOptions.Timeout) + } + 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.Timeout != 0 { + exporter.Timeout = durationpb.New(agent.ExporterOptions.Timeout) + } return exporter, nil case models.RTAMongoDBAgentType: diff --git a/managed/services/converters_test.go b/managed/services/converters_test.go index 8dcd34e6e9d..a40b4430d26 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{ + Timeout: 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, + Timeout: 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..09ab573138d 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.FromProto(p.Timeout)) if err != nil { return err } @@ -243,22 +244,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, + Timeout: duration.FromProto(p.Timeout), + } 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 +333,7 @@ func (as *AgentsService) ChangeMySQLdExporter(ctx context.Context, agentID strin DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + Timeout: duration.FromProto(p.Timeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -368,6 +372,7 @@ func (as *AgentsService) AddMongoDBExporter(ctx context.Context, p *inventoryv1. PushMetrics: p.PushMetrics, DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, + Timeout: duration.FromProto(p.Timeout), }, LogLevel: services.SpecifyLogLevel(p.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_FATAL), } @@ -449,6 +454,7 @@ func (as *AgentsService) ChangeMongoDBExporter( DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + Timeout: duration.FromProto(p.Timeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -698,20 +704,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, + Timeout: duration.FromProto(p.Timeout), + } 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 +790,7 @@ func (as *AgentsService) ChangePostgresExporter(ctx context.Context, agentID str DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + Timeout: duration.FromProto(p.Timeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -804,21 +813,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, + Timeout: duration.FromProto(p.Timeout), + } 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 +899,7 @@ func (as *AgentsService) ChangeValkeyExporter(ctx context.Context, agentID strin DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + Timeout: duration.FromProto(p.Timeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -1124,21 +1136,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, + Timeout: duration.FromProto(p.Timeout), + } 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 +1215,7 @@ func (as *AgentsService) ChangeProxySQLExporter(ctx context.Context, agentID str DisabledCollectors: p.DisableCollectors, ExposeExporter: p.ExposeExporter, MetricsResolutions: convertMetricsResolutions(p.MetricsResolutions), + Timeout: duration.FromProto(p.Timeout), } agent, err := as.executeAgentChange(ctx, agentID, params) @@ -1537,6 +1552,7 @@ 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, @@ -1549,6 +1565,7 @@ func (as *AgentsService) AddExternalExporter(ctx context.Context, p *inventoryv1 CustomLabels: p.CustomLabels, PushMetrics: p.PushMetrics, TLSSkipVerify: p.TlsSkipVerify, + Timeout: duration.FromProto(p.Timeout), } row, err := models.CreateExternalExporter(tx.Querier, params) if err != nil { diff --git a/managed/services/inventory/agents_test.go b/managed/services/inventory/agents_test.go index 667a3d968d5..46ec0598c73 100644 --- a/managed/services/inventory/agents_test.go +++ b/managed/services/inventory/agents_test.go @@ -150,6 +150,7 @@ func TestAgents(t *testing.T) { PmmAgentId: pmmAgentID, ServiceId: ms.ServiceId, Username: "username", + Timeout: durationpb.New(11 * time.Second), }) require.NoError(t, err) expectedMySQLdExporter = &inventoryv1.MySQLdExporter{ @@ -158,6 +159,7 @@ func TestAgents(t *testing.T) { ServiceId: ms.ServiceId, Username: "username", Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, + Timeout: durationpb.New(11 * time.Second), } assert.Equal(t, expectedMySQLdExporter, actualAgent.GetMysqldExporter()) @@ -232,6 +234,7 @@ func TestAgents(t *testing.T) { PmmAgentId: pmmAgentID, ServiceId: ps.ServiceId, Username: "username", + Timeout: durationpb.New(13 * time.Second), }) require.NoError(t, err) expectedPostgresExporter = &inventoryv1.PostgresExporter{ @@ -240,6 +243,7 @@ func TestAgents(t *testing.T) { ServiceId: ps.ServiceId, Username: "username", Status: inventoryv1.AgentStatus_AGENT_STATUS_UNKNOWN, + Timeout: durationpb.New(13 * time.Second), } assert.Equal(t, expectedPostgresExporter, actualAgent.GetPostgresExporter()) 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..752cb4ffcd4 --- /dev/null +++ b/managed/services/management/add_service_exporter_timeout_test.go @@ -0,0 +1,241 @@ +// 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.Timeout (dial / scrape timeout API). +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, + Timeout: want, + }, + }, + }) + require.NoError(t, err) + require.NotNil(t, resp.GetMysql()) + assert.Equal(t, want, resp.GetMysql().GetMysqldExporter().GetTimeout()) + }) + + 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, + Timeout: want, + }, + }, + }) + require.NoError(t, err) + require.NotNil(t, resp.GetPostgresql()) + assert.Equal(t, want, resp.GetPostgresql().GetPostgresExporter().GetTimeout()) + }) + + 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, + Timeout: want, + }, + }, + }) + require.NoError(t, err) + require.NotNil(t, resp.GetProxysql()) + assert.Equal(t, want, resp.GetProxysql().GetProxysqlExporter().GetTimeout()) + }) + + 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, + Timeout: want, + }, + }, + }) + require.NoError(t, err) + require.NotNil(t, resp.GetValkey()) + assert.Equal(t, want, resp.GetValkey().GetValkeyExporter().GetTimeout()) + }) + + 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, + Timeout: want, + }, + }, + }) + require.NoError(t, err) + require.NotNil(t, resp.GetExternal()) + assert.Equal(t, want, resp.GetExternal().GetExternalExporter().GetTimeout()) + }) + + 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, + Timeout: 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] = agent.ExporterOptions.Timeout + } + + assert.Equal(t, want.AsDuration(), got[models.AzureDatabaseExporterType]) + assert.Equal(t, want.AsDuration(), got[models.MySQLdExporterType]) + }) +} diff --git a/managed/services/management/agent.go b/managed/services/management/agent.go index bae1d2c0c28..cfec33504f2 100644 --- a/managed/services/management/agent.go +++ b/managed/services/management/agent.go @@ -175,6 +175,12 @@ func (s *ManagementService) agentToAPI(agent *models.Agent) (*managementv1.Unive ua.MetricsScheme = agent.ExporterOptions.MetricsScheme ua.PushMetrics = agent.ExporterOptions.PushMetrics ua.ExposeExporter = agent.ExporterOptions.ExposeExporter + // RDS exporter has no default timeout to expose here. + // Keep it unset unless the user explicitly configured one; + // runtime timeout is derived from scrape config. + if agent.AgentType != models.RDSExporterType || agent.ExporterOptions.Timeout != 0 { + ua.Timeout = durationpb.New(agent.EffectiveDialTimeout()) + } // QAN options ua.MaxQueryLength = agent.QANOptions.MaxQueryLength diff --git a/managed/services/management/agent_test.go b/managed/services/management/agent_test.go index d35861d90fb..24d966527f8 100644 --- a/managed/services/management/agent_test.go +++ b/managed/services/management/agent_test.go @@ -152,6 +152,7 @@ func TestAgentService(t *testing.T) { { AgentId: pgExporterID, AgentType: "postgres_exporter", + Timeout: durationpb.New(1 * time.Second), PmmAgentId: models.PMMServerAgentID, IsConnected: false, CreatedAt: timestamppb.New(now), @@ -169,6 +170,7 @@ func TestAgentService(t *testing.T) { { AgentId: pgStatStatementID, AgentType: "qan-postgresql-pgstatements-agent", + Timeout: durationpb.New(2 * time.Second), PmmAgentId: models.PMMServerAgentID, IsConnected: false, CreatedAt: timestamppb.New(now), @@ -187,6 +189,7 @@ func TestAgentService(t *testing.T) { { AgentId: models.PMMServerAgentID, AgentType: "pmm-agent", + Timeout: durationpb.New(2 * time.Second), RunsOnNodeId: models.PMMServerAgentID, IsConnected: true, CreatedAt: timestamppb.New(now), @@ -286,6 +289,7 @@ func TestAgentService(t *testing.T) { { AgentId: azureExporter.AgentID, AgentType: "azure_database_exporter", + Timeout: durationpb.New(1 * time.Second), PmmAgentId: "00000000-0000-4000-8000-000000000007", IsConnected: false, CreatedAt: timestamppb.New(now), @@ -340,6 +344,7 @@ func TestAgentService(t *testing.T) { { AgentId: rtaAgent.AgentID, AgentType: "rta-mongodb-agent", + Timeout: durationpb.New(2 * time.Second), PmmAgentId: "00000000-0000-4000-8000-000000000007", IsConnected: false, CreatedAt: timestamppb.New(now), diff --git a/managed/services/management/azure_database.go b/managed/services/management/azure_database.go index a8a6fe0c24c..b75c7b32eda 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{ + Timeout: duration.FromProto(req.Timeout), + }, }) 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{ + Timeout: duration.FromProto(req.Timeout), + }, MySQLOptions: models.MySQLOptions{ TableCountTablestatsGroupLimit: tablestatsGroupTableLimit, }, diff --git a/managed/services/management/external.go b/managed/services/management/external.go index ffc5c53de2b..4b385032dd9 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. @@ -110,6 +111,7 @@ func (s *ManagementService) addExternal(ctx context.Context, req *managementv1.A CustomLabels: req.CustomLabels, PushMetrics: isPushMode(req.MetricsMode), TLSSkipVerify: req.TlsSkipVerify, + Timeout: duration.FromProto(req.Timeout), } 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..a9d6164f486 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, + Timeout: duration.FromProto(req.Timeout), }, }) if err != nil { diff --git a/managed/services/management/mysql.go b/managed/services/management/mysql.go index baa9e60f42a..524a3ff6bfa 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, + Timeout: duration.FromProto(req.Timeout), + } 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..c43d0e9f7f3 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.FromProto(req.Timeout)) if err != nil { return err } diff --git a/managed/services/management/postgresql.go b/managed/services/management/postgresql.go index 2a976287333..ef93f616cf7 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, + Timeout: duration.FromProto(req.Timeout), + } 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..037d93eccea 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, + Timeout: duration.FromProto(req.Timeout), + } 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..733e91374b8 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" ) @@ -321,6 +322,7 @@ func (s *ManagementService) addRDS(ctx context.Context, req *managementv1.AddRDS }, ExporterOptions: models.ExporterOptions{ PushMetrics: isPushMode(metricsMode), + Timeout: duration.FromProto(req.Timeout), }, }) if err != nil { diff --git a/managed/services/management/valkey.go b/managed/services/management/valkey.go index 1518893e647..252f66ff5d3 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". @@ -73,6 +74,7 @@ func (s *ManagementService) addValkey(ctx context.Context, req *managementv1.Add ExporterOptions: models.ExporterOptions{ ExposeExporter: req.ExposeExporter, PushMetrics: isPushMode(req.MetricsMode), + Timeout: duration.FromProto(req.Timeout), }, ValkeyOptions: models.ValkeyOptionsFromRequest(req), }) diff --git a/managed/services/victoriametrics/scrape_configs.go b/managed/services/victoriametrics/scrape_configs.go index f01eca1030f..aafd487a895 100644 --- a/managed/services/victoriametrics/scrape_configs.go +++ b/managed/services/victoriametrics/scrape_configs.go @@ -37,6 +37,11 @@ func ScrapeTimeout(interval time.Duration) config.Duration { return scrapeTimeout(interval) } +const ( + exporterScrapeIntervalCap = 0.9 + exporterScrapeTimeoutFloorMs = 100 +) + // scrapeTimeout returns default scrape timeout for given scrape interval. func scrapeTimeout(interval time.Duration) config.Duration { switch { @@ -47,6 +52,21 @@ func scrapeTimeout(interval time.Duration) config.Duration { } } +// exporterScrapeTimeout sets ScrapeTimeout from agent ExporterOptions.Timeout when set +// (node / external / RDS scrape of exporter HTTP). By Prometheus rule, scrape_timeout +// cannot exceed scrape_interval, so PMM caps it at 0.9 of scrape interval: +// https://prometheus.io/docs/prometheus/latest/configuration/configuration/ +func exporterScrapeTimeout(cfg *config.ScrapeConfig, agent *models.Agent) { + if cfg == nil || agent == nil || agent.ExporterOptions.Timeout == 0 { + return + } + interval := time.Duration(cfg.ScrapeInterval) + maxT := time.Duration(float64(interval) * exporterScrapeIntervalCap) + t := min(agent.ExporterOptions.Timeout, maxT) + t = max(t, exporterScrapeTimeoutFloorMs*time.Millisecond) + cfg.ScrapeTimeout = config.Duration(t) +} + func scrapeConfigForClickhouse(mr time.Duration, pmmServerNodeName string) *config.ScrapeConfig { return &config.ScrapeConfig{ JobName: "clickhouse", @@ -236,9 +256,9 @@ func scrapeConfigForStandardExporter(intervalName string, interval time.Duration } // scrapeConfigForRDSExporter returns scrape config for single rds_exporter configuration. -func scrapeConfigForRDSExporter(intervalName string, interval time.Duration, hostport string, metricsPath string) *config.ScrapeConfig { +func scrapeConfigForRDSExporter(intervalName string, interval time.Duration, hostport string, metricsPath string, exporterTimeout time.Duration) *config.ScrapeConfig { jobName := fmt.Sprintf("rds_exporter_%s_%s-%s", strings.Map(jobNameMapping, hostport), intervalName, interval) - return &config.ScrapeConfig{ + cfg := &config.ScrapeConfig{ JobName: jobName, ScrapeInterval: config.Duration(interval), ScrapeTimeout: scrapeTimeout(interval), @@ -250,6 +270,13 @@ func scrapeConfigForRDSExporter(intervalName string, interval time.Duration, hos }}, }, } + if exporterTimeout > 0 { + maxT := time.Duration(float64(interval) * exporterScrapeIntervalCap) + t := min(exporterTimeout, maxT) + t = max(t, exporterScrapeTimeoutFloorMs*time.Millisecond) + cfg.ScrapeTimeout = config.Duration(t) + } + return cfg } func scrapeConfigsForNodeExporter(params *scrapeConfigParams) ([]*config.ScrapeConfig, error) { @@ -312,12 +339,15 @@ func scrapeConfigsForNodeExporter(params *scrapeConfigParams) ([]*config.ScrapeC var r []*config.ScrapeConfig if hr != nil { + exporterScrapeTimeout(hr, params.agent) r = append(r, hr) } if mr != nil { + exporterScrapeTimeout(mr, params.agent) r = append(r, mr) } if lr != nil { + exporterScrapeTimeout(lr, params.agent) r = append(r, lr) } return r, nil @@ -536,11 +566,21 @@ func scrapeConfigsForProxySQLExporter(params *scrapeConfigParams) ([]*config.Scr } func scrapeConfigsForRDSExporter(params []*scrapeConfigParams) []*config.ScrapeConfig { - hostportMap := make(map[string]*models.MetricsResolutions, len(params)) + type rdsHost struct { + res *models.MetricsResolutions + maxExporter time.Duration + } + hostportMap := make(map[string]*rdsHost, len(params)) for _, p := range params { port := int(*p.agent.ListenPort) hostport := net.JoinHostPort(p.host, strconv.Itoa(port)) - hostportMap[hostport] = p.metricsResolution + if _, ok := hostportMap[hostport]; !ok { + hostportMap[hostport] = &rdsHost{res: p.metricsResolution} + } + h := hostportMap[hostport] + if p.agent.ExporterOptions.Timeout > h.maxExporter { + h.maxExporter = p.agent.ExporterOptions.Timeout + } } hostports := make([]string, 0, len(hostportMap)) @@ -551,9 +591,9 @@ func scrapeConfigsForRDSExporter(params []*scrapeConfigParams) []*config.ScrapeC r := make([]*config.ScrapeConfig, 0, len(hostports)*2) //nolint:mnd for _, hostport := range hostports { - metricsResolutions := hostportMap[hostport] - mr := scrapeConfigForRDSExporter("mr", metricsResolutions.MR, hostport, "/enhanced") - lr := scrapeConfigForRDSExporter("lr", metricsResolutions.LR, hostport, "/basic") + h := hostportMap[hostport] + mr := scrapeConfigForRDSExporter("mr", h.res.MR, hostport, "/enhanced", h.maxExporter) + lr := scrapeConfigForRDSExporter("lr", h.res.LR, hostport, "/basic", h.maxExporter) r = append(r, mr, lr) } @@ -573,6 +613,7 @@ func scrapeConfigsForAzureDatabase(s *models.MetricsResolutions, params *scrapeC ScrapeTimeout: scrapeTimeout(interval), MetricsPath: "/metrics", } + exporterScrapeTimeout(cfg, params.agent) port := int(*params.agent.ListenPort) hostport := net.JoinHostPort(params.host, strconv.Itoa(port)) @@ -601,6 +642,7 @@ func scrapeConfigsForExternalExporter(s *models.MetricsResolutions, params *scra Scheme: params.agent.ExporterOptions.MetricsScheme, MetricsPath: params.agent.ExporterOptions.MetricsPath, } + exporterScrapeTimeout(cfg, params.agent) if pointer.GetString(params.agent.Username) != "" { cfg.HTTPClientConfig.BasicAuth = &config.BasicAuth{ diff --git a/managed/services/victoriametrics/scrape_configs_test.go b/managed/services/victoriametrics/scrape_configs_test.go index 8155245fdbd..0a8559b7de3 100644 --- a/managed/services/victoriametrics/scrape_configs_test.go +++ b/managed/services/victoriametrics/scrape_configs_test.go @@ -31,6 +31,50 @@ import ( "github.com/percona/pmm/version" ) +func TestExporterScrapeTimeout(t *testing.T) { + t.Parallel() + + interval := 10 * time.Second + t.Run("uses ExporterOptions.Timeout when within cap", func(t *testing.T) { + t.Parallel() + cfg := &config.ScrapeConfig{ScrapeInterval: config.Duration(interval)} + agent := &models.Agent{ExporterOptions: models.ExporterOptions{Timeout: 3 * time.Second}} + exporterScrapeTimeout(cfg, agent) + assert.Equal(t, config.Duration(3*time.Second), cfg.ScrapeTimeout) + }) + + t.Run("caps at 90% of scrape interval", func(t *testing.T) { + t.Parallel() + cfg := &config.ScrapeConfig{ScrapeInterval: config.Duration(interval)} + agent := &models.Agent{ExporterOptions: models.ExporterOptions{Timeout: 15 * time.Second}} + exporterScrapeTimeout(cfg, agent) + assert.Equal(t, config.Duration(9*time.Second), cfg.ScrapeTimeout) + }) + + t.Run("floors at 100ms", func(t *testing.T) { + t.Parallel() + cfg := &config.ScrapeConfig{ScrapeInterval: config.Duration(interval)} + agent := &models.Agent{ExporterOptions: models.ExporterOptions{Timeout: 50 * time.Microsecond}} + exporterScrapeTimeout(cfg, agent) + assert.Equal(t, config.Duration(100*time.Millisecond), cfg.ScrapeTimeout) + }) + + t.Run("no-op when cfg or agent nil or timeout zero", func(t *testing.T) { + t.Parallel() + cfg := &config.ScrapeConfig{ScrapeInterval: config.Duration(interval), ScrapeTimeout: config.Duration(time.Second)} + agent := &models.Agent{ExporterOptions: models.ExporterOptions{Timeout: 2 * time.Second}} + + exporterScrapeTimeout(nil, agent) + assert.Equal(t, config.Duration(time.Second), cfg.ScrapeTimeout) + + exporterScrapeTimeout(cfg, nil) + assert.Equal(t, config.Duration(time.Second), cfg.ScrapeTimeout) + + exporterScrapeTimeout(cfg, &models.Agent{ExporterOptions: models.ExporterOptions{}}) + assert.Equal(t, config.Duration(time.Second), cfg.ScrapeTimeout) + }) +} + func TestScrapeConfig(t *testing.T) { s := &models.MetricsResolutions{ HR: 5 * time.Second, @@ -1272,6 +1316,31 @@ func TestScrapeConfig(t *testing.T) { assertScrapeConfigsEqual(t, expected[i], actual[i]) } }) + + t.Run("CustomTimeoutOverridesOnlyWhenSet", func(t *testing.T) { + params := []*scrapeConfigParams{ + { + host: "1.1.1.1", + agent: &models.Agent{ + ListenPort: pointer.ToUint16(12345), + ExporterOptions: models.ExporterOptions{Timeout: 7 * time.Second}, + }, + metricsResolution: s, + }, + { + host: "2.2.2.2", + agent: &models.Agent{ListenPort: pointer.ToUint16(12345)}, + metricsResolution: s, + }, + } + + actual := scrapeConfigsForRDSExporter(params) + require.Len(t, actual, 4) + assert.Equal(t, config.Duration(4500*time.Millisecond), actual[0].ScrapeTimeout) + assert.Equal(t, config.Duration(7*time.Second), actual[1].ScrapeTimeout) + assert.Equal(t, scrapeTimeout(s.MR), actual[2].ScrapeTimeout) + assert.Equal(t, scrapeTimeout(s.LR), actual[3].ScrapeTimeout) + }) }) t.Run("scrapeConfigsForExternalExporter", func(t *testing.T) { diff --git a/managed/utils/duration/duration.go b/managed/utils/duration/duration.go new file mode 100644 index 00000000000..ff409188252 --- /dev/null +++ b/managed/utils/duration/duration.go @@ -0,0 +1,32 @@ +// 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" + + durationpb "google.golang.org/protobuf/types/known/durationpb" +) + +// FromProto converts a protobuf Duration to a time.Duration. +func FromProto(d *durationpb.Duration) time.Duration { + if d == nil { + return 0 + } + + return d.AsDuration() +}