mirror of
https://github.com/postmannen/ctrl.git
synced 2024-12-15 17:51:15 +00:00
69995f76ca
updated references removed tui client removed ringbuffer persist store removed ringbuffer enabled audit logging moved audit logging to message readers disabled goreleaser update readme, cbor, zstd removed request type ping and pong update readme testing with cmd.WaitDelay for clicommand fixed readme removed ringbuffer flag default serialization set to cbor, default compression set to zstd, fixed race, removed event type ack and nack, also removed from subject. Fixed file stat error for copy log file removed remaining elements of the event type removed comments renamed toRingbufferCh to samToSendCh renamed directSAMSCh ro samSendLocalCh removed handler interface agpl3 license added license-change.md
197 lines
6.8 KiB
Go
197 lines
6.8 KiB
Go
package ctrl
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"net/http"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"github.com/prometheus/client_golang/prometheus/collectors"
|
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
|
)
|
|
|
|
// metrics are generally used to hold the structure around metrics
|
|
// handling
|
|
type metrics struct {
|
|
// The channel to pass metrics that should be processed.
|
|
promRegistry *prometheus.Registry
|
|
// host and port where prometheus metrics will be exported.
|
|
hostAndPort string
|
|
|
|
// The build version
|
|
promVersion *prometheus.GaugeVec
|
|
|
|
// --- Processes
|
|
// Prometheus metrics for total processes.
|
|
promProcessesTotal prometheus.Gauge
|
|
// Prometheus metrics for vector of process names.
|
|
promProcessesAllRunning *prometheus.GaugeVec
|
|
|
|
// --- Methods
|
|
// Prometheus metrics for number of hello nodes.
|
|
promHelloNodesTotal prometheus.Gauge
|
|
// Prometheus metrics for the vector of hello nodes.
|
|
promHelloNodesContactLast *prometheus.GaugeVec
|
|
|
|
// --- Ringbuffer
|
|
// Prometheus metrics for the last processed DB id in key
|
|
// value store.
|
|
promMessagesProcessedIDLast prometheus.Gauge
|
|
// Prometheus metrics for the total count of stalled
|
|
// messages in the ringbuffer.
|
|
promRingbufferStalledMessagesTotal prometheus.Counter
|
|
// Prometheus metrics for current messages in memory buffer.
|
|
promInMemoryBufferMessagesCurrent prometheus.Gauge
|
|
// Prometheus metrics for current messages delivered by a
|
|
// user into the system.
|
|
promUserMessagesTotal prometheus.Counter
|
|
// Metrics for nats messages delivered total.
|
|
promNatsDeliveredTotal prometheus.Counter
|
|
// Metrics for messages that failed to get ack replies.
|
|
promNatsMessagesFailedACKsTotal prometheus.Counter
|
|
// Metrics for messages that missed to get ack replies.
|
|
promNatsMessagesMissedACKsTotal prometheus.Counter
|
|
// Metrics for received error messages
|
|
promErrorMessagesReceivedTotal prometheus.Counter
|
|
// Metrics for sent error messages
|
|
promErrorMessagesSentTotal prometheus.Counter
|
|
// Metrics for sent info messages
|
|
promInfoMessagesSentTotal prometheus.Counter
|
|
// Metrics for the amount of messages currently in db.
|
|
promDBMessagesCurrent prometheus.Gauge
|
|
}
|
|
|
|
// newMetrics will prepare and return a *metrics.
|
|
func newMetrics(hostAndPort string) *metrics {
|
|
reg := prometheus.NewRegistry()
|
|
//prometheus.Unregister(prometheus.NewGoCollector()).
|
|
reg.MustRegister(collectors.NewGoCollector())
|
|
// prometheus.MustRegister(collectors.NewGoCollector()).
|
|
m := metrics{
|
|
promRegistry: reg,
|
|
hostAndPort: hostAndPort,
|
|
}
|
|
|
|
m.promVersion = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
|
Name: "ctrl_build_version",
|
|
Help: "Build version of ctrl",
|
|
}, []string{"version"},
|
|
)
|
|
m.promRegistry.MustRegister(m.promVersion)
|
|
|
|
m.promProcessesTotal = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "ctrl_processes_total",
|
|
Help: "The current number of total running processes",
|
|
})
|
|
m.promRegistry.MustRegister(m.promProcessesTotal)
|
|
|
|
m.promProcessesAllRunning = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
|
Name: "ctrl_processes_all_running",
|
|
Help: "Name of the running processes",
|
|
}, []string{"processName"},
|
|
)
|
|
m.promRegistry.MustRegister(m.promProcessesAllRunning)
|
|
|
|
m.promHelloNodesTotal = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "ctrl_hello_nodes_total",
|
|
Help: "The current number of total nodes who have said hello",
|
|
})
|
|
m.promRegistry.MustRegister(m.promHelloNodesTotal)
|
|
|
|
m.promHelloNodesContactLast = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
|
Name: "ctrl_hello_node_contact_last",
|
|
Help: "Name of the nodes who have said hello",
|
|
}, []string{"nodeName"})
|
|
m.promRegistry.MustRegister(m.promHelloNodesContactLast)
|
|
|
|
m.promMessagesProcessedIDLast = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "ctrl_messages_processed_id_last",
|
|
Help: "The last processed id in key value/store db",
|
|
})
|
|
m.promRegistry.MustRegister(m.promMessagesProcessedIDLast)
|
|
|
|
m.promRingbufferStalledMessagesTotal = prometheus.NewCounter(prometheus.CounterOpts{
|
|
Name: "ctrl_ringbuffer_stalled_messages_total",
|
|
Help: "Number of stalled messages in ringbuffer",
|
|
})
|
|
m.promRegistry.MustRegister(m.promRingbufferStalledMessagesTotal)
|
|
|
|
m.promInMemoryBufferMessagesCurrent = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "ctrl_in_memory_buffer_messages_current",
|
|
Help: "The current value of messages in memory buffer",
|
|
})
|
|
m.promRegistry.MustRegister(m.promInMemoryBufferMessagesCurrent)
|
|
|
|
// Register som metrics for messages delivered by users into the system.
|
|
m.promUserMessagesTotal = prometheus.NewCounter(prometheus.CounterOpts{
|
|
Name: "ctrl_user_messages_total",
|
|
Help: "Number of total messages delivered by users into the system",
|
|
})
|
|
m.promRegistry.MustRegister(m.promUserMessagesTotal)
|
|
|
|
m.promNatsDeliveredTotal = prometheus.NewCounter(prometheus.CounterOpts{
|
|
Name: "ctrl_nats_delivered_total",
|
|
Help: "Number of total messages delivered by nats",
|
|
})
|
|
m.promRegistry.MustRegister(m.promNatsDeliveredTotal)
|
|
|
|
m.promNatsMessagesFailedACKsTotal = prometheus.NewCounter(prometheus.CounterOpts{
|
|
Name: "ctrl_nats_messages_failed_acks_total",
|
|
Help: "Number of messages that never received an ack total",
|
|
})
|
|
m.promRegistry.MustRegister(m.promNatsMessagesFailedACKsTotal)
|
|
|
|
m.promNatsMessagesMissedACKsTotal = prometheus.NewCounter(prometheus.CounterOpts{
|
|
Name: "ctrl_nats_messages_missed_acks_total",
|
|
Help: "Number of messages missed receiving an ack total",
|
|
})
|
|
m.promRegistry.MustRegister(m.promNatsMessagesMissedACKsTotal)
|
|
|
|
m.promErrorMessagesReceivedTotal = prometheus.NewCounter(prometheus.CounterOpts{
|
|
Name: "ctrl_error_messages_received_total",
|
|
Help: "Number of error messages received total",
|
|
})
|
|
m.promRegistry.MustRegister(m.promErrorMessagesReceivedTotal)
|
|
|
|
m.promErrorMessagesSentTotal = prometheus.NewCounter(prometheus.CounterOpts{
|
|
Name: "ctrl_error_messages_sent_total",
|
|
Help: "Number of error messages sent total",
|
|
})
|
|
m.promRegistry.MustRegister(m.promErrorMessagesSentTotal)
|
|
|
|
m.promInfoMessagesSentTotal = prometheus.NewCounter(prometheus.CounterOpts{
|
|
Name: "ctrl_info_messages_sent_total",
|
|
Help: "Number of info messages sent total",
|
|
})
|
|
m.promRegistry.MustRegister(m.promInfoMessagesSentTotal)
|
|
|
|
m.promDBMessagesCurrent = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "ctrl_db_messages_current",
|
|
Help: "The current value messages in database",
|
|
})
|
|
m.promRegistry.MustRegister(m.promDBMessagesCurrent)
|
|
|
|
return &m
|
|
}
|
|
|
|
// Start the http interface for Prometheus metrics.
|
|
func (m *metrics) start() error {
|
|
|
|
//http.Handle("/metrics", promhttp.Handler())
|
|
//http.ListenAndServe(":2112", nil)
|
|
n, err := net.Listen("tcp", m.hostAndPort)
|
|
if err != nil {
|
|
return fmt.Errorf("error: startMetrics: failed to open prometheus listen port: %v", err)
|
|
}
|
|
//mux := http.NewServeMux()
|
|
//mux.Handle("/metrics", promhttp.Handler())
|
|
|
|
http.Handle("/metrics", promhttp.HandlerFor(m.promRegistry, promhttp.HandlerOpts{}))
|
|
|
|
err = http.Serve(n, nil)
|
|
if err != nil {
|
|
return fmt.Errorf("error: startMetrics: failed to start http.Serve: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|