diff --git a/pkg/cmd/web.go b/pkg/cmd/web.go index dfc5ff41bb3..a5c760634d0 100644 --- a/pkg/cmd/web.go +++ b/pkg/cmd/web.go @@ -85,7 +85,6 @@ func runWeb(c *cli.Context) { eventpublisher.Init() var err error - m := newMacaron() api.Register(m) diff --git a/pkg/events/events.go b/pkg/events/events.go index cba16a9cc46..9101a9236e3 100644 --- a/pkg/events/events.go +++ b/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"` +} diff --git a/pkg/models/notification.go b/pkg/models/notification.go deleted file mode 100644 index f849c4f6274..00000000000 --- a/pkg/models/notification.go +++ /dev/null @@ -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"` -} - diff --git a/pkg/services/sqlstore/account.go b/pkg/services/sqlstore/account.go index 960c2b5b3a5..c2154624d62 100644 --- a/pkg/services/sqlstore/account.go +++ b/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, diff --git a/pkg/services/sqlstore/sqlstore.go b/pkg/services/sqlstore/sqlstore.go index 9d1bef8106f..9200ef6ec2c 100644 --- a/pkg/services/sqlstore/sqlstore.go +++ b/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) } } diff --git a/pkg/services/sqlstore/user.go b/pkg/services/sqlstore/user.go index c03057705f5..ffb73d9cf0b 100644 --- a/pkg/services/sqlstore/user.go +++ b/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 + } + + sess.publishAfterCommit(&events.UserCreated{ + Timestamp: user.Created, + Id: user.Id, + Name: user.Name, + Login: user.Login, + Email: user.Email, + }) cmd.Result = user - _ = bus.Publish(&m.Notification{ - EventType: "user.create", - Timestamp: user.Created, - Priority: m.PRIO_INFO, - Payload: user, - }) - return err + 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 }) }