package vpa

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

const vpaComponent = "vpa_agent"

// Vpa agent metrics.
var (
	WaitReadySeconds = prometheus.NewHistogram(
		prometheus.HistogramOpts{
			Subsystem: vpaComponent,
			Name:      "ready_wait_seconds",
			Help:      "Histogram of ready wait seconds",
			Buckets:   prometheus.LinearBuckets(1, 2, 30), //nolint: gomnd // not need
		},
	)

	PodCountGuage = prometheus.NewGaugeVec(
		prometheus.GaugeOpts{
			Subsystem: vpaComponent,
			Name:      "pod_count",
			Help:      "TiDB pod count of a node",
		},
		[]string{"namespace"},
	)

	AllocatedGauge = prometheus.NewGauge(
		prometheus.GaugeOpts{
			Subsystem: vpaComponent,
			Name:      "allocated",
			Help:      "Total allocated memory",
		},
	)

	UsedGauge = prometheus.NewGauge(
		prometheus.GaugeOpts{
			Subsystem: vpaComponent,
			Name:      "used",
			Help:      "Total used memory",
		},
	)

	ScalePodHistogram = prometheus.NewHistogramVec(
		prometheus.HistogramOpts{
			Subsystem: vpaComponent,
			Name:      "scale_pod",
			Help:      "Histogram of scale pod memory limit",
		},
		[]string{"namespace"},
	)

	DeletePodHistogram = prometheus.NewHistogram(
		prometheus.HistogramOpts{
			Subsystem: vpaComponent,
			Name:      "delete_pod_count",
			Help:      "Histogram of delete pod count",
		},
	)

	EnsureStoreUnschedulableHistogram = prometheus.NewHistogram(
		prometheus.HistogramOpts{
			Subsystem: vpaComponent,
			Name:      "ensure_store_unschedulable_seconds",
			Help:      "Histogram of ensure store unschedulable seconds",
		},
	)

	RebalanceSignalCounter = prometheus.NewCounter(
		prometheus.CounterOpts{
			Subsystem: vpaComponent,
			Name:      "rebalance_signal_count",
			Help:      "Counter of rebalance signal",
		},
	)
)

func init() {
	prometheus.MustRegister(WaitReadySeconds)
	prometheus.MustRegister(PodCountGuage)
	prometheus.MustRegister(AllocatedGauge)
	prometheus.MustRegister(UsedGauge)
	prometheus.MustRegister(ScalePodHistogram)
	prometheus.MustRegister(DeletePodHistogram)
	prometheus.MustRegister(EnsureStoreUnschedulableHistogram)
	prometheus.MustRegister(RebalanceSignalCounter)
}
