package metrics

import "github.com/prometheus/client_golang/prometheus"

const (
	WorkerNameLblName = "name"
	TenantIDLblName   = "tenant"
	ProjectIDLblName  = "project"

	// cloud provider name: aws|gcp
	ProviderLblName = "provider"

	// service name
	SvcNameLblName = "service"

	// service method name
	SvcMethodLblName = "method"

	// request result
	SuccessLblName = "success"

	BackupScheduleIDLabel      = "backup_schedule_id"
	BackupIDLabel              = "backup_id"
	SchedulerAbnormalTypeLabel = "type"

	TicdcClusterIDLabel    = "ticdc_cluster_id"
	SpecificationCodeLabel = "specification_code"
	BackupNodeNameLabel    = "backup_node_name"
	BackupNodeTypeLabel    = "backup_node_type"

	LoopError = "error"
	LoopOK    = "ok"
)

var WorkerDuration = prometheus.NewHistogramVec(
	prometheus.HistogramOpts{
		Namespace: DataflowNamespace,
		Subsystem: "worker",
		Name:      "duration_ms",
		Help:      "duration of worker loop.",
	}, []string{TenantIDLblName, WorkerNameLblName, "status"},
)

var BackupSchedulerAbnormal = prometheus.NewCounterVec(
	prometheus.CounterOpts{
		Namespace: DataflowNamespace,
		Subsystem: "worker",
		Name:      "backup_scheduler_abnormal",
		Help:      "auto backup schedule abnormal",
	}, []string{TenantLabel, ProjectLabel, ClusterIDLabel, BackupIDLabel, BackupScheduleIDLabel,
		SchedulerAbnormalTypeLabel})

var BackupCleanUpAbnormal = prometheus.NewGaugeVec(
	prometheus.GaugeOpts{
		Namespace: DataflowNamespace,
		Subsystem: "worker",
		Name:      "backup_clean_up_abnormal",
		Help:      "clean up abnormal",
	}, []string{ClusterIDLabel, BackupIDLabel, BackupScheduleIDLabel})

var BackupNodeGroupAndNodePoolExpired = prometheus.NewCounterVec(
	prometheus.CounterOpts{
		Namespace: DataflowNamespace,
		Subsystem: "worker",
		Name:      "backup_node_expire",
		Help:      "count of backup node expired",
	}, []string{BackupNodeNameLabel, BackupNodeTypeLabel})
