Skip to content

Commit e2a07a2

Browse files
authored
feat: Add datadog_rum_events table (#11229)
Closes #11044
1 parent c65ed23 commit e2a07a2

File tree

12 files changed

+206
-0
lines changed

12 files changed

+206
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package client
2+
3+
import (
4+
"context"
5+
6+
"github.com/DataDog/datadog-api-client-go/v2/api/datadog"
7+
)
8+
9+
func ConsumePaginatedResponse[T any](response <-chan datadog.PaginationResult[T], cancel context.CancelFunc, res chan<- any) error {
10+
defer cancel()
11+
for item := range response {
12+
if item.Error != nil {
13+
return item.Error
14+
}
15+
res <- item.Item
16+
}
17+
return nil
18+
}

plugins/source/datadog/client/mocks/rum_api.go

Lines changed: 79 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/source/datadog/client/services.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/source/datadog/client/services/rum_api.go

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/source/datadog/client/testing.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"testing"
77
"time"
88

9+
"github.com/DataDog/datadog-api-client-go/v2/api/datadog"
910
"github.com/cloudquery/plugin-pb-go/specs"
1011
"github.com/cloudquery/plugin-sdk/v3/plugins/source"
1112
"github.com/cloudquery/plugin-sdk/v3/schema"
@@ -46,3 +47,10 @@ func DatadogMockTestHelper(t *testing.T, table *schema.Table, builder func(*test
4647
Destinations: []string{"mock-destination"},
4748
})
4849
}
50+
51+
func MockPaginatedResponse[T any](result T) (<-chan datadog.PaginationResult[T], func()) {
52+
ch := make(chan datadog.PaginationResult[T], 1)
53+
ch <- datadog.PaginationResult[T]{Item: result}
54+
close(ch)
55+
return ch, func() {}
56+
}

plugins/source/datadog/codegen/services/clients.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ var clients = []any{
1818
&datadogV1.ServiceLevelObjectiveCorrectionsApi{},
1919
&datadogV1.SyntheticsApi{},
2020
&datadogV2.UsersApi{},
21+
&datadogV2.RUMApi{},
2122
}

plugins/source/datadog/docs/tables/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
- [datadog_roles](../../../../../website/tables/datadog/datadog_roles.md)
1717
- [datadog_role_permissions](../../../../../website/tables/datadog/datadog_role_permissions.md)
1818
- [datadog_role_users](../../../../../website/tables/datadog/datadog_role_users.md)
19+
- [datadog_rum_events](../../../../../website/tables/datadog/datadog_rum_events.md)
1920
- [datadog_slo_corrections](../../../../../website/tables/datadog/datadog_slo_corrections.md)
2021
- [datadog_slos](../../../../../website/tables/datadog/datadog_slos.md)
2122
- [datadog_synthetics](../../../../../website/tables/datadog/datadog_synthetics.md)

plugins/source/datadog/resources/plugin/tables.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/cloudquery/cloudquery/plugins/source/datadog/resources/services/monitors"
1010
"github.com/cloudquery/cloudquery/plugins/source/datadog/resources/services/notebooks"
1111
"github.com/cloudquery/cloudquery/plugins/source/datadog/resources/services/roles"
12+
"github.com/cloudquery/cloudquery/plugins/source/datadog/resources/services/rum"
1213
"github.com/cloudquery/cloudquery/plugins/source/datadog/resources/services/slos"
1314
"github.com/cloudquery/cloudquery/plugins/source/datadog/resources/services/synthetics"
1415
"github.com/cloudquery/cloudquery/plugins/source/datadog/resources/services/users"
@@ -26,6 +27,7 @@ func Tables() []*schema.Table {
2627
notebooks.Notebooks(),
2728
roles.Roles(),
2829
roles.Permissions(),
30+
rum.Events(),
2931
slos.Objectives(),
3032
slos.ObjectiveCorrections(),
3133
synthetics.GlobalVariables(),
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package rum
2+
3+
import (
4+
"context"
5+
6+
"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
7+
"github.com/cloudquery/cloudquery/plugins/source/datadog/client"
8+
"github.com/cloudquery/plugin-sdk/v3/schema"
9+
"github.com/cloudquery/plugin-sdk/v3/transformers"
10+
)
11+
12+
func Events() *schema.Table {
13+
return &schema.Table{
14+
Name: "datadog_rum_events",
15+
Title: "Datadog Real User Monitoring (RUM) Events",
16+
Resolver: fetchEvents,
17+
Multiplex: client.AccountMultiplex,
18+
Transform: client.TransformWithStruct(new(datadogV2.RUMEvent), transformers.WithPrimaryKeys("Id")),
19+
Columns: schema.ColumnList{client.AccountNameColumn},
20+
}
21+
}
22+
23+
func fetchEvents(ctx context.Context, meta schema.ClientMeta, _ *schema.Resource, res chan<- any) error {
24+
c := meta.(*client.Client)
25+
resp, cancel := c.DDServices.RumAPI.ListRUMEventsWithPagination(c.BuildContextV2(ctx))
26+
return client.ConsumePaginatedResponse(resp, cancel, res)
27+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package rum
2+
3+
import (
4+
"testing"
5+
6+
"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
7+
"github.com/cloudquery/cloudquery/plugins/source/datadog/client"
8+
"github.com/cloudquery/cloudquery/plugins/source/datadog/client/mocks"
9+
"github.com/cloudquery/plugin-sdk/v3/faker"
10+
"github.com/golang/mock/gomock"
11+
)
12+
13+
func buildEventsMock(t *testing.T, ctrl *gomock.Controller) client.DatadogServices {
14+
m := mocks.NewMockRumAPIClient(ctrl)
15+
services := client.DatadogServices{
16+
RumAPI: m,
17+
}
18+
19+
var i datadogV2.RUMEvent
20+
err := faker.FakeObject(&i)
21+
if err != nil {
22+
t.Fatal(err)
23+
}
24+
m.EXPECT().ListRUMEventsWithPagination(gomock.Any()).Return(client.MockPaginatedResponse(i))
25+
26+
return services
27+
}
28+
29+
func TestEvents(t *testing.T) {
30+
client.DatadogMockTestHelper(t, Events(), buildEventsMock, client.TestOptions{})
31+
}

0 commit comments

Comments
 (0)