From 2c02b0c9412272231d51702108f72b8b08f06138 Mon Sep 17 00:00:00 2001 From: Peter Kurfer Date: Tue, 26 Jan 2021 19:00:46 +0100 Subject: [PATCH] Add basic metric sink --- internal/app/app.go | 9 +++++++++ pkg/audit/sink/metric_sink.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 pkg/audit/sink/metric_sink.go diff --git a/internal/app/app.go b/internal/app/app.go index 871b737..aeb0494 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -290,6 +290,15 @@ func (a *app) WithEventStream() App { return } + var metricSink audit.Sink + if metricSink, err = sink.NewMetricSink(); err != nil { + return + } + + if err = eventStream.RegisterSink(a.ctx, metricSink); err != nil { + return + } + a.ctx = context.WithValue(a.ctx, eventStreamKey, eventStream) return }) diff --git a/pkg/audit/sink/metric_sink.go b/pkg/audit/sink/metric_sink.go new file mode 100644 index 0000000..2090dcb --- /dev/null +++ b/pkg/audit/sink/metric_sink.go @@ -0,0 +1,34 @@ +package sink + +import ( + "github.com/prometheus/client_golang/prometheus" + "gitlab.com/inetmock/inetmock/pkg/audit" + "gitlab.com/inetmock/inetmock/pkg/metrics" +) + +func NewMetricSink() (sink audit.Sink, err error) { + var totalEventsCounter *prometheus.CounterVec + if totalEventsCounter, err = metrics.Counter("audit", "events_total", "", "application", "transport"); err != nil { + return + } + sink = &metricSink{ + eventCounter: totalEventsCounter, + } + return +} + +type metricSink struct { + eventCounter *prometheus.CounterVec +} + +func (metricSink) Name() string { + return "metrics" +} + +func (m metricSink) OnSubscribe(evs <-chan audit.Event) { + go func(evs <-chan audit.Event) { + for ev := range evs { + m.eventCounter.WithLabelValues(ev.Application.String(), ev.Transport.String()).Inc() + } + }(evs) +}