func GetRunnerGroupResult()

in runner/runnergroup_result.go [17:68]


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
}