1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
package monitoring
import (
"time"
"github.com/prometheus/client_golang/prometheus"
)
type MeetingMetrics struct {
meetingCompleted prometheus.Summary
meetingsExpired prometheus.Counter
}
func NewMeetingMetrics() *MeetingMetrics {
meetingCompleted := prometheus.NewSummary(prometheus.SummaryOpts{
Namespace: "candid",
Subsystem: "rendevous",
Name: "meetings_completed_times",
Help: "The time between rendevous creation and its completion.",
})
mustRegisterPrometheusCollector(meetingCompleted)
meetingsExpired := prometheus.NewCounter(prometheus.CounterOpts{
Namespace: "candid",
Subsystem: "rendevous",
Name: "meetings_expired_count",
Help: "Count of rendevous which were never completed.",
})
mustRegisterPrometheusCollector(meetingsExpired)
return &MeetingMetrics{
meetingCompleted: meetingCompleted,
meetingsExpired: meetingsExpired,
}
}
func mustRegisterPrometheusCollector(c prometheus.Collector) {
err := prometheus.DefaultRegisterer.Register(c)
if err == nil {
return
}
if _, ok := err.(prometheus.AlreadyRegisteredError); ok {
return
}
panic(err)
}
func (m *MeetingMetrics) RequestCompleted(startTime time.Time) {
m.meetingCompleted.Observe(float64(time.Since(startTime)) / float64(time.Microsecond))
}
func (m *MeetingMetrics) RequestsExpired(count int) {
m.meetingsExpired.Add(float64(count))
}
|