Skip to content

Commit 0defb3b

Browse files
authored
Concurrently fetch metrics (#12)
1 parent 73591aa commit 0defb3b

File tree

1 file changed

+34
-8
lines changed

1 file changed

+34
-8
lines changed

internal/insight/insight.go

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package insight
1010

1111
import (
1212
"context"
13+
"sync"
1314
"time"
1415

1516
"github.com/aws/aws-sdk-go-v2/aws"
@@ -65,17 +66,42 @@ func (in *Insight) Fetch(ctx context.Context, dbiResourceId string, dur time.Dur
6566
chunks = append(chunks, metrics[i:end])
6667
}
6768

68-
// TODO: concurrent
69+
childContext, cancel := context.WithCancel(ctx)
70+
defer cancel()
71+
6972
samples := map[string]Samples{}
73+
var wg sync.WaitGroup
74+
var err error
75+
var mu sync.Mutex
76+
7077
for _, chunk := range chunks {
71-
set, err := in.fetch(ctx, dbiResourceId, dur, chunk...)
72-
if err != nil {
73-
return nil, err
74-
}
78+
chunk := chunk
79+
wg.Add(1)
7580

76-
for k, v := range set {
77-
samples[k] = v
78-
}
81+
go func() {
82+
defer wg.Done()
83+
84+
set, e := in.fetch(childContext, dbiResourceId, dur, chunk...)
85+
86+
mu.Lock()
87+
defer mu.Unlock()
88+
89+
if e != nil {
90+
if err == nil {
91+
cancel()
92+
err = e
93+
}
94+
return
95+
}
96+
97+
for k, v := range set {
98+
samples[k] = v
99+
}
100+
}()
101+
}
102+
wg.Wait()
103+
if err != nil {
104+
return nil, err
79105
}
80106

81107
return samples, nil

0 commit comments

Comments
 (0)