Skip to content

Commit f84737d

Browse files
committed
(cloudwatch) reuse credentials
1 parent 8a2af9b commit f84737d

File tree

1 file changed

+18
-39
lines changed

1 file changed

+18
-39
lines changed

pkg/api/cloudwatch/cloudwatch.go

Lines changed: 18 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,29 @@ func init() {
4343
}
4444
}
4545

46-
func handleGetMetricStatistics(req *cwRequest, c *middleware.Context) {
46+
var awsCredentials map[string]*credentials.Credentials = make(map[string]*credentials.Credentials)
47+
48+
func getCredentials(profile string) *credentials.Credentials {
49+
if _, ok := awsCredentials[profile]; ok {
50+
return awsCredentials[profile]
51+
}
52+
4753
sess := session.New()
4854
creds := credentials.NewChainCredentials(
4955
[]credentials.Provider{
5056
&credentials.EnvProvider{},
51-
&credentials.SharedCredentialsProvider{Filename: "", Profile: req.DataSource.Database},
57+
&credentials.SharedCredentialsProvider{Filename: "", Profile: profile},
5258
&ec2rolecreds.EC2RoleProvider{Client: ec2metadata.New(sess), ExpiryWindow: 5 * time.Minute},
5359
})
60+
awsCredentials[profile] = creds
5461

62+
return creds
63+
}
64+
65+
func handleGetMetricStatistics(req *cwRequest, c *middleware.Context) {
5566
cfg := &aws.Config{
5667
Region: aws.String(req.Region),
57-
Credentials: creds,
68+
Credentials: getCredentials(req.DataSource.Database),
5869
}
5970

6071
svc := cloudwatch.New(session.New(cfg), cfg)
@@ -92,17 +103,9 @@ func handleGetMetricStatistics(req *cwRequest, c *middleware.Context) {
92103
}
93104

94105
func handleListMetrics(req *cwRequest, c *middleware.Context) {
95-
sess := session.New()
96-
creds := credentials.NewChainCredentials(
97-
[]credentials.Provider{
98-
&credentials.EnvProvider{},
99-
&credentials.SharedCredentialsProvider{Filename: "", Profile: req.DataSource.Database},
100-
&ec2rolecreds.EC2RoleProvider{Client: ec2metadata.New(sess), ExpiryWindow: 5 * time.Minute},
101-
})
102-
103106
cfg := &aws.Config{
104107
Region: aws.String(req.Region),
105-
Credentials: creds,
108+
Credentials: getCredentials(req.DataSource.Database),
106109
}
107110

108111
svc := cloudwatch.New(session.New(cfg), cfg)
@@ -140,17 +143,9 @@ func handleListMetrics(req *cwRequest, c *middleware.Context) {
140143
}
141144

142145
func handleDescribeAlarmsForMetric(req *cwRequest, c *middleware.Context) {
143-
sess := session.New()
144-
creds := credentials.NewChainCredentials(
145-
[]credentials.Provider{
146-
&credentials.EnvProvider{},
147-
&credentials.SharedCredentialsProvider{Filename: "", Profile: req.DataSource.Database},
148-
&ec2rolecreds.EC2RoleProvider{Client: ec2metadata.New(sess), ExpiryWindow: 5 * time.Minute},
149-
})
150-
151146
cfg := &aws.Config{
152147
Region: aws.String(req.Region),
153-
Credentials: creds,
148+
Credentials: getCredentials(req.DataSource.Database),
154149
}
155150

156151
svc := cloudwatch.New(session.New(cfg), cfg)
@@ -188,17 +183,9 @@ func handleDescribeAlarmsForMetric(req *cwRequest, c *middleware.Context) {
188183
}
189184

190185
func handleDescribeAlarmHistory(req *cwRequest, c *middleware.Context) {
191-
sess := session.New()
192-
creds := credentials.NewChainCredentials(
193-
[]credentials.Provider{
194-
&credentials.EnvProvider{},
195-
&credentials.SharedCredentialsProvider{Filename: "", Profile: req.DataSource.Database},
196-
&ec2rolecreds.EC2RoleProvider{Client: ec2metadata.New(sess), ExpiryWindow: 5 * time.Minute},
197-
})
198-
199186
cfg := &aws.Config{
200187
Region: aws.String(req.Region),
201-
Credentials: creds,
188+
Credentials: getCredentials(req.DataSource.Database),
202189
}
203190

204191
svc := cloudwatch.New(session.New(cfg), cfg)
@@ -232,17 +219,9 @@ func handleDescribeAlarmHistory(req *cwRequest, c *middleware.Context) {
232219
}
233220

234221
func handleDescribeInstances(req *cwRequest, c *middleware.Context) {
235-
sess := session.New()
236-
creds := credentials.NewChainCredentials(
237-
[]credentials.Provider{
238-
&credentials.EnvProvider{},
239-
&credentials.SharedCredentialsProvider{Filename: "", Profile: req.DataSource.Database},
240-
&ec2rolecreds.EC2RoleProvider{Client: ec2metadata.New(sess), ExpiryWindow: 5 * time.Minute},
241-
})
242-
243222
cfg := &aws.Config{
244223
Region: aws.String(req.Region),
245-
Credentials: creds,
224+
Credentials: getCredentials(req.DataSource.Database),
246225
}
247226

248227
svc := ec2.New(session.New(cfg), cfg)

0 commit comments

Comments
 (0)