package metrics

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

const (
	rpcSubsystem = "rpc"
)

var (
	RPC *rpcMetrics
)

func RegisterRPCMetrics(namespace string) {
	RPC = &rpcMetrics{
		ReqDur: prometheus.NewHistogramVec(
			prometheus.HistogramOpts{
				Namespace: namespace,
				Subsystem: rpcSubsystem,
				Name:      "request_duration_seconds",
				Help:      "The RPC request latencies in seconds.",
			},
			[]string{"code", "method"},
		),
		RespSize: prometheus.NewSummary(
			prometheus.SummaryOpts{
				Namespace: namespace,
				Subsystem: rpcSubsystem,
				Name:      "response_size_bytes",
				Help:      "The RPC response sizes in bytes.",
			},
		),
	}

	prometheus.MustRegister(
		RPC.ReqDur, RPC.RespSize,
	)
}

type rpcMetrics struct {
	ReqDur   *prometheus.HistogramVec
	RespSize prometheus.Summary
}
