// Code generated by mdatagen. DO NOT EDIT.

package metadata

import (
	"go.opentelemetry.io/collector/confmap"
	"go.opentelemetry.io/collector/filter"
)

// MetricConfig provides common config for a particular metric.
type MetricConfig struct {
	Enabled bool `mapstructure:"enabled"`

	enabledSetByUser bool
}

func (ms *MetricConfig) Unmarshal(parser *confmap.Conf) error {
	if parser == nil {
		return nil
	}
	err := parser.Unmarshal(ms)
	if err != nil {
		return err
	}
	ms.enabledSetByUser = parser.IsSet("enabled")
	return nil
}

// MetricsConfig provides config for metadb metrics.
type MetricsConfig struct {
	TidbCloudCdcChangefeedLatency                        MetricConfig `mapstructure:"tidb_cloud.cdc_changefeed_latency"`
	TidbCloudCdcChangefeedReplicaRows                    MetricConfig `mapstructure:"tidb_cloud.cdc_changefeed_replica_rows"`
	TidbCloudCdcChangefeedResolvedTsLag                  MetricConfig `mapstructure:"tidb_cloud.cdc_changefeed_resolved_ts_lag"`
	TidbCloudCdcChangefeedStatus                         MetricConfig `mapstructure:"tidb_cloud.cdc_changefeed_status"`
	TidbCloudCdcCheckpointTs                             MetricConfig `mapstructure:"tidb_cloud.cdc_checkpoint_ts"`
	TidbCloudDbActiveConnections                         MetricConfig `mapstructure:"tidb_cloud.db_active_connections"`
	TidbCloudDbAverageQueryDuration                      MetricConfig `mapstructure:"tidb_cloud.db_average_query_duration"`
	TidbCloudDbColumnarStorageUsedBytes                  MetricConfig `mapstructure:"tidb_cloud.db_columnar_storage_used_bytes"`
	TidbCloudDbCommandPerSecond                          MetricConfig `mapstructure:"tidb_cloud.db_command_per_second"`
	TidbCloudDbComponentUptime                           MetricConfig `mapstructure:"tidb_cloud.db_component_uptime"`
	TidbCloudDbConnections                               MetricConfig `mapstructure:"tidb_cloud.db_connections"`
	TidbCloudDbDatabaseTime                              MetricConfig `mapstructure:"tidb_cloud.db_database_time"`
	TidbCloudDbDisconnections                            MetricConfig `mapstructure:"tidb_cloud.db_disconnections"`
	TidbCloudDbFailedQueries                             MetricConfig `mapstructure:"tidb_cloud.db_failed_queries"`
	TidbCloudDbFailedQueriesTotal                        MetricConfig `mapstructure:"tidb_cloud.db_failed_queries_total"`
	TidbCloudDbKvRequestDuration                         MetricConfig `mapstructure:"tidb_cloud.db_kv_request_duration"`
	TidbCloudDbQueriesTotal                              MetricConfig `mapstructure:"tidb_cloud.db_queries_total"`
	TidbCloudDbQueriesUsingPlanCacheOps                  MetricConfig `mapstructure:"tidb_cloud.db_queries_using_plan_cache_ops"`
	TidbCloudDbQueryDurationSecondsCount                 MetricConfig `mapstructure:"tidb_cloud.db_query_duration_seconds.count"`
	TidbCloudDbQueryDurationSecondsSum                   MetricConfig `mapstructure:"tidb_cloud.db_query_duration_seconds.sum"`
	TidbCloudDbQueryPerSecond                            MetricConfig `mapstructure:"tidb_cloud.db_query_per_second"`
	TidbCloudDbRowStorageUsedBytes                       MetricConfig `mapstructure:"tidb_cloud.db_row_storage_used_bytes"`
	TidbCloudDbTotalConnection                           MetricConfig `mapstructure:"tidb_cloud.db_total_connection"`
	TidbCloudDbTransactionPerSecond                      MetricConfig `mapstructure:"tidb_cloud.db_transaction_per_second"`
	TidbCloudDmRelayReadErrorCount                       MetricConfig `mapstructure:"tidb_cloud.dm_relay_read_error_count"`
	TidbCloudDmSyncerReplicationLagBucket                MetricConfig `mapstructure:"tidb_cloud.dm_syncer_replication_lag_bucket"`
	TidbCloudDmSyncerReplicationLagGauge                 MetricConfig `mapstructure:"tidb_cloud.dm_syncer_replication_lag_gauge"`
	TidbCloudDmTaskState                                 MetricConfig `mapstructure:"tidb_cloud.dm_task_state"`
	TidbCloudNodeCPUCapacityCores                        MetricConfig `mapstructure:"tidb_cloud.node_cpu_capacity_cores"`
	TidbCloudNodeCPUSecondsTotal                         MetricConfig `mapstructure:"tidb_cloud.node_cpu_seconds_total"`
	TidbCloudNodeCPUSecondsTotalRate                     MetricConfig `mapstructure:"tidb_cloud.node_cpu_seconds_total_rate"`
	TidbCloudNodeDiskReadLatency                         MetricConfig `mapstructure:"tidb_cloud.node_disk_read_latency"`
	TidbCloudNodeDiskWriteLatency                        MetricConfig `mapstructure:"tidb_cloud.node_disk_write_latency"`
	TidbCloudNodeMemoryAvailableBytes                    MetricConfig `mapstructure:"tidb_cloud.node_memory_available_bytes"`
	TidbCloudNodeMemoryCapacityBytes                     MetricConfig `mapstructure:"tidb_cloud.node_memory_capacity_bytes"`
	TidbCloudNodeMemoryUsedBytes                         MetricConfig `mapstructure:"tidb_cloud.node_memory_used_bytes"`
	TidbCloudNodeStorageAvailableBytes                   MetricConfig `mapstructure:"tidb_cloud.node_storage_available_bytes"`
	TidbCloudNodeStorageCapacityBytes                    MetricConfig `mapstructure:"tidb_cloud.node_storage_capacity_bytes"`
	TidbCloudNodeStorageUsedBytes                        MetricConfig `mapstructure:"tidb_cloud.node_storage_used_bytes"`
	TidbCloudResourceManagerResourceRequestUnitTotal     MetricConfig `mapstructure:"tidb_cloud.resource_manager_resource_request_unit_total"`
	TidbCloudResourceManagerResourceUnitReadRequestUnit  MetricConfig `mapstructure:"tidb_cloud.resource_manager_resource_unit_read_request_unit"`
	TidbCloudResourceManagerResourceUnitWriteRequestUnit MetricConfig `mapstructure:"tidb_cloud.resource_manager_resource_unit_write_request_unit"`
}

func DefaultMetricsConfig() MetricsConfig {
	return MetricsConfig{
		TidbCloudCdcChangefeedLatency: MetricConfig{
			Enabled: true,
		},
		TidbCloudCdcChangefeedReplicaRows: MetricConfig{
			Enabled: true,
		},
		TidbCloudCdcChangefeedResolvedTsLag: MetricConfig{
			Enabled: true,
		},
		TidbCloudCdcChangefeedStatus: MetricConfig{
			Enabled: true,
		},
		TidbCloudCdcCheckpointTs: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbActiveConnections: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbAverageQueryDuration: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbColumnarStorageUsedBytes: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbCommandPerSecond: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbComponentUptime: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbConnections: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbDatabaseTime: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbDisconnections: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbFailedQueries: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbFailedQueriesTotal: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbKvRequestDuration: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbQueriesTotal: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbQueriesUsingPlanCacheOps: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbQueryDurationSecondsCount: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbQueryDurationSecondsSum: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbQueryPerSecond: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbRowStorageUsedBytes: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbTotalConnection: MetricConfig{
			Enabled: true,
		},
		TidbCloudDbTransactionPerSecond: MetricConfig{
			Enabled: true,
		},
		TidbCloudDmRelayReadErrorCount: MetricConfig{
			Enabled: true,
		},
		TidbCloudDmSyncerReplicationLagBucket: MetricConfig{
			Enabled: true,
		},
		TidbCloudDmSyncerReplicationLagGauge: MetricConfig{
			Enabled: true,
		},
		TidbCloudDmTaskState: MetricConfig{
			Enabled: true,
		},
		TidbCloudNodeCPUCapacityCores: MetricConfig{
			Enabled: true,
		},
		TidbCloudNodeCPUSecondsTotal: MetricConfig{
			Enabled: true,
		},
		TidbCloudNodeCPUSecondsTotalRate: MetricConfig{
			Enabled: true,
		},
		TidbCloudNodeDiskReadLatency: MetricConfig{
			Enabled: true,
		},
		TidbCloudNodeDiskWriteLatency: MetricConfig{
			Enabled: true,
		},
		TidbCloudNodeMemoryAvailableBytes: MetricConfig{
			Enabled: true,
		},
		TidbCloudNodeMemoryCapacityBytes: MetricConfig{
			Enabled: true,
		},
		TidbCloudNodeMemoryUsedBytes: MetricConfig{
			Enabled: true,
		},
		TidbCloudNodeStorageAvailableBytes: MetricConfig{
			Enabled: true,
		},
		TidbCloudNodeStorageCapacityBytes: MetricConfig{
			Enabled: true,
		},
		TidbCloudNodeStorageUsedBytes: MetricConfig{
			Enabled: true,
		},
		TidbCloudResourceManagerResourceRequestUnitTotal: MetricConfig{
			Enabled: true,
		},
		TidbCloudResourceManagerResourceUnitReadRequestUnit: MetricConfig{
			Enabled: true,
		},
		TidbCloudResourceManagerResourceUnitWriteRequestUnit: MetricConfig{
			Enabled: true,
		},
	}
}

// ResourceAttributeConfig provides common config for a particular resource attribute.
type ResourceAttributeConfig struct {
	Enabled bool `mapstructure:"enabled"`
	// Experimental: MetricsInclude defines a list of filters for attribute values.
	// If the list is not empty, only metrics with matching resource attribute values will be emitted.
	MetricsInclude []filter.Config `mapstructure:"metrics_include"`
	// Experimental: MetricsExclude defines a list of filters for attribute values.
	// If the list is not empty, metrics with matching resource attribute values will not be emitted.
	// MetricsInclude has higher priority than MetricsExclude.
	MetricsExclude []filter.Config `mapstructure:"metrics_exclude"`

	enabledSetByUser bool
}

func (rac *ResourceAttributeConfig) Unmarshal(parser *confmap.Conf) error {
	if parser == nil {
		return nil
	}
	err := parser.Unmarshal(rac)
	if err != nil {
		return err
	}
	rac.enabledSetByUser = parser.IsSet("enabled")
	return nil
}

// ResourceAttributesConfig provides config for metadb resource attributes.
type ResourceAttributesConfig struct {
	ClusterID   ResourceAttributeConfig `mapstructure:"cluster_id"`
	ClusterName ResourceAttributeConfig `mapstructure:"cluster_name"`
	ProjectID   ResourceAttributeConfig `mapstructure:"project_id"`
	ProjectName ResourceAttributeConfig `mapstructure:"project_name"`
	ServicePlan ResourceAttributeConfig `mapstructure:"service_plan"`
}

func DefaultResourceAttributesConfig() ResourceAttributesConfig {
	return ResourceAttributesConfig{
		ClusterID: ResourceAttributeConfig{
			Enabled: true,
		},
		ClusterName: ResourceAttributeConfig{
			Enabled: true,
		},
		ProjectID: ResourceAttributeConfig{
			Enabled: true,
		},
		ProjectName: ResourceAttributeConfig{
			Enabled: true,
		},
		ServicePlan: ResourceAttributeConfig{
			Enabled: true,
		},
	}
}

// MetricsBuilderConfig is a configuration for metadb metrics builder.
type MetricsBuilderConfig struct {
	Metrics            MetricsConfig            `mapstructure:"metrics"`
	ResourceAttributes ResourceAttributesConfig `mapstructure:"resource_attributes"`
}

func DefaultMetricsBuilderConfig() MetricsBuilderConfig {
	return MetricsBuilderConfig{
		Metrics:            DefaultMetricsConfig(),
		ResourceAttributes: DefaultResourceAttributesConfig(),
	}
}
