github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/common/monitor/port_metrics.go (about) 1 package monitor 2 3 import ( 4 "github.com/go-kit/kit/metrics" 5 "github.com/go-kit/kit/metrics/discard" 6 "github.com/go-kit/kit/metrics/prometheus" 7 stdprometheus "github.com/prometheus/client_golang/prometheus" 8 "strconv" 9 "sync" 10 ) 11 12 var ( 13 portMetrics *PortMetrics 14 initPortMetrics sync.Once 15 ) 16 17 // PortMetrics monitors connecting number 18 type PortMetrics struct { 19 ConnectingNums metrics.Gauge 20 } 21 22 // GetPortMetrics returns Metrics build using Prometheus client library if Prometheus is enabled 23 // Otherwise, it returns no-op Metrics 24 func GetPortMetrics() *PortMetrics { 25 initPortMetrics.Do(func() { 26 if DefaultPrometheusConfig().Prometheus { 27 portMetrics = NewPortMetrics() 28 } else { 29 portMetrics = NopPortMetrics() 30 } 31 }) 32 33 return portMetrics 34 } 35 36 // NewPortMetrics returns a pointer of a new PortMetrics object 37 func NewPortMetrics(labelsAndValues ...string) *PortMetrics { 38 return &PortMetrics{ 39 ConnectingNums: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ 40 Namespace: xNameSpace, 41 Subsystem: portSubSystem, 42 Name: "connecting", 43 Help: "connecting number of each port", 44 }, []string{portSubSystem}).With(labelsAndValues...), 45 } 46 } 47 48 // NopPortMetrics returns a pointer of a no-op Metrics 49 func NopPortMetrics() *PortMetrics { 50 return &PortMetrics{ 51 ConnectingNums: discard.NewGauge(), 52 } 53 } 54 55 //SetConnectingNums sets connectingNums by connecting number of each port 56 func (portMetrics *PortMetrics) SetConnectingNums(connectingMap map[uint64]int) { 57 if nil == connectingMap { 58 return 59 } 60 for port, num := range connectingMap { 61 portMetrics.ConnectingNums.With(portSubSystem, strconv.FormatUint(port, 10)).Set(float64(num)) 62 } 63 }