Browse Source

More work on events, still have to convert pascal case event type name to rabbitmq dot notation, but after that should be done

Torkel Ödegaard 11 years ago
parent
commit
d8db5189c1

+ 0 - 1
pkg/cmd/web.go

@@ -85,7 +85,6 @@ func runWeb(c *cli.Context) {
 	eventpublisher.Init()
 
 	var err error
-
 	m := newMacaron()
 	api.Register(m)
 

+ 16 - 0
pkg/events/events.go

@@ -61,3 +61,19 @@ type AccountUpdated struct {
 	Id        int64     `json:"id"`
 	Name      string    `json:"name"`
 }
+
+type UserCreated struct {
+	Timestamp time.Time `json:"timestamp"`
+	Id        int64     `json:"id"`
+	Name      string    `json:"name"`
+	Login     string    `json:"login"`
+	Email     string    `json:"email"`
+}
+
+type UserUpdated struct {
+	Timestamp time.Time `json:"timestamp"`
+	Id        int64     `json:"id"`
+	Name      string    `json:"name"`
+	Login     string    `json:"login"`
+	Email     string    `json:"email"`
+}

+ 0 - 21
pkg/models/notification.go

@@ -1,21 +0,0 @@
-package models
-
-import (
-	"time"
-)
-
-type EventPriority string
-
-const (
-	PRIO_DEBUG EventPriority = "DEBUG"
-	PRIO_INFO EventPriority = "INFO"
-	PRIO_ERROR EventPriority = "ERROR"
-)
-
-type Notification struct {
-	EventType string `json:"event_type"`
-	Timestamp time.Time `json:"timestamp"`
-	Priority  EventPriority `json:"priority"`
-	Payload interface{} `json:"payload"`
-}
-

+ 1 - 1
pkg/services/sqlstore/account.go

@@ -92,7 +92,7 @@ func UpdateAccount(cmd *m.UpdateAccountCommand) error {
 			return err
 		}
 
-		sess.publishAfterCommit(events.AccountUpdated{
+		sess.publishAfterCommit(&events.AccountUpdated{
 			Timestamp: account.Updated,
 			Id:        account.Id,
 			Name:      account.Name,

+ 3 - 2
pkg/services/sqlstore/sqlstore.go

@@ -43,12 +43,13 @@ func EnsureAdminUser() {
 		cmd.IsAdmin = true
 
 		if err = bus.Dispatch(&cmd); err != nil {
-			log.Fatal(3, "Failed to create default admin user", err)
+			log.Error(3, "Failed to create default admin user", err)
+			return
 		}
 
 		log.Info("Created default admin user: %v", setting.AdminUser)
 	} else if err != nil {
-		log.Fatal(3, "Could not determine if admin user exists: %v", err)
+		log.Error(3, "Could not determine if admin user exists: %v", err)
 	}
 }
 

+ 27 - 21
pkg/services/sqlstore/user.go

@@ -7,6 +7,7 @@ import (
 	"github.com/go-xorm/xorm"
 
 	"github.com/torkelo/grafana-pro/pkg/bus"
+	"github.com/torkelo/grafana-pro/pkg/events"
 	m "github.com/torkelo/grafana-pro/pkg/models"
 	"github.com/torkelo/grafana-pro/pkg/setting"
 	"github.com/torkelo/grafana-pro/pkg/util"
@@ -23,7 +24,7 @@ func init() {
 	bus.AddHandler("sql", GetUserAccounts)
 }
 
-func getAccountIdForNewUser(userEmail string, sess *xorm.Session) (int64, error) {
+func getAccountIdForNewUser(userEmail string, sess *session) (int64, error) {
 	var account m.Account
 
 	if setting.SingleAccountMode {
@@ -51,7 +52,7 @@ func getAccountIdForNewUser(userEmail string, sess *xorm.Session) (int64, error)
 }
 
 func CreateUser(cmd *m.CreateUserCommand) error {
-	return inTransaction(func(sess *xorm.Session) error {
+	return inTransaction2(func(sess *session) error {
 		accountId, err := getAccountIdForNewUser(cmd.Email, sess)
 		if err != nil {
 			return err
@@ -92,16 +93,20 @@ func CreateUser(cmd *m.CreateUserCommand) error {
 			accountUser.Role = m.RoleType(setting.DefaultAccountRole)
 		}
 
-		_, err = sess.Insert(&accountUser)
+		if _, err = sess.Insert(&accountUser); err != nil {
+			return err
+		}
 
-		cmd.Result = user
-		_ = bus.Publish(&m.Notification{
-			EventType: "user.create",
+		sess.publishAfterCommit(&events.UserCreated{
 			Timestamp: user.Created,
-			Priority:  m.PRIO_INFO,
-			Payload:   user,
+			Id:        user.Id,
+			Name:      user.Name,
+			Login:     user.Login,
+			Email:     user.Email,
 		})
-		return err
+
+		cmd.Result = user
+		return nil
 	})
 }
 
@@ -131,7 +136,7 @@ func GetUserByLogin(query *m.GetUserByLoginQuery) error {
 }
 
 func UpdateUser(cmd *m.UpdateUserCommand) error {
-	return inTransaction(func(sess *xorm.Session) error {
+	return inTransaction2(func(sess *session) error {
 
 		user := m.User{
 			Name:    cmd.Name,
@@ -140,18 +145,19 @@ func UpdateUser(cmd *m.UpdateUserCommand) error {
 			Updated: time.Now(),
 		}
 
-		_, err := sess.Id(cmd.UserId).Update(&user)
-		if err == nil {
-			// silently ignore failures to publish events.
-			user.Id = cmd.UserId
-			_ = bus.Publish(&m.Notification{
-				EventType: "user.update",
-				Timestamp: user.Updated,
-				Priority:  m.PRIO_INFO,
-				Payload:   user,
-			})
+		if _, err := sess.Id(cmd.UserId).Update(&user); err != nil {
+			return err
 		}
-		return err
+
+		sess.publishAfterCommit(&events.UserUpdated{
+			Timestamp: user.Created,
+			Id:        user.Id,
+			Name:      user.Name,
+			Login:     user.Login,
+			Email:     user.Email,
+		})
+
+		return nil
 	})
 }