package log
import (
"github.com/prometheus/client_golang/prometheus"
"github.com/sirupsen/logrus"
)
var (
DefaultMetrics = NewMetrics()
)
type Metrics struct {
logEmitedCounter *prometheus.CounterVec
}
func (m *Metrics) ReportLog(level logrus.Level) {
m.logEmitedCounter.WithLabelValues(level.String()).Inc()
}
func NewMetrics() *Metrics {
return &Metrics{
logEmitedCounter: prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "gitpod_logs_total",
Help: "Total number of logs produced by level",
}, []string{"level"}),
}
}
func (m *Metrics) Describe(ch chan<- *prometheus.Desc) {
m.logEmitedCounter.Describe(ch)
}
func (m *Metrics) Collect(ch chan<- prometheus.Metric) {
m.logEmitedCounter.Collect(ch)
}
func NewLogHook(metrics *Metrics) *LogHook {
return &LogHook{metrics: metrics}
}
type LogHook struct {
metrics *Metrics
}
func (h *LogHook) Levels() []logrus.Level {
return logrus.AllLevels
}
func (h *LogHook) Fire(entry *logrus.Entry) error {
h.metrics.ReportLog(entry.Level)
return nil
}