// Package metrics add by blacknc <blacknc@163.com> at 2023/03/03 11:44:24
package metrics

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

var (
	//HTTPReqDuration metric:http_request_duration_ms
	HTTPReqDuration *prometheus.HistogramVec
	//HTTPReqTotal metric:http_request_total
	HTTPReqTotal *prometheus.CounterVec

	// Downstream Http metrics
	DownstreamHttpCounter *prometheus.CounterVec
)

// Http metrics
func httpRegister(subsystem string) {

	HTTPReqDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
		Namespace: namespace,
		Subsystem: subsystem,
		Name:      "http_request_duration_ms",
		Help:      "The HTTP request latencies in ms.",
		Buckets:   prometheus.ExponentialBuckets(1, 2, 21), // 1ms ~ 1048576ms
	}, []string{"method", "path"})

	HTTPReqTotal = prometheus.NewCounterVec(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: subsystem,
		Name:      "http_requests_total",
		Help:      "Total number of HTTP requests made.",
	}, []string{"method", "path", "status"})

	prometheus.MustRegister(
		HTTPReqDuration,
		HTTPReqTotal,
	)
}

// Downstream http request metrics
func downstreamHttpRegister(subsystem string) {
	DownstreamHttpCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: subsystem,
		Name:      "downstream_http_count",
		Help:      "The downstream http request count.",
	}, []string{"service", "method", "code"})

	prometheus.MustRegister(
		DownstreamHttpCounter,
	)
}
