ECS reporter: Use persistent client objects across reports

Not only does this allow us to re-use connections, but vitally it allows us
to make use of the new task and service caching within the client object.
This commit is contained in:
Mike Lang
2016-12-07 01:18:27 -08:00
parent 6b19bc2da9
commit 9d1e46f81b
2 changed files with 15 additions and 5 deletions

View File

@@ -78,10 +78,17 @@ func getLabelInfo(rpt report.Report) map[string]map[string]*taskLabelInfo {
// Reporter implements Tagger, Reporter
type Reporter struct {
clients map[string]ecsClient
}
func New() Reporter {
return Reporter{
clients: map[string]ecsClient{},
}
}
// Tag needed for Tagger
func (Reporter) Tag(rpt report.Report) (report.Report, error) {
func (r Reporter) Tag(rpt report.Report) (report.Report, error) {
rpt = rpt.Copy()
clusterMap := getLabelInfo(rpt)
@@ -89,9 +96,12 @@ func (Reporter) Tag(rpt report.Report) (report.Report, error) {
for cluster, taskMap := range clusterMap {
log.Debugf("Fetching ECS info for cluster %v with %v tasks", cluster, len(taskMap))
client, err := newClient(cluster)
if err != nil {
return rpt, err
client, ok := r.clients[cluster]
if !ok {
client, err := newClient(cluster)
if err != nil {
return rpt, err
}
}
taskArns := make([]string, 0, len(taskMap))

View File

@@ -206,7 +206,7 @@ func probeMain(flags probeFlags, targets []appclient.Target) {
}
if flags.ecsEnabled {
reporter := awsecs.Reporter{}
reporter := awsecs.New()
p.AddReporter(reporter)
p.AddTagger(reporter)
}