99 lines
2.1 KiB
Go
99 lines
2.1 KiB
Go
package hodu
|
|
|
|
import "runtime"
|
|
import "github.com/prometheus/client_golang/prometheus"
|
|
|
|
type ServerCollector struct {
|
|
server *Server
|
|
BuildInfo *prometheus.Desc
|
|
ServerConns *prometheus.Desc
|
|
ServerRoutes *prometheus.Desc
|
|
ServerPeers *prometheus.Desc
|
|
SshProxySessions *prometheus.Desc
|
|
}
|
|
|
|
// NewServerCollector returns a new ServerCollector with all prometheus.Desc initialized
|
|
func NewServerCollector(server *Server) ServerCollector {
|
|
var prefix string
|
|
|
|
prefix = server.Name() + "_"
|
|
return ServerCollector{
|
|
server: server,
|
|
|
|
BuildInfo: prometheus.NewDesc(
|
|
prefix + "build_info",
|
|
"Build information",
|
|
[]string{
|
|
"goarch",
|
|
"goos",
|
|
"goversion",
|
|
}, nil,
|
|
),
|
|
|
|
ServerConns: prometheus.NewDesc(
|
|
prefix + "server_conns",
|
|
"Number of server connections from clients",
|
|
nil, nil,
|
|
),
|
|
ServerRoutes: prometheus.NewDesc(
|
|
prefix + "server_routes",
|
|
"Number of server-side routes",
|
|
nil, nil,
|
|
),
|
|
ServerPeers: prometheus.NewDesc(
|
|
prefix + "server_peers",
|
|
"Number of server-side peers",
|
|
nil, nil,
|
|
),
|
|
SshProxySessions: prometheus.NewDesc(
|
|
prefix + "pxy_ssh_sessions",
|
|
"Number of SSH proxy sessions",
|
|
nil, nil,
|
|
),
|
|
}
|
|
}
|
|
|
|
func (c ServerCollector) Describe(ch chan<- *prometheus.Desc) {
|
|
ch <- c.BuildInfo
|
|
ch <- c.ServerConns
|
|
ch <- c.ServerRoutes
|
|
ch <- c.ServerPeers
|
|
ch <- c.SshProxySessions
|
|
}
|
|
|
|
func (c ServerCollector) Collect(ch chan<- prometheus.Metric) {
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.BuildInfo,
|
|
prometheus.GaugeValue,
|
|
1,
|
|
runtime.GOARCH,
|
|
runtime.GOOS,
|
|
runtime.Version(),
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ServerConns,
|
|
prometheus.GaugeValue,
|
|
float64(c.server.stats.conns.Load()),
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ServerRoutes,
|
|
prometheus.GaugeValue,
|
|
float64(c.server.stats.routes.Load()),
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ServerPeers,
|
|
prometheus.GaugeValue,
|
|
float64(c.server.stats.peers.Load()),
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SshProxySessions,
|
|
prometheus.GaugeValue,
|
|
float64(c.server.stats.ssh_proxy_sessions.Load()),
|
|
)
|
|
}
|