Slightly better error handling

This commit is contained in:
Gabriel Adrian Samfira 2022-12-31 17:18:59 +02:00
parent 897beef7c1
commit 547eaeed28
No known key found for this signature in database
GPG key ID: 7D073DCC2C074CB5
4 changed files with 78 additions and 186 deletions

View file

@ -47,6 +47,24 @@ type Client struct {
client *resty.Client
}
func (c *Client) handleError(err error, resp *resty.Response) error {
var ret error
if err != nil {
ret = fmt.Errorf("request returned error: %s", err)
}
if resp != nil && resp.IsError() {
body := resp.Body()
if len(body) > 0 {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr == nil {
ret = fmt.Errorf("API returned error: %s", apiErr.Details)
}
}
}
return ret
}
func (c *Client) decodeAPIError(body []byte) (apiParams.APIErrorResponse, error) {
var errDetails apiParams.APIErrorResponse
if err := json.Unmarshal(body, &errDetails); err != nil {

View file

@ -19,8 +19,6 @@ import (
"fmt"
"garm/params"
"github.com/pkg/errors"
)
func (c *Client) ListEnterprises() ([]params.Enterprise, error) {
@ -29,12 +27,8 @@ func (c *Client) ListEnterprises() ([]params.Enterprise, error) {
resp, err := c.client.R().
SetResult(&enterprises).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return nil, errors.Wrap(decErr, "sending request")
}
return nil, fmt.Errorf("error fetching enterprises: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return nil, err
}
return enterprises, nil
}
@ -51,12 +45,8 @@ func (c *Client) CreateEnterprise(param params.CreateEnterpriseParams) (params.E
SetBody(body).
SetResult(&response).
Post(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error creating enterprise: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Enterprise{}, err
}
return response, nil
}
@ -67,12 +57,8 @@ func (c *Client) GetEnterprise(enterpriseID string) (params.Enterprise, error) {
resp, err := c.client.R().
SetResult(&response).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error fetching enterprise: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Enterprise{}, err
}
return response, nil
}
@ -81,12 +67,8 @@ func (c *Client) DeleteEnterprise(enterpriseID string) error {
url := fmt.Sprintf("%s/api/v1/enterprises/%s", c.Config.BaseURL, enterpriseID)
resp, err := c.client.R().
Delete(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return errors.Wrap(decErr, "sending request")
}
return fmt.Errorf("error fetching removing enterprise: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return err
}
return nil
}
@ -103,12 +85,8 @@ func (c *Client) CreateEnterprisePool(enterpriseID string, param params.CreatePo
SetBody(body).
SetResult(&response).
Post(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error creating enterprise pool: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Pool{}, err
}
return response, nil
}
@ -120,12 +98,8 @@ func (c *Client) ListEnterprisePools(enterpriseID string) ([]params.Pool, error)
resp, err := c.client.R().
SetResult(&response).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error listing enterprise pools: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return nil, err
}
return response, nil
}
@ -137,12 +111,8 @@ func (c *Client) GetEnterprisePool(enterpriseID, poolID string) (params.Pool, er
resp, err := c.client.R().
SetResult(&response).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error fetching enterprise pool: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Pool{}, err
}
return response, nil
}
@ -153,12 +123,8 @@ func (c *Client) DeleteEnterprisePool(enterpriseID, poolID string) error {
resp, err := c.client.R().
Delete(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return errors.Wrap(decErr, "sending request")
}
return fmt.Errorf("error deleting enterprise pool: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return err
}
return nil
}
@ -175,12 +141,8 @@ func (c *Client) UpdateEnterprisePool(enterpriseID, poolID string, param params.
SetBody(body).
SetResult(&response).
Put(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error updating enterprise pool: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Pool{}, err
}
return response, nil
}
@ -192,12 +154,8 @@ func (c *Client) ListEnterpriseInstances(enterpriseID string) ([]params.Instance
resp, err := c.client.R().
SetResult(&response).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error listing enterprise instances: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return nil, err
}
return response, nil
}

View file

@ -19,8 +19,6 @@ import (
"fmt"
"garm/params"
"github.com/pkg/errors"
)
func (c *Client) ListOrganizations() ([]params.Organization, error) {
@ -29,12 +27,8 @@ func (c *Client) ListOrganizations() ([]params.Organization, error) {
resp, err := c.client.R().
SetResult(&orgs).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return nil, errors.Wrap(decErr, "sending request")
}
return nil, fmt.Errorf("error fetching orgs: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return nil, err
}
return orgs, nil
}
@ -51,12 +45,8 @@ func (c *Client) CreateOrganization(param params.CreateOrgParams) (params.Organi
SetBody(body).
SetResult(&response).
Post(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error creating org: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Organization{}, err
}
return response, nil
}
@ -67,12 +57,8 @@ func (c *Client) GetOrganization(orgID string) (params.Organization, error) {
resp, err := c.client.R().
SetResult(&response).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error fetching org: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Organization{}, err
}
return response, nil
}
@ -81,12 +67,8 @@ func (c *Client) DeleteOrganization(orgID string) error {
url := fmt.Sprintf("%s/api/v1/organizations/%s", c.Config.BaseURL, orgID)
resp, err := c.client.R().
Delete(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return errors.Wrap(decErr, "sending request")
}
return fmt.Errorf("error removing org: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return err
}
return nil
}
@ -103,12 +85,8 @@ func (c *Client) CreateOrgPool(orgID string, param params.CreatePoolParams) (par
SetBody(body).
SetResult(&response).
Post(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error creating org pool: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Pool{}, err
}
return response, nil
}
@ -120,12 +98,8 @@ func (c *Client) ListOrgPools(orgID string) ([]params.Pool, error) {
resp, err := c.client.R().
SetResult(&response).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error listing org pools: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return nil, err
}
return response, nil
}
@ -137,12 +111,8 @@ func (c *Client) GetOrgPool(orgID, poolID string) (params.Pool, error) {
resp, err := c.client.R().
SetResult(&response).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error fetching org pool: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Pool{}, err
}
return response, nil
}
@ -153,12 +123,8 @@ func (c *Client) DeleteOrgPool(orgID, poolID string) error {
resp, err := c.client.R().
Delete(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return errors.Wrap(decErr, "sending request")
}
return fmt.Errorf("error deleting org pool: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return err
}
return nil
}
@ -175,12 +141,8 @@ func (c *Client) UpdateOrgPool(orgID, poolID string, param params.UpdatePoolPara
SetBody(body).
SetResult(&response).
Put(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error updating org pool: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Pool{}, err
}
return response, nil
}
@ -192,12 +154,8 @@ func (c *Client) ListOrgInstances(orgID string) ([]params.Instance, error) {
resp, err := c.client.R().
SetResult(&response).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error listing org instances: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return nil, err
}
return response, nil
}

View file

@ -19,8 +19,6 @@ import (
"fmt"
"garm/params"
"github.com/pkg/errors"
)
func (c *Client) ListRepositories() ([]params.Repository, error) {
@ -29,12 +27,8 @@ func (c *Client) ListRepositories() ([]params.Repository, error) {
resp, err := c.client.R().
SetResult(&repos).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return nil, errors.Wrap(decErr, "sending request")
}
return nil, fmt.Errorf("error fetching repos: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return nil, err
}
return repos, nil
}
@ -51,12 +45,8 @@ func (c *Client) CreateRepository(param params.CreateRepoParams) (params.Reposit
SetBody(body).
SetResult(&response).
Post(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error performing login: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Repository{}, err
}
return response, nil
}
@ -67,12 +57,8 @@ func (c *Client) GetRepository(repoID string) (params.Repository, error) {
resp, err := c.client.R().
SetResult(&response).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error fetching repos: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Repository{}, err
}
return response, nil
}
@ -81,12 +67,8 @@ func (c *Client) DeleteRepository(repoID string) error {
url := fmt.Sprintf("%s/api/v1/repositories/%s", c.Config.BaseURL, repoID)
resp, err := c.client.R().
Delete(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return errors.Wrap(decErr, "sending request")
}
return fmt.Errorf("error fetching repos: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return err
}
return nil
}
@ -103,12 +85,8 @@ func (c *Client) CreateRepoPool(repoID string, param params.CreatePoolParams) (p
SetBody(body).
SetResult(&response).
Post(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error performing login: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Pool{}, err
}
return response, nil
}
@ -120,12 +98,8 @@ func (c *Client) ListRepoPools(repoID string) ([]params.Pool, error) {
resp, err := c.client.R().
SetResult(&response).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error performing login: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return nil, err
}
return response, nil
}
@ -137,12 +111,8 @@ func (c *Client) GetRepoPool(repoID, poolID string) (params.Pool, error) {
resp, err := c.client.R().
SetResult(&response).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error performing login: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Pool{}, err
}
return response, nil
}
@ -153,12 +123,8 @@ func (c *Client) DeleteRepoPool(repoID, poolID string) error {
resp, err := c.client.R().
Delete(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return errors.Wrap(decErr, "sending request")
}
return fmt.Errorf("error performing login: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return err
}
return nil
}
@ -175,12 +141,8 @@ func (c *Client) UpdateRepoPool(repoID, poolID string, param params.UpdatePoolPa
SetBody(body).
SetResult(&response).
Put(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error performing login: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return params.Pool{}, err
}
return response, nil
}
@ -192,12 +154,8 @@ func (c *Client) ListRepoInstances(repoID string) ([]params.Instance, error) {
resp, err := c.client.R().
SetResult(&response).
Get(url)
if err != nil || resp.IsError() {
apiErr, decErr := c.decodeAPIError(resp.Body())
if decErr != nil {
return response, errors.Wrap(decErr, "sending request")
}
return response, fmt.Errorf("error performing login: %s", apiErr.Details)
if err := c.handleError(err, resp); err != nil {
return nil, err
}
return response, nil
}