Skip to content

Commit cbc2fb1

Browse files
authored
feat(aws): Add Support for CloudWatch Filter Subscriptions (#8073)
#### Summary Moved functions defined in `_fetch` files into the same file where the table is defined <!--
1 parent a7c64cd commit cbc2fb1

File tree

10 files changed

+147
-67
lines changed

10 files changed

+147
-67
lines changed

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

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Table: aws_cloudwatchlogs_log_group_subscription_filters
2+
3+
https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_SubscriptionFilter.html
4+
5+
The composite primary key for this table is (**log_group_arn**, **creation_time**, **filter_name**).
6+
7+
## Relations
8+
9+
This table depends on [aws_cloudwatchlogs_log_groups](aws_cloudwatchlogs_log_groups.md).
10+
11+
## Columns
12+
13+
| Name | Type |
14+
| ------------- | ------------- |
15+
|_cq_source_name|String|
16+
|_cq_sync_time|Timestamp|
17+
|_cq_id|UUID|
18+
|_cq_parent_id|UUID|
19+
|account_id|String|
20+
|region|String|
21+
|log_group_arn (PK)|String|
22+
|creation_time (PK)|Int|
23+
|destination_arn|String|
24+
|distribution|String|
25+
|filter_name (PK)|String|
26+
|filter_pattern|String|
27+
|log_group_name|String|
28+
|role_arn|String|

plugins/source/aws/docs/tables/aws_cloudwatchlogs_log_groups.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_LogGrou
44

55
The primary key for this table is **arn**.
66

7+
## Relations
8+
9+
The following tables depend on aws_cloudwatchlogs_log_groups:
10+
- [aws_cloudwatchlogs_log_group_subscription_filters](aws_cloudwatchlogs_log_group_subscription_filters.md)
11+
712
## Columns
813

914
| Name | Type |

plugins/source/aws/resources/services/cloudwatchlogs/log_groups.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package cloudwatchlogs
22

33
import (
4+
"context"
5+
6+
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs"
47
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs/types"
58
"github.com/cloudquery/cloudquery/plugins/source/aws/client"
69
"github.com/cloudquery/plugin-sdk/schema"
@@ -31,5 +34,33 @@ func LogGroups() *schema.Table {
3134
Resolver: resolveLogGroupTags,
3235
},
3336
},
37+
Relations: []*schema.Table{
38+
subscriptionFilters(),
39+
},
40+
}
41+
}
42+
43+
func fetchCloudwatchlogsLogGroups(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error {
44+
var config cloudwatchlogs.DescribeLogGroupsInput
45+
c := meta.(*client.Client)
46+
svc := c.Services().Cloudwatchlogs
47+
paginator := cloudwatchlogs.NewDescribeLogGroupsPaginator(svc, &config)
48+
for paginator.HasMorePages() {
49+
page, err := paginator.NextPage(ctx)
50+
if err != nil {
51+
return err
52+
}
53+
res <- page.LogGroups
54+
}
55+
return nil
56+
}
57+
58+
func resolveLogGroupTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error {
59+
lg := resource.Item.(types.LogGroup)
60+
svc := meta.(*client.Client).Services().Cloudwatchlogs
61+
out, err := svc.ListTagsLogGroup(ctx, &cloudwatchlogs.ListTagsLogGroupInput{LogGroupName: lg.LogGroupName})
62+
if err != nil {
63+
return err
3464
}
65+
return resource.Set(c.Name, out.Tags)
3566
}

plugins/source/aws/resources/services/cloudwatchlogs/log_groups_fetch.go

Lines changed: 0 additions & 39 deletions
This file was deleted.

plugins/source/aws/resources/services/cloudwatchlogs/log_groups_mock_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@ func buildCloudwatchLogsLogGroupsMock(t *testing.T, ctrl *gomock.Controller) cli
2323
LogGroups: []types.LogGroup{l},
2424
}, nil)
2525

26+
sf := types.SubscriptionFilter{}
27+
if err = faker.FakeObject(&sf); err != nil {
28+
t.Fatal(err)
29+
}
30+
m.EXPECT().DescribeSubscriptionFilters(gomock.Any(), gomock.Any(), gomock.Any()).Return(
31+
&cloudwatchlogs.DescribeSubscriptionFiltersOutput{
32+
SubscriptionFilters: []types.SubscriptionFilter{sf},
33+
}, nil)
34+
2635
tags := &cloudwatchlogs.ListTagsLogGroupOutput{}
2736
err = faker.FakeObject(tags)
2837
if err != nil {

plugins/source/aws/resources/services/cloudwatchlogs/resource_policies.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package cloudwatchlogs
22

33
import (
4+
"context"
5+
6+
"github.com/aws/aws-sdk-go-v2/aws"
7+
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs"
48
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs/types"
59
"github.com/cloudquery/cloudquery/plugins/source/aws/client"
610
"github.com/cloudquery/plugin-sdk/schema"
@@ -33,3 +37,21 @@ func ResourcePolicies() *schema.Table {
3337
},
3438
}
3539
}
40+
41+
func fetchCloudwatchlogsResourcePolicies(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error {
42+
var config cloudwatchlogs.DescribeResourcePoliciesInput
43+
c := meta.(*client.Client)
44+
svc := c.Services().Cloudwatchlogs
45+
for {
46+
response, err := svc.DescribeResourcePolicies(ctx, &config)
47+
if err != nil {
48+
return err
49+
}
50+
res <- response.ResourcePolicies
51+
if aws.ToString(response.NextToken) == "" {
52+
break
53+
}
54+
config.NextToken = response.NextToken
55+
}
56+
return nil
57+
}

plugins/source/aws/resources/services/cloudwatchlogs/resource_policies_fetch.go

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package cloudwatchlogs
2+
3+
import (
4+
"context"
5+
6+
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs"
7+
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs/types"
8+
"github.com/cloudquery/cloudquery/plugins/source/aws/client"
9+
"github.com/cloudquery/plugin-sdk/schema"
10+
"github.com/cloudquery/plugin-sdk/transformers"
11+
)
12+
13+
func subscriptionFilters() *schema.Table {
14+
return &schema.Table{
15+
Name: "aws_cloudwatchlogs_log_group_subscription_filters",
16+
Description: `https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_SubscriptionFilter.html`,
17+
Resolver: fetchCloudwatchlogsSubscriptionFilters,
18+
Multiplex: client.ServiceAccountRegionMultiplexer("logs"),
19+
Transform: transformers.TransformWithStruct(&types.SubscriptionFilter{}, transformers.WithPrimaryKeys("FilterName", "CreationTime")),
20+
Columns: []schema.Column{
21+
client.DefaultAccountIDColumn(false),
22+
client.DefaultRegionColumn(false),
23+
{
24+
Name: "log_group_arn",
25+
Description: "The Amazon Resource Name (ARN) of the log group.",
26+
Type: schema.TypeString,
27+
Resolver: schema.ParentColumnResolver("arn"),
28+
CreationOptions: schema.ColumnCreationOptions{
29+
PrimaryKey: true,
30+
},
31+
},
32+
},
33+
}
34+
}
35+
func fetchCloudwatchlogsSubscriptionFilters(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error {
36+
config := cloudwatchlogs.DescribeSubscriptionFiltersInput{
37+
LogGroupName: parent.Item.(types.LogGroup).LogGroupName,
38+
}
39+
c := meta.(*client.Client)
40+
svc := c.Services().Cloudwatchlogs
41+
paginator := cloudwatchlogs.NewDescribeSubscriptionFiltersPaginator(svc, &config)
42+
for paginator.HasMorePages() {
43+
page, err := paginator.NextPage(ctx)
44+
if err != nil {
45+
return err
46+
}
47+
res <- page.SubscriptionFilters
48+
}
49+
return nil
50+
}

website/pages/docs/plugins/sources/aws/tables.md

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

0 commit comments

Comments
 (0)