@@ -30,10 +30,6 @@ const (
3030 defaultMaxInstancesBatch = 32
3131)
3232
33- type Ec2Client interface {
34- DescribeInstances (ctx context.Context , params * ec2.DescribeInstancesInput , optFns ... func (* ec2.Options )) (* ec2.DescribeInstancesOutput , error )
35- }
36-
3733// Provider represents an AWS provider.
3834type Provider struct {
3935 describeInstanceCount uint64 // The cumulative number of times DescribeInstancesPagesWithContext has been called
@@ -44,7 +40,7 @@ type Provider struct {
4440
4541 logger logrus.FieldLogger
4642
47- Ec2 Ec2Client
43+ Ec2 ec2. DescribeInstancesAPIClient
4844 MaxInstances int
4945}
5046
@@ -74,7 +70,7 @@ func (p *Provider) RunMetrics(ctx context.Context, statser stats.Statser) {
7470// Instance returns instances details from AWS.
7571// ip -> nil pointer if instance was not found.
7672// map is returned even in case of errors because it may contain partial data.
77- func (p * Provider ) Instance (ctx context.Context , IP ... gostatsd.Source ) (map [gostatsd.Source ]* gostatsd.Instance , error ) {
73+ func (p * Provider ) Instance (_ context.Context , IP ... gostatsd.Source ) (map [gostatsd.Source ]* gostatsd.Instance , error ) {
7874 instances := make (map [gostatsd.Source ]* gostatsd.Instance , len (IP ))
7975 values := make ([]string , len (IP ))
8076 for i , ip := range IP {
@@ -94,21 +90,18 @@ func (p *Provider) Instance(ctx context.Context, IP ...gostatsd.Source) (map[gos
9490 instancesFound := uint64 (0 )
9591 pages := uint64 (0 )
9692 var err error
97- var nextToken string
93+ input := & ec2.DescribeInstancesInput {
94+ Filters : inputFilters ,
95+ }
9896
9997 p .logger .WithField ("ips" , IP ).Debug ("Looking up instances" )
100- hasPagesRemaining := true
101- for hasPagesRemaining {
98+ paginator := ec2 . NewDescribeInstancesPaginator ( p . Ec2 , input )
99+ for paginator . HasMorePages () {
102100 pages ++
103- input := & ec2.DescribeInstancesInput {
104- Filters : inputFilters ,
105- NextToken : & nextToken ,
106- }
107101
108- page , rawErr := p . Ec2 . DescribeInstances ( ctx , input )
102+ page , rawErr := paginator . NextPage ( context . Background () )
109103 if rawErr != nil {
110104 atomic .AddUint64 (& p .describeInstanceErrors , 1 )
111- hasPagesRemaining = false
112105
113106 if rawErr .Error () != "InvalidInstanceID.NotFound" {
114107 err = fmt .Errorf ("error listing AWS instances: %v" , rawErr )
@@ -145,8 +138,6 @@ func (p *Provider) Instance(ctx context.Context, IP ...gostatsd.Source) (map[gos
145138 }).Debug ("Added tags" )
146139 }
147140 }
148- nextToken = * page .NextToken
149- hasPagesRemaining = page .NextToken != nil && * page .NextToken != ""
150141 }
151142
152143 atomic .AddUint64 (& p .describeInstancePages , pages )
0 commit comments