package metrics

import (
	"github.com/prometheus/client_golang/prometheus"
	"sigs.k8s.io/controller-runtime/pkg/metrics"
)

const (
	ResourceTypeLabel = "resource_type"
	ResourceTypeCPU   = "cpu"
	ResourceTypeMem   = "memory"

	ScopeLabel    = "scope"
	ScopeKeyspace = "keyspace"
	ScopeTotal    = "total"

	KeyspaceLabel = "keyspace_name"
	TaskIDLabel   = "task_id"
	PoolLabel     = "pool"
)

var (
	// ResourceUsage is the gauge for current resource usage
	ResourceUsage = prometheus.NewGaugeVec(
		prometheus.GaugeOpts{
			Namespace: "tidb_worker",
			Subsystem: "resource_manager",
			Name:      "resource_usage",
			Help:      "Current resource usage by resource type, keyspace, task and pool",
		},
		[]string{ResourceTypeLabel, KeyspaceLabel, TaskIDLabel, PoolLabel},
	)

	// ResourceLimit is the gauge for resource limits
	ResourceLimit = prometheus.NewGaugeVec(
		prometheus.GaugeOpts{
			Namespace: "tidb_worker",
			Subsystem: "resource_manager",
			Name:      "resource_limit",
			Help:      "Total resource limit by resource type and scope",
		},
		[]string{ResourceTypeLabel, ScopeLabel},
	)
)

func init() {
	metrics.Registry.MustRegister(ResourceUsage)
	metrics.Registry.MustRegister(ResourceLimit)
}
