From 4b2007d3d91dac67f40c20a808ae5801a94ecaba Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 1 Feb 2021 21:40:07 +0100 Subject: [PATCH] Increase the user metrics counter with events --- pkg/initialize/init.go | 1 + pkg/user/events.go | 27 +++++++++++++++++++++++++ pkg/user/listeners.go | 45 +++++++++++++++++++++++++++++++++++++++++ pkg/user/user_create.go | 12 +++++++---- 4 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 pkg/user/events.go create mode 100644 pkg/user/listeners.go diff --git a/pkg/initialize/init.go b/pkg/initialize/init.go index be09a614d..7a6141135 100644 --- a/pkg/initialize/init.go +++ b/pkg/initialize/init.go @@ -90,6 +90,7 @@ func FullInit() { // Start processing events go func() { models.RegisterListeners() + user.RegisterListeners() err := events.InitEvents() if err != nil { log.Fatal(err.Error()) diff --git a/pkg/user/events.go b/pkg/user/events.go new file mode 100644 index 000000000..cc9401086 --- /dev/null +++ b/pkg/user/events.go @@ -0,0 +1,27 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-2021 Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public Licensee as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public Licensee for more details. +// +// You should have received a copy of the GNU Affero General Public Licensee +// along with this program. If not, see . + +package user + +// UserCreatedEvent represents a UserCreatedEvent event +type UserCreatedEvent struct { + User *User +} + +// TopicName defines the name for UserCreatedEvent +func (t *UserCreatedEvent) TopicName() string { + return "user.created" +} diff --git a/pkg/user/listeners.go b/pkg/user/listeners.go new file mode 100644 index 000000000..479211982 --- /dev/null +++ b/pkg/user/listeners.go @@ -0,0 +1,45 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-2021 Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public Licensee as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public Licensee for more details. +// +// You should have received a copy of the GNU Affero General Public Licensee +// along with this program. If not, see . + +package user + +import ( + "code.vikunja.io/api/pkg/events" + "code.vikunja.io/api/pkg/metrics" + "github.com/ThreeDotsLabs/watermill/message" +) + +func RegisterListeners() { + events.RegisterListener((&UserCreatedEvent{}).TopicName(), &IncreaseUserCounter{}) +} + +/////// +// User Events + +// IncreaseUserCounter represents a listener +type IncreaseUserCounter struct { +} + +// Name defines the name for the IncreaseUserCounter listener +func (s *IncreaseUserCounter) Name() string { + return "increase.user.counter" +} + +// Hanlde is executed when the event IncreaseUserCounter listens on is fired +func (s *IncreaseUserCounter) Handle(payload message.Payload) (err error) { + metrics.UpdateCount(1, metrics.UserCountKey) + return nil +} diff --git a/pkg/user/user_create.go b/pkg/user/user_create.go index a7f4d9c0f..d74bccfed 100644 --- a/pkg/user/user_create.go +++ b/pkg/user/user_create.go @@ -18,8 +18,8 @@ package user import ( "code.vikunja.io/api/pkg/config" + "code.vikunja.io/api/pkg/events" "code.vikunja.io/api/pkg/mail" - "code.vikunja.io/api/pkg/metrics" "code.vikunja.io/api/pkg/utils" "golang.org/x/crypto/bcrypt" "xorm.io/xorm" @@ -70,15 +70,19 @@ func CreateUser(s *xorm.Session, user *User) (newUser *User, err error) { return nil, err } - // Update the metrics - metrics.UpdateCount(1, metrics.ActiveUsersKey) - // Get the full new User newUserOut, err := GetUserByID(s, user.ID) if err != nil { return nil, err } + err = events.Publish(&UserCreatedEvent{ + User: newUserOut, + }) + if err != nil { + return nil, err + } + sendConfirmEmail(user) return newUserOut, err