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

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

var (
	// Rpc metrics
	RpcCostHistogram *prometheus.HistogramVec
	RpcTotalCounter  *prometheus.CounterVec

	// Downstream Rpc metrics
	DownstreamRpcCounter *prometheus.CounterVec
)

// Rpc metrics
func rpcRegister(subsystem string) {

	RpcTotalCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: subsystem,
		Name:      "rpc_request_count",
		Help:      "The RPC request count.",
	}, []string{"service", "method", "code"})

	RpcCostHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
		Namespace: namespace,
		Subsystem: subsystem,
		Name:      "rpc_request_cost",
		Help:      "The RPC request latencies in seconds",
		Buckets:   prometheus.ExponentialBuckets(0.001, 2, 20), // 1ms ~ 524s
	}, []string{"service", "method"})

	prometheus.MustRegister(
		RpcTotalCounter,
		RpcCostHistogram,
	)
}

// Downstream Rpc metrics
func downstreamRpcRegister(subsystem string) {
	DownstreamRpcCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: subsystem,
		Name:      "downstream_rpc_count",
		Help:      "The downstream rpc request count.",
	}, []string{"service", "method", "code"})

	prometheus.MustRegister(
		DownstreamRpcCounter,
	)
}
