From 785072086cb31568b9eb77b5864a7af4e33c3616 Mon Sep 17 00:00:00 2001 From: Stephanie Hingtgen Date: Thu, 26 Aug 2021 07:50:05 -0600 Subject: [PATCH] Add event after datasource create (#38467) * Add event after datasource create --- pkg/events/events.go | 8 +++++++ pkg/services/sqlstore/datasource.go | 8 +++++++ pkg/services/sqlstore/datasource_test.go | 27 ++++++++++++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/pkg/events/events.go b/pkg/events/events.go index 24367a4e1cf..dcd145d171c 100644 --- a/pkg/events/events.go +++ b/pkg/events/events.go @@ -54,3 +54,11 @@ type DataSourceDeleted struct { UID string `json:"uid"` OrgID int64 `json:"org_id"` } + +type DataSourceCreated struct { + Timestamp time.Time `json:"timestamp"` + Name string `json:"name"` + ID int64 `json:"id"` + UID string `json:"uid"` + OrgID int64 `json:"org_id"` +} diff --git a/pkg/services/sqlstore/datasource.go b/pkg/services/sqlstore/datasource.go index 0846732350c..6c70cb8c1c4 100644 --- a/pkg/services/sqlstore/datasource.go +++ b/pkg/services/sqlstore/datasource.go @@ -214,6 +214,14 @@ func AddDataSource(cmd *models.AddDataSourceCommand) error { } cmd.Result = ds + + sess.publishAfterCommit(&events.DataSourceCreated{ + Timestamp: time.Now(), + Name: cmd.Name, + ID: ds.Id, + UID: cmd.Uid, + OrgID: cmd.OrgId, + }) return nil }) } diff --git a/pkg/services/sqlstore/datasource_test.go b/pkg/services/sqlstore/datasource_test.go index 6d89782b2ec..dbe184768d4 100644 --- a/pkg/services/sqlstore/datasource_test.go +++ b/pkg/services/sqlstore/datasource_test.go @@ -90,6 +90,33 @@ func TestDataAccess(t *testing.T) { require.Error(t, err) require.IsType(t, models.ErrDataSourceUidExists, err) }) + + t.Run("fires an event when the datasource is added", func(t *testing.T) { + InitTestDB(t) + + var created *events.DataSourceCreated + bus.AddEventListener(func(e *events.DataSourceCreated) error { + created = e + return nil + }) + + err := AddDataSource(&defaultAddDatasourceCommand) + require.NoError(t, err) + + require.Eventually(t, func() bool { + return assert.NotNil(t, created) + }, time.Second, time.Millisecond) + + query := models.GetDataSourcesQuery{OrgId: 10} + err = GetDataSources(&query) + require.NoError(t, err) + require.Equal(t, 1, len(query.Result)) + + require.Equal(t, query.Result[0].Id, created.ID) + require.Equal(t, query.Result[0].Uid, created.UID) + require.Equal(t, int64(10), created.OrgID) + require.Equal(t, "nisse", created.Name) + }) }) t.Run("UpdateDataSource", func(t *testing.T) {