mirror of https://github.com/fatedier/frp.git
96 lines
2.7 KiB
Go
96 lines
2.7 KiB
Go
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
|
|
}
|