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  }