Skip to content

Commit f3c417e

Browse files
committed
feat(ec2_sd_configs): introduce optional pagination for AWS API calls
1 parent 272a77a commit f3c417e

File tree

3 files changed

+23
-11
lines changed

3 files changed

+23
-11
lines changed

lib/promscrape/discovery/ec2/api.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ import (
88
)
99

1010
type apiConfig struct {
11-
awsConfig *awsapi.Config
12-
instanceFilters []awsapi.Filter
13-
azFilters []awsapi.Filter
14-
port int
11+
awsConfig *awsapi.Config
12+
instanceFilters []awsapi.Filter
13+
azFilters []awsapi.Filter
14+
port int
15+
maxResultsPerPage int
1516

1617
// A map from AZ name to AZ id.
1718
azMap map[string]string
@@ -42,10 +43,11 @@ func newAPIConfig(sdc *SDConfig) (*apiConfig, error) {
4243
return nil, err
4344
}
4445
cfg := &apiConfig{
45-
awsConfig: awsCfg,
46-
instanceFilters: sdc.InstanceFilters,
47-
azFilters: sdc.AZFilters,
48-
port: port,
46+
awsConfig: awsCfg,
47+
instanceFilters: sdc.InstanceFilters,
48+
azFilters: sdc.AZFilters,
49+
port: port,
50+
maxResultsPerPage: sdc.MaxResultsPerPage,
4951
}
5052
return cfg, nil
5153
}

lib/promscrape/discovery/ec2/ec2.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ type SDConfig struct {
2929
RoleARN string `yaml:"role_arn,omitempty"`
3030
// RefreshInterval time.Duration `yaml:"refresh_interval"`
3131
// refresh_interval is obtained from `-promscrape.ec2SDCheckInterval` command-line option.
32-
Port *int `yaml:"port,omitempty"`
33-
InstanceFilters []awsapi.Filter `yaml:"filters,omitempty"`
34-
AZFilters []awsapi.Filter `yaml:"az_filters,omitempty"`
32+
Port *int `yaml:"port,omitempty"`
33+
InstanceFilters []awsapi.Filter `yaml:"filters,omitempty"`
34+
AZFilters []awsapi.Filter `yaml:"az_filters,omitempty"`
35+
MaxResultsPerPage int `yaml:"max_results_per_page,omitempty"`
3536
}
3637

3738
// GetLabels returns ec2 labels according to sdc.

lib/promscrape/discovery/ec2/instance.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,15 @@ func getReservations(cfg *apiConfig) ([]Reservation, error) {
3232
var rs []Reservation
3333
pageToken := ""
3434
instanceFilters := awsapi.GetFiltersQueryString(cfg.instanceFilters)
35+
36+
if cfg.maxResultsPerPage > 0 {
37+
if len(instanceFilters) == 0 {
38+
instanceFilters = fmt.Sprintf("MaxResults=%d", cfg.maxResultsPerPage)
39+
} else {
40+
instanceFilters += fmt.Sprintf("&MaxResults=%d", cfg.maxResultsPerPage)
41+
}
42+
}
43+
3544
for {
3645
data, err := cfg.awsConfig.GetEC2APIResponse("DescribeInstances", instanceFilters, pageToken)
3746
if err != nil {

0 commit comments

Comments
 (0)