Slightly better error handling
This commit is contained in:
parent
897beef7c1
commit
547eaeed28
4 changed files with 78 additions and 186 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue