ソースを参照

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 年 前
コミット
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
 	})
 }