From dfbb3fe6f4f4b21b56a576e0df1d36b149438872 Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 1 Feb 2021 21:27:37 +0100 Subject: [PATCH] Increase and decrease the task metrics counter with events --- pkg/models/events.go | 11 +++++++++++ pkg/models/listeners.go | 41 ++++++++++++++++++++++++++++------------- pkg/models/tasks.go | 15 +++++++++++---- 3 files changed, 50 insertions(+), 17 deletions(-) diff --git a/pkg/models/events.go b/pkg/models/events.go index 8c7d06845..1cd8e341c 100644 --- a/pkg/models/events.go +++ b/pkg/models/events.go @@ -42,6 +42,17 @@ func (t *TaskUpdatedEvent) TopicName() string { return "task.updated" } +// TaskDeletedEvent represents a TaskDeletedEvent event +type TaskDeletedEvent struct { + Task *Task + Doer *user.User +} + +// TopicName defines the name for TaskDeletedEvent +func (t *TaskDeletedEvent) TopicName() string { + return "task.deleted" +} + type TaskAssigneeCreatedEvent struct { Task *Task Assignee *user.User diff --git a/pkg/models/listeners.go b/pkg/models/listeners.go index d39fd3c84..02ffab457 100644 --- a/pkg/models/listeners.go +++ b/pkg/models/listeners.go @@ -17,35 +17,50 @@ package models import ( - "code.vikunja.io/api/pkg/metrics" - "encoding/json" - "code.vikunja.io/api/pkg/events" + "code.vikunja.io/api/pkg/metrics" "github.com/ThreeDotsLabs/watermill/message" ) 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{}) + events.RegisterListener((&TaskCreatedEvent{}).TopicName(), &IncreaseTaskCounter{}) + events.RegisterListener((&TaskDeletedEvent{}).TopicName(), &DecreaseTaskCounter{}) } -type SendTaskCreatedNotification struct { +////// +// Task Events + +// IncreaseTaskCounter represents a listener +type IncreaseTaskCounter struct { } -func (s *SendTaskCreatedNotification) Name() string { - return "task.created.notification" +// Name defines the name for the IncreaseTaskCounter listener +func (s *IncreaseTaskCounter) Name() string { + return "increase.task.counter" } -func (s *SendTaskCreatedNotification) Handle(payload message.Payload) (err error) { - event := &TaskCreatedEvent{} - err = json.Unmarshal(payload, event) - if err != nil { - return err - } +// Hanlde is executed when the event IncreaseTaskCounter listens on is fired +func (s *IncreaseTaskCounter) Handle(payload message.Payload) (err error) { + metrics.UpdateCount(1, metrics.TaskCountKey) + return nil +} +// DecreaseTaskCounter represents a listener +type DecreaseTaskCounter struct { +} + +// Name defines the name for the DecreaseTaskCounter listener +func (s *DecreaseTaskCounter) Name() string { + return "decrease.task.counter" +} + +// Hanlde is executed when the event DecreaseTaskCounter listens on is fired +func (s *DecreaseTaskCounter) Handle(payload message.Payload) (err error) { + metrics.UpdateCount(-1, metrics.TaskCountKey) return nil } diff --git a/pkg/models/tasks.go b/pkg/models/tasks.go index c5cc94bc7..f56793d3c 100644 --- a/pkg/models/tasks.go +++ b/pkg/models/tasks.go @@ -26,7 +26,6 @@ import ( "code.vikunja.io/api/pkg/db" "code.vikunja.io/api/pkg/config" - "code.vikunja.io/api/pkg/metrics" "code.vikunja.io/api/pkg/user" "code.vikunja.io/api/pkg/utils" "code.vikunja.io/web" @@ -825,8 +824,6 @@ func createTask(s *xorm.Session, t *Task, a web.Auth, updateAssignees bool) (err return err } - metrics.UpdateCount(1, metrics.TaskCountKey) - t.setIdentifier(l) err = events.Publish(&TaskCreatedEvent{ @@ -1198,7 +1195,17 @@ func (t *Task) Delete(s *xorm.Session, a web.Auth) (err error) { return err } - metrics.UpdateCount(-1, metrics.TaskCountKey) + doer, err := user.GetFromAuth(a) + if err != nil { + return err + } + err = events.Publish(&TaskDeletedEvent{ + Task: t, + Doer: doer, + }) + if err != nil { + return + } err = updateListLastUpdated(s, &List{ID: t.ListID}) return