From 56c712e6b6ad0929c6b44fa68aa372509aeafcd5 Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 1 Feb 2021 21:15:21 +0100 Subject: [PATCH] Increase and decrease the namespace metrics counter with events --- pkg/metrics/metrics.go | 2 +- pkg/models/events.go | 11 +++++++++++ pkg/models/listeners.go | 39 +++++++++++++++++++++++++++++++++++++-- pkg/models/namespace.go | 13 ++++++++----- 4 files changed, 57 insertions(+), 8 deletions(-) diff --git a/pkg/metrics/metrics.go b/pkg/metrics/metrics.go index fe40a9d29..69899d890 100644 --- a/pkg/metrics/metrics.go +++ b/pkg/metrics/metrics.go @@ -88,7 +88,7 @@ func InitMetrics() { // Register total Namespaces count metric err = registry.Register(promauto.NewGaugeFunc(prometheus.GaugeOpts{ - Name: "vikunja_namespcae_count", + Name: "vikunja_namespace_count", Help: "The total number of namespaces on this instance", }, func() float64 { count, _ := GetCount(NamespaceCountKey) diff --git a/pkg/models/events.go b/pkg/models/events.go index bd0128992..8c7d06845 100644 --- a/pkg/models/events.go +++ b/pkg/models/events.go @@ -84,6 +84,17 @@ func (n *NamespaceUpdatedEvent) TopicName() string { return "namespace.updated" } +// NamespaceDeletedEvent represents a NamespaceDeletedEvent event +type NamespaceDeletedEvent struct { + Namespace *Namespace + Doer *user.User +} + +// TopicName defines the name for NamespaceDeletedEvent +func (t *NamespaceDeletedEvent) TopicName() string { + return "namespace.deleted" +} + ///////////////// // List Events // ///////////////// diff --git a/pkg/models/listeners.go b/pkg/models/listeners.go index b158efd75..d39fd3c84 100644 --- a/pkg/models/listeners.go +++ b/pkg/models/listeners.go @@ -28,6 +28,8 @@ func RegisterListeners() { events.RegisterListener((&TaskCreatedEvent{}).TopicName(), &SendTaskCreatedNotification{}) events.RegisterListener((&ListCreatedEvent{}).TopicName(), &IncreaseListCounter{}) events.RegisterListener((&ListDeletedEvent{}).TopicName(), &DecreaseListCounter{}) + events.RegisterListener((&NamespaceCreatedEvent{}).TopicName(), &IncreaseNamespaceCounter{}) + events.RegisterListener((&NamespaceDeletedEvent{}).TopicName(), &DecreaseNamespaceCounter{}) } type SendTaskCreatedNotification struct { @@ -54,7 +56,7 @@ type IncreaseListCounter struct { } func (s *IncreaseListCounter) Name() string { - return "increase.list.counter" + return "list.counter.increase" } func (s *IncreaseListCounter) Handle(payload message.Payload) (err error) { @@ -66,10 +68,43 @@ type DecreaseListCounter struct { } func (s *DecreaseListCounter) Name() string { - return "decrease.list.counter" + return "list.counter.decrease" } func (s *DecreaseListCounter) Handle(payload message.Payload) (err error) { metrics.UpdateCount(-1, metrics.ListCountKey) return nil } + +////// +// Namespace events + +// IncreaseNamespaceCounter represents a listener +type IncreaseNamespaceCounter struct { +} + +// Name defines the name for the IncreaseNamespaceCounter listener +func (s *IncreaseNamespaceCounter) Name() string { + return "namespace.counter.increase" +} + +// Hanlde is executed when the event IncreaseNamespaceCounter listens on is fired +func (s *IncreaseNamespaceCounter) Handle(payload message.Payload) (err error) { + metrics.UpdateCount(1, metrics.NamespaceCountKey) + return nil +} + +// DecreaseNamespaceCounter represents a listener +type DecreaseNamespaceCounter struct { +} + +// Name defines the name for the DecreaseNamespaceCounter listener +func (s *DecreaseNamespaceCounter) Name() string { + return "namespace.counter.decrease" +} + +// Hanlde is executed when the event DecreaseNamespaceCounter listens on is fired +func (s *DecreaseNamespaceCounter) Handle(payload message.Payload) (err error) { + metrics.UpdateCount(-1, metrics.NamespaceCountKey) + return nil +} diff --git a/pkg/models/namespace.go b/pkg/models/namespace.go index 2a9fc97b1..e7d03b047 100644 --- a/pkg/models/namespace.go +++ b/pkg/models/namespace.go @@ -24,7 +24,6 @@ import ( "time" "code.vikunja.io/api/pkg/log" - "code.vikunja.io/api/pkg/metrics" "code.vikunja.io/api/pkg/user" "code.vikunja.io/web" "xorm.io/builder" @@ -487,7 +486,6 @@ func (n *Namespace) Create(s *xorm.Session, a web.Auth) (err error) { return err } - metrics.UpdateCount(1, metrics.NamespaceCountKey) return } @@ -552,9 +550,14 @@ func (n *Namespace) Delete(s *xorm.Session, a web.Auth) (err error) { return } - metrics.UpdateCount(-1, metrics.NamespaceCountKey) - - return + doer, err := user.GetFromAuth(a) + if err != nil { + return err + } + return events.Publish(&NamespaceDeletedEvent{ + Namespace: n, + Doer: doer, + }) } // Update implements the update method via the interface