1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package prometheus
- import (
- "github.com/prometheus/client_golang/prometheus"
- "github.com/fatedier/frp/server/metrics"
- )
- const (
- namespace = "frp"
- serverSubsystem = "server"
- )
- var ServerMetrics metrics.ServerMetrics = newServerMetrics()
- type serverMetrics struct {
- clientCount prometheus.Gauge
- proxyCount *prometheus.GaugeVec
- connectionCount *prometheus.GaugeVec
- trafficIn *prometheus.CounterVec
- trafficOut *prometheus.CounterVec
- }
- func (m *serverMetrics) NewClient() {
- m.clientCount.Inc()
- }
- func (m *serverMetrics) CloseClient() {
- m.clientCount.Dec()
- }
- func (m *serverMetrics) NewProxy(_ string, proxyType string) {
- m.proxyCount.WithLabelValues(proxyType).Inc()
- }
- func (m *serverMetrics) CloseProxy(_ string, proxyType string) {
- m.proxyCount.WithLabelValues(proxyType).Dec()
- }
- func (m *serverMetrics) OpenConnection(name string, proxyType string) {
- m.connectionCount.WithLabelValues(name, proxyType).Inc()
- }
- func (m *serverMetrics) CloseConnection(name string, proxyType string) {
- m.connectionCount.WithLabelValues(name, proxyType).Dec()
- }
- func (m *serverMetrics) AddTrafficIn(name string, proxyType string, trafficBytes int64) {
- m.trafficIn.WithLabelValues(name, proxyType).Add(float64(trafficBytes))
- }
- func (m *serverMetrics) AddTrafficOut(name string, proxyType string, trafficBytes int64) {
- m.trafficOut.WithLabelValues(name, proxyType).Add(float64(trafficBytes))
- }
- func newServerMetrics() *serverMetrics {
- m := &serverMetrics{
- clientCount: prometheus.NewGauge(prometheus.GaugeOpts{
- Namespace: namespace,
- Subsystem: serverSubsystem,
- Name: "client_counts",
- Help: "The current client counts of frps",
- }),
- proxyCount: prometheus.NewGaugeVec(prometheus.GaugeOpts{
- Namespace: namespace,
- Subsystem: serverSubsystem,
- Name: "proxy_counts",
- Help: "The current proxy counts",
- }, []string{"type"}),
- connectionCount: prometheus.NewGaugeVec(prometheus.GaugeOpts{
- Namespace: namespace,
- Subsystem: serverSubsystem,
- Name: "connection_counts",
- Help: "The current connection counts",
- }, []string{"name", "type"}),
- trafficIn: prometheus.NewCounterVec(prometheus.CounterOpts{
- Namespace: namespace,
- Subsystem: serverSubsystem,
- Name: "traffic_in",
- Help: "The total in traffic",
- }, []string{"name", "type"}),
- trafficOut: prometheus.NewCounterVec(prometheus.CounterOpts{
- Namespace: namespace,
- Subsystem: serverSubsystem,
- Name: "traffic_out",
- Help: "The total out traffic",
- }, []string{"name", "type"}),
- }
- prometheus.MustRegister(m.clientCount)
- prometheus.MustRegister(m.proxyCount)
- prometheus.MustRegister(m.connectionCount)
- prometheus.MustRegister(m.trafficIn)
- prometheus.MustRegister(m.trafficOut)
- return m
- }
|