1
0
Fork 0
mirror of https://github.com/postmannen/ctrl.git synced 2024-12-14 12:37:31 +00:00
ctrl/metrics.go

79 lines
2.3 KiB
Go
Raw Normal View History

2021-02-18 11:29:14 +00:00
package steward
import (
2021-08-03 11:57:29 +00:00
"fmt"
"net"
2021-02-18 11:29:14 +00:00
"net/http"
"github.com/prometheus/client_golang/prometheus"
2021-08-18 10:16:21 +00:00
"github.com/prometheus/client_golang/prometheus/collectors"
2021-02-18 11:29:14 +00:00
"github.com/prometheus/client_golang/prometheus/promhttp"
)
// metrics are generally used to hold the structure around metrics
// handling
2021-02-18 11:29:14 +00:00
type metrics struct {
2021-08-18 13:41:53 +00:00
// The channel to pass metrics that should be processed.
2021-04-12 08:51:26 +00:00
promRegistry *prometheus.Registry
2021-08-18 13:41:53 +00:00
// host and port where prometheus metrics will be exported.
hostAndPort string
// --- Processes
2021-08-18 13:41:53 +00:00
// Prometheus metrics for total processes.
promProcessesTotal prometheus.Gauge
// Prometheus metrics for vector of process names.
promProcessesAllRunning *prometheus.GaugeVec
// --- Methods
2021-08-18 13:41:53 +00:00
// Prometheus metrics for number of hello nodes.
promHelloNodesTotal prometheus.Gauge
// Prometheus metrics for the vector of hello nodes.
promHelloNodesContactLast *prometheus.GaugeVec
// --- Ringbuffer
2021-08-18 13:41:53 +00:00
// Prometheus metrics for the last processed DB id in key
// value store.
promMessagesProcessedTotal prometheus.Gauge
// Prometheus metrics for the total count of stalled
// messages in the ringbuffer.
2021-08-18 13:41:53 +00:00
promRingbufferStalledMessagesTotal prometheus.Counter
// Prometheus metrics for current messages in memory buffer
promInMemoryBufferMessagesCurrent prometheus.Gauge
2021-02-18 11:29:14 +00:00
}
// newMetrics will prepare and return a *metrics.
func newMetrics(hostAndPort string) *metrics {
2021-08-18 10:16:21 +00:00
reg := prometheus.NewRegistry()
//prometheus.Unregister(prometheus.NewGoCollector()).
2021-08-18 10:16:21 +00:00
reg.MustRegister(collectors.NewGoCollector())
// prometheus.MustRegister(collectors.NewGoCollector()).
2021-02-18 11:29:14 +00:00
m := metrics{
2021-08-18 10:16:21 +00:00
promRegistry: reg,
2021-04-12 08:51:26 +00:00
hostAndPort: hostAndPort,
2021-02-18 11:29:14 +00:00
}
return &m
}
2021-08-16 11:01:12 +00:00
// Start the http interface for Prometheus metrics.
2021-08-04 08:37:24 +00:00
func (m *metrics) start() error {
2021-02-18 11:29:14 +00:00
//http.Handle("/metrics", promhttp.Handler())
//http.ListenAndServe(":2112", nil)
2021-08-04 08:37:24 +00:00
n, err := net.Listen("tcp", m.hostAndPort)
if err != nil {
2021-08-03 11:57:29 +00:00
return fmt.Errorf("error: startMetrics: failed to open prometheus listen port: %v", err)
}
2021-08-18 10:16:21 +00:00
//mux := http.NewServeMux()
//mux.Handle("/metrics", promhttp.Handler())
2021-08-03 11:57:29 +00:00
2021-08-18 10:16:21 +00:00
http.Handle("/metrics", promhttp.HandlerFor(m.promRegistry, promhttp.HandlerOpts{}))
err = http.Serve(n, nil)
2021-08-03 11:57:29 +00:00
if err != nil {
return fmt.Errorf("error: startMetrics: failed to start http.Serve: %v", err)
}
return nil
2021-02-18 11:29:14 +00:00
}