diff --git a/databases.go b/databases.go index 952663e..2deb17b 100644 --- a/databases.go +++ b/databases.go @@ -35,6 +35,7 @@ const ( databaseTopicPath = databaseBasePath + "/%s/topics/%s" databaseTopicsPath = databaseBasePath + "/%s/topics" databaseMetricsCredentialsPath = databaseBasePath + "/metrics/credentials" + databaseEvents = databaseBasePath + "/%s/events" ) // SQL Mode constants allow for MySQL-specific SQL flavor configuration. @@ -157,6 +158,7 @@ type DatabasesService interface { UpdateTopic(context.Context, string, string, *DatabaseUpdateTopicRequest) (*Response, error) GetMetricsCredentials(context.Context) (*DatabaseMetricsCredentials, *Response, error) UpdateMetricsCredentials(context.Context, *DatabaseUpdateMetricsCredentialsRequest) (*Response, error) + ListDatabaseEvents(context.Context, string) ([]*DatabaseEvent, *Response, error) } // DatabasesServiceOp handles communication with the Databases related methods @@ -711,6 +713,23 @@ type DatabaseLayout struct { Sizes []string `json:"sizes"` } +// ListDatabaseEvents contains a list of project events. +type ListDatabaseEvents struct { + Events []*DatabaseEvent `json:"events"` +} + +// DatbaseEvent contains the information about a Datbase event. +type DatabaseEvent struct { + ID string `json:"id"` + ServiceName string `json:"cluster_name"` + EventType string `json:"event_type"` + CreateTime string `json:"create_time"` +} + +type ListDatabaseEventsRoot struct { + Events []*DatabaseEvent `json:"events"` +} + // URN returns a URN identifier for the database func (d Database) URN() string { return ToURN("dbaas", d.ID) @@ -1517,3 +1536,20 @@ func (svc *DatabasesServiceOp) UpdateMetricsCredentials(ctx context.Context, upd } return resp, nil } + +func (svc *DatabasesServiceOp) ListDatabaseEvents(ctx context.Context, databaseID string) ([]*DatabaseEvent, *Response, error) { + path := fmt.Sprintf(databaseEvents, databaseID) + root := new(ListDatabaseEventsRoot) + req, err := svc.client.NewRequest(ctx, http.MethodGet, path, nil) + if err != nil { + return nil, nil, err + } + + resp, err := svc.client.Do(ctx, req, root) + if err != nil { + return nil, resp, err + } + + return root.Events, resp, nil + +} diff --git a/databases_test.go b/databases_test.go index e95db8a..2035ccf 100644 --- a/databases_test.go +++ b/databases_test.go @@ -3128,3 +3128,41 @@ func TestDatabases_UpdateMetricsCredentials(t *testing.T) { _, err := client.Databases.UpdateMetricsCredentials(ctx, updateRequest) require.NoError(t, err) } + +func TestDatabases_ListDatabaseEvents(t *testing.T) { + setup() + defer teardown() + + dbID := "deadbeef-dead-4aa5-beef-deadbeef347d" + + path := fmt.Sprintf("/v2/databases/%s/events", dbID) + + want := []*DatabaseEvent{ + { + ID: "pe8u2huh", + ServiceName: "customer-events", + EventType: "cluster_create", + CreateTime: "2020-10-29T15:57:38Z", + }, + } + + body := `{ + "events": [ + { + "id": "pe8u2huh", + "cluster_name": "customer-events", + "event_type": "cluster_create", + "create_time": "2020-10-29T15:57:38Z" + } + ] + } ` + + mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, http.MethodGet) + fmt.Fprint(w, body) + }) + + got, _, err := client.Databases.ListDatabaseEvents(ctx, dbID) + require.NoError(t, err) + require.Equal(t, want, got) +}