Skip to content

Commit

Permalink
Fetch in parallel
Browse files Browse the repository at this point in the history
  • Loading branch information
howardjohn committed Jun 28, 2019
1 parent af754d3 commit c4ef1fc
Showing 1 changed file with 31 additions and 8 deletions.
39 changes: 31 additions & 8 deletions client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package client

import (
"fmt"
"os"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
Expand Down Expand Up @@ -32,17 +33,39 @@ func Run(args *Args) error {
if err != nil {
return fmt.Errorf("failed to get kubeconfig: %v", err)
}
metricsResponse, err := FetchMetrics(config, args.Namespace)
if err != nil {
return fmt.Errorf("failed to fetch metrics: %v", err)
}

podResponse, err := FetchPods(config, args.Namespace)
if err != nil {
return fmt.Errorf("failed to fetch pod: %v", err)
responseChan := make(chan map[string]*PodResource, 2)
errChan := make(chan error, 2)
go func() {
metricsResponse, err := FetchMetrics(config, args.Namespace)
if err != nil {
errChan <- fmt.Errorf("failed to fetch metrics: %v", err)
} else {
responseChan <- metricsResponse
}
}()
go func() {
podResponse, err := FetchPods(config, args.Namespace)
if err != nil {
errChan <- fmt.Errorf("failed to fetch pod: %v", err)
} else {
responseChan <- podResponse
}
}()

var responses []map[string]*PodResource
got := 0
for got < 2 {
select {
case res := <-responseChan:
responses = append(responses, res)
case err := <-errChan:
_, _ = fmt.Fprintf(os.Stderr, "warning: %v\n", err)
}
got++
}

resources, err := MergePodResources(metricsResponse, podResponse)
resources, err := MergePodResources(responses...)
if err != nil {
return fmt.Errorf("failed to merge responses: %v", err)
}
Expand Down

0 comments on commit c4ef1fc

Please sign in to comment.