@@ -7,16 +7,18 @@ import (
7
7
"strconv"
8
8
"time"
9
9
10
- "github.com/aws/aws-sdk-go/aws/request"
11
-
12
- "github.com/kubernetes-sigs/aws-alb-ingress-controller/pkg/aws/albrgt"
10
+ "github.com/karlseguin/ccache"
11
+ "github.com/prometheus/client_golang/prometheus"
13
12
14
13
"github.com/aws/aws-sdk-go/aws"
15
14
"github.com/aws/aws-sdk-go/aws/awserr"
15
+ "github.com/aws/aws-sdk-go/aws/request"
16
16
"github.com/aws/aws-sdk-go/aws/session"
17
17
"github.com/aws/aws-sdk-go/service/elbv2"
18
18
"github.com/aws/aws-sdk-go/service/elbv2/elbv2iface"
19
19
20
+ "github.com/kubernetes-sigs/aws-alb-ingress-controller/pkg/aws/albrgt"
21
+ albprom "github.com/kubernetes-sigs/aws-alb-ingress-controller/pkg/prometheus"
20
22
util "github.com/kubernetes-sigs/aws-alb-ingress-controller/pkg/util/types"
21
23
)
22
24
@@ -77,12 +79,14 @@ func (a *TargetGroupAttributes) Set(k, v string) {
77
79
// ELBV2 is our extension to AWS's elbv2.ELBV2
78
80
type ELBV2 struct {
79
81
elbv2iface.ELBV2API
82
+ cache * ccache.Cache
80
83
}
81
84
82
85
// NewELBV2 returns an ELBV2 based off of the provided AWS session
83
86
func NewELBV2 (awsSession * session.Session ) {
84
87
ELBV2svc = & ELBV2 {
85
88
elbv2 .New (awsSession ),
89
+ ccache .New (ccache .Configure ()),
86
90
}
87
91
return
88
92
}
@@ -205,6 +209,18 @@ func (e *ELBV2) DescribeListenersForLoadBalancer(loadBalancerArn *string) ([]*el
205
209
206
210
// DescribeTargetGroupTargetsForArn looks up target group targets by an ARN.
207
211
func (e * ELBV2 ) DescribeTargetGroupTargetsForArn (arn * string , targets ... []* elbv2.TargetDescription ) (result util.AWSStringSlice , err error ) {
212
+ cache := "ELBV2-DescribeTargetGroupTargetsForArn"
213
+ key := cache + "." + * arn
214
+ item := e .cache .Get (key )
215
+
216
+ if item != nil {
217
+ v := item .Value ().(util.AWSStringSlice )
218
+ albprom .AWSCache .With (prometheus.Labels {"cache" : cache , "action" : "hit" }).Add (float64 (1 ))
219
+ return v , nil
220
+ }
221
+
222
+ albprom .AWSCache .With (prometheus.Labels {"cache" : cache , "action" : "miss" }).Add (float64 (1 ))
223
+
208
224
var targetHealth * elbv2.DescribeTargetHealthOutput
209
225
opts := & elbv2.DescribeTargetHealthInput {
210
226
TargetGroupArn : arn ,
@@ -225,6 +241,8 @@ func (e *ELBV2) DescribeTargetGroupTargetsForArn(arn *string, targets ...[]*elbv
225
241
}
226
242
}
227
243
sort .Sort (result )
244
+
245
+ e .cache .Set (key , result , time .Minute * 5 )
228
246
return
229
247
}
230
248
0 commit comments