runner/runnergroup_result.go (54 lines of code) (raw):

// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. package runner import ( "context" "encoding/json" "fmt" "io" "net/http" "github.com/Azure/kperf/api/types" ) // GetRunnerGroupResult gets runner group's aggregated report. func GetRunnerGroupResult(ctx context.Context, kubecfgPath string, wait bool) (*types.RunnerGroupsReport, error) { host, done, err := initPortForwardToServer(kubecfgPath) if err != nil { return nil, err } defer done() targetURL := fmt.Sprintf("http://%s/v1/runnergroups/summary", host) if wait { targetURL += "?wait=true" } req, err := http.NewRequestWithContext(ctx, "GET", targetURL, nil) if err != nil { return nil, fmt.Errorf("failed to init GET request: %w", err) } resp, err := http.DefaultClient.Do(req) if err != nil { return nil, fmt.Errorf("failed to access %s by portforward: %w", targetURL, err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { errInRaw, err := io.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("failed to read error message when http code = %v: %w", resp.Status, err) } herr := types.HTTPError{} err = json.Unmarshal(errInRaw, &herr) if err != nil { return nil, fmt.Errorf("failed to get error when http code = %v: %w", resp.Status, err) } return nil, herr } dataInRaw, err := io.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("failed to read data: %w", err) } res := types.RunnerGroupsReport{} err = json.Unmarshal(dataInRaw, &res) if err != nil { return nil, fmt.Errorf("failed to unmarshal to get result: %w\n\n%s", err, string(dataInRaw)) } return &res, nil }