diff --git a/pkg/api/domains/domains.go b/pkg/api/domains/domains.go index c3e6884af..cde11891a 100644 --- a/pkg/api/domains/domains.go +++ b/pkg/api/domains/domains.go @@ -5,8 +5,10 @@ import ( "fmt" "io/ioutil" "net/http" + "time" "github.com/aziontech/azion-cli/pkg/cmd/version" + "github.com/aziontech/azion-cli/utils" sdk "github.com/aziontech/azionapi-go-sdk/domains" ) @@ -37,6 +39,7 @@ func NewClient(c *http.Client, url string, token string) *Client { conf.Servers = sdk.ServerConfigurations{ {URL: url}, } + conf.HTTPClient.Timeout = 10 * time.Second return &Client{ apiClient: sdk.NewAPIClient(conf), @@ -47,12 +50,13 @@ func (c *Client) Create(ctx context.Context, req *CreateRequest) (DomainResponse request := c.apiClient.DomainsApi.CreateDomain(ctx).CreateDomainRequest(req.CreateDomainRequest) - domainsResponse, httpRes, err := request.Execute() + domainsResponse, httpResp, err := request.Execute() if err != nil { - if httpRes == nil { + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) return nil, err } - responseBody, _ := ioutil.ReadAll(httpRes.Body) + responseBody, _ := ioutil.ReadAll(httpResp.Body) return nil, fmt.Errorf("%w: %s", err, responseBody) } @@ -63,12 +67,13 @@ func (c *Client) Update(ctx context.Context, req *UpdateRequest) (DomainResponse request := c.apiClient.DomainsApi.UpdateDomain(ctx, req.DomainId).UpdateDomainRequest(req.UpdateDomainRequest) - domainsResponse, httpRes, err := request.Execute() + domainsResponse, httpResp, err := request.Execute() if err != nil { - if httpRes == nil { + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) return nil, err } - responseBody, _ := ioutil.ReadAll(httpRes.Body) + responseBody, _ := ioutil.ReadAll(httpResp.Body) return nil, fmt.Errorf("%w: %s", err, responseBody) } diff --git a/pkg/api/edge_applications/edge_applications.go b/pkg/api/edge_applications/edge_applications.go index 78365b3cd..8c2e1952b 100644 --- a/pkg/api/edge_applications/edge_applications.go +++ b/pkg/api/edge_applications/edge_applications.go @@ -5,8 +5,10 @@ import ( "fmt" "io/ioutil" "net/http" + "time" "github.com/aziontech/azion-cli/pkg/cmd/version" + "github.com/aziontech/azion-cli/utils" sdk "github.com/aziontech/azionapi-go-sdk/edgeapplications" ) @@ -54,6 +56,7 @@ func NewClient(c *http.Client, url string, token string) *Client { conf.Servers = sdk.ServerConfigurations{ {URL: url}, } + conf.HTTPClient.Timeout = 10 * time.Second return &Client{ apiClient: sdk.NewAPIClient(conf), @@ -64,12 +67,13 @@ func (c *Client) Create(ctx context.Context, req *CreateRequest) (EdgeApplicatio request := c.apiClient.EdgeApplicationsMainSettingsApi.EdgeApplicationsPost(ctx).CreateApplicationRequest(req.CreateApplicationRequest) - edgeApplicationsResponse, httpRes, err := request.Execute() + edgeApplicationsResponse, httpResp, err := request.Execute() if err != nil { - if httpRes == nil { + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) return nil, err } - responseBody, _ := ioutil.ReadAll(httpRes.Body) + responseBody, _ := ioutil.ReadAll(httpResp.Body) return nil, fmt.Errorf("%w: %s", err, responseBody) } @@ -79,12 +83,13 @@ func (c *Client) Create(ctx context.Context, req *CreateRequest) (EdgeApplicatio func (c *Client) Update(ctx context.Context, req *UpdateRequest) (EdgeApplicationsResponse, error) { request := c.apiClient.EdgeApplicationsMainSettingsApi.EdgeApplicationsIdPatch(ctx, req.Id).ApplicationUpdateRequest(req.ApplicationUpdateRequest) - edgeApplicationsResponse, httpRes, err := request.Execute() + edgeApplicationsResponse, httpResp, err := request.Execute() if err != nil { - if httpRes == nil { + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) return nil, err } - responseBody, _ := ioutil.ReadAll(httpRes.Body) + responseBody, _ := ioutil.ReadAll(httpResp.Body) return nil, fmt.Errorf("%w: %s", err, responseBody) } @@ -97,12 +102,13 @@ func (c *Client) UpdateInstance(ctx context.Context, req *UpdateInstanceRequest) req.ApplicationUpdateInstanceRequest.SetName("justfortests2") req.SetEdgeFunctionId(req.FunctionId) - edgeApplicationsResponse, httpRes, err := request.Execute() + edgeApplicationsResponse, httpResp, err := request.Execute() if err != nil { - if httpRes == nil { + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) return nil, err } - responseBody, _ := ioutil.ReadAll(httpRes.Body) + responseBody, _ := ioutil.ReadAll(httpResp.Body) return nil, fmt.Errorf("%w: %s", err, responseBody) } @@ -116,12 +122,13 @@ func (c *Client) CreateInstance(ctx context.Context, req *CreateInstanceRequest) request := c.apiClient.EdgeApplicationsEdgeFunctionsInstancesApi.EdgeApplicationsEdgeApplicationIdFunctionsInstancesPost(ctx, req.ApplicationId).ApplicationCreateInstanceRequest(req.ApplicationCreateInstanceRequest) - edgeApplicationsResponse, httpRes, err := request.Execute() + edgeApplicationsResponse, httpResp, err := request.Execute() if err != nil { - if httpRes == nil { + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) return nil, err } - responseBody, _ := ioutil.ReadAll(httpRes.Body) + responseBody, _ := ioutil.ReadAll(httpResp.Body) return nil, fmt.Errorf("%w: %s", err, responseBody) } @@ -132,12 +139,13 @@ func (c *Client) UpdateRulesEngine(ctx context.Context, req *UpdateRulesEngineRe request := c.apiClient.EdgeApplicationsRulesEngineApi.EdgeApplicationsEdgeApplicationIdRulesEnginePhaseRulesGet(ctx, req.IdApplication, "request") - edgeApplicationRules, httpRes, err := request.Execute() + edgeApplicationRules, httpResp, err := request.Execute() if err != nil { - if httpRes == nil { + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) return nil, err } - responseBody, _ := ioutil.ReadAll(httpRes.Body) + responseBody, _ := ioutil.ReadAll(httpResp.Body) return nil, fmt.Errorf("%w: %s", err, responseBody) } @@ -150,12 +158,13 @@ func (c *Client) UpdateRulesEngine(ctx context.Context, req *UpdateRulesEngineRe requestUpdate := c.apiClient.EdgeApplicationsRulesEngineApi.EdgeApplicationsEdgeApplicationIdRulesEnginePhaseRulesRuleIdPatch(ctx, req.IdApplication, "request", idRule).PatchRulesEngineRequest(req.PatchRulesEngineRequest) - edgeApplicationsResponse, httpRes, err := requestUpdate.Execute() + edgeApplicationsResponse, httpResp, err := requestUpdate.Execute() if err != nil { - if httpRes == nil { + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) return nil, err } - responseBody, _ := ioutil.ReadAll(httpRes.Body) + responseBody, _ := ioutil.ReadAll(httpResp.Body) return nil, fmt.Errorf("%w: %s", err, responseBody) } diff --git a/pkg/api/edge_functions/edge_functions.go b/pkg/api/edge_functions/edge_functions.go index d74544ba6..5b4a6305d 100644 --- a/pkg/api/edge_functions/edge_functions.go +++ b/pkg/api/edge_functions/edge_functions.go @@ -5,9 +5,11 @@ import ( "fmt" "io/ioutil" "net/http" + "time" "github.com/aziontech/azion-cli/pkg/cmd/version" "github.com/aziontech/azion-cli/pkg/contracts" + "github.com/aziontech/azion-cli/utils" sdk "github.com/aziontech/azionapi-go-sdk/edgefunctions" ) @@ -40,6 +42,7 @@ func NewClient(c *http.Client, url string, token string) *Client { conf.Servers = sdk.ServerConfigurations{ {URL: url}, } + conf.HTTPClient.Timeout = 10 * time.Second return &Client{ apiClient: sdk.NewAPIClient(conf), @@ -49,9 +52,13 @@ func NewClient(c *http.Client, url string, token string) *Client { func (c *Client) Get(ctx context.Context, id int64) (EdgeFunctionResponse, error) { req := c.apiClient.EdgeFunctionsApi.EdgeFunctionsIdGet(ctx, id) - res, _, err := req.Execute() + res, httpResp, err := req.Execute() if err != nil { + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) + return nil, err + } return nil, err } @@ -61,9 +68,13 @@ func (c *Client) Get(ctx context.Context, id int64) (EdgeFunctionResponse, error func (c *Client) Delete(ctx context.Context, id int64) error { req := c.apiClient.EdgeFunctionsApi.EdgeFunctionsIdDelete(ctx, id) - _, err := req.Execute() + httpResp, err := req.Execute() if err != nil { + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) + return err + } return err } @@ -85,12 +96,13 @@ func (c *Client) Create(ctx context.Context, req *CreateRequest) (EdgeFunctionRe request := c.apiClient.EdgeFunctionsApi.EdgeFunctionsPost(ctx).CreateEdgeFunctionRequest(req.CreateEdgeFunctionRequest) - edgeFuncResponse, httpRes, err := request.Execute() + edgeFuncResponse, httpResp, err := request.Execute() if err != nil { - if httpRes == nil { + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) return nil, err } - responseBody, _ := ioutil.ReadAll(httpRes.Body) + responseBody, _ := ioutil.ReadAll(httpResp.Body) return nil, fmt.Errorf("%w: %s", err, responseBody) } @@ -109,12 +121,13 @@ func NewUpdateRequest(id int64) *UpdateRequest { func (c *Client) Update(ctx context.Context, req *UpdateRequest) (EdgeFunctionResponse, error) { request := c.apiClient.EdgeFunctionsApi.EdgeFunctionsIdPatch(ctx, req.Id).PatchEdgeFunctionRequest(req.PatchEdgeFunctionRequest) - edgeFuncResponse, httpRes, err := request.Execute() + edgeFuncResponse, httpResp, err := request.Execute() if err != nil { - if httpRes == nil { + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) return nil, err } - responseBody, _ := ioutil.ReadAll(httpRes.Body) + responseBody, _ := ioutil.ReadAll(httpResp.Body) return nil, fmt.Errorf("%w: %s", err, responseBody) } @@ -130,7 +143,8 @@ func (c *Client) List(ctx context.Context, opts *contracts.ListOptions) ([]EdgeF Execute() if err != nil { - if httpResp == nil { + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) return nil, err } responseBody, _ := ioutil.ReadAll(httpResp.Body) diff --git a/pkg/api/realtime_purge/realtime_purge.go b/pkg/api/realtime_purge/realtime_purge.go index fc42ea645..890a72a79 100644 --- a/pkg/api/realtime_purge/realtime_purge.go +++ b/pkg/api/realtime_purge/realtime_purge.go @@ -5,8 +5,10 @@ import ( "fmt" "io/ioutil" "net/http" + "time" "github.com/aziontech/azion-cli/pkg/cmd/version" + "github.com/aziontech/azion-cli/utils" sdk "github.com/aziontech/azionapi-go-sdk/realtimepurge" ) @@ -23,6 +25,7 @@ func NewClient(c *http.Client, url string, token string) *Client { conf.Servers = sdk.ServerConfigurations{ {URL: url}, } + conf.HTTPClient.Timeout = 10 * time.Second return &Client{ apiClient: sdk.NewAPIClient(conf), @@ -35,14 +38,18 @@ func (c *Client) Purge(ctx context.Context, urlToPurge []string) error { purg.SetMethod("delete") request := c.apiClient.RealTimePurgeApi.PurgeUrl(ctx).PurgeUrlRequest(purg) - httpRes, err := c.apiClient.RealTimePurgeApi.PurgeUrlExecute(request) + httpResp, err := c.apiClient.RealTimePurgeApi.PurgeUrlExecute(request) if err != nil { - responseBody, _ := ioutil.ReadAll(httpRes.Body) + if httpResp == nil || httpResp.StatusCode >= 500 { + err := utils.CheckStatusCode500Error(err) + return err + } + responseBody, _ := ioutil.ReadAll(httpResp.Body) return fmt.Errorf("%w: %s", err, responseBody) } - if httpRes.StatusCode != 201 { - return fmt.Errorf("%w: %s", err, httpRes.Status) + if httpResp.StatusCode != 201 { + return fmt.Errorf("%w: %s", err, httpResp.Status) } return nil diff --git a/pkg/cmd/edge_services/create/create.go b/pkg/cmd/edge_services/create/create.go index 5a186907f..28c081bed 100644 --- a/pkg/cmd/edge_services/create/create.go +++ b/pkg/cmd/edge_services/create/create.go @@ -92,7 +92,8 @@ func createNewService(client *sdk.APIClient, out io.Writer, request sdk.CreateSe resp, httpResp, err := api.NewService(c).CreateServiceRequest(request).Execute() if err != nil { if httpResp == nil || httpResp.StatusCode >= 500 { - return utils.ErrorInternalServerError + err := utils.CheckStatusCode500Error(err) + return err } body, err := ioutil.ReadAll(httpResp.Body) if err != nil { diff --git a/pkg/cmd/edge_services/delete/delete.go b/pkg/cmd/edge_services/delete/delete.go index 5ca335a18..d2445802a 100644 --- a/pkg/cmd/edge_services/delete/delete.go +++ b/pkg/cmd/edge_services/delete/delete.go @@ -60,7 +60,8 @@ func deleteService(client *sdk.APIClient, out io.Writer, service_id int64) error if err != nil { if httpResp == nil || httpResp.StatusCode >= 500 { - return utils.ErrorInternalServerError + err := utils.CheckStatusCode500Error(err) + return err } body, err := ioutil.ReadAll(httpResp.Body) if err != nil { diff --git a/pkg/cmd/edge_services/describe/describe.go b/pkg/cmd/edge_services/describe/describe.go index d409fd7f9..ee8b3142b 100644 --- a/pkg/cmd/edge_services/describe/describe.go +++ b/pkg/cmd/edge_services/describe/describe.go @@ -95,7 +95,8 @@ func describeService(client *sdk.APIClient, service_id int64, withVariables bool resp, httpResp, err := api.GetService(c, service_id).WithVars(withVariables).Execute() if err != nil { if httpResp == nil || httpResp.StatusCode >= 500 { - return nil, utils.ErrorInternalServerError + err := utils.CheckStatusCode500Error(err) + return nil, err } body, err := ioutil.ReadAll(httpResp.Body) if err != nil { diff --git a/pkg/cmd/edge_services/list/list.go b/pkg/cmd/edge_services/list/list.go index 54781aa69..6d82b9281 100644 --- a/pkg/cmd/edge_services/list/list.go +++ b/pkg/cmd/edge_services/list/list.go @@ -65,7 +65,8 @@ func listAllServices(client *sdk.APIClient, out io.Writer, opts *contracts.ListO if err != nil { if httpResp == nil || httpResp.StatusCode >= 500 { - return utils.ErrorInternalServerError + err := utils.CheckStatusCode500Error(err) + return err } body, err := ioutil.ReadAll(httpResp.Body) if err != nil { diff --git a/pkg/cmd/edge_services/requests/request.go b/pkg/cmd/edge_services/requests/request.go index c0403596b..730b7e557 100644 --- a/pkg/cmd/edge_services/requests/request.go +++ b/pkg/cmd/edge_services/requests/request.go @@ -1,6 +1,8 @@ package requests import ( + "time" + "github.com/aziontech/azion-cli/pkg/cmd/version" "github.com/aziontech/azion-cli/pkg/cmdutil" sdk "github.com/aziontech/azionapi-go-sdk/edgeservices" @@ -16,6 +18,7 @@ func CreateClient(f *cmdutil.Factory) (*sdk.APIClient, error) { URL: f.Config.GetString("api_url"), }, } + conf.HTTPClient.Timeout = 10 * time.Second return sdk.NewAPIClient(conf), nil } diff --git a/pkg/cmd/edge_services/resources/create/create.go b/pkg/cmd/edge_services/resources/create/create.go index 8b95120c4..97d81e821 100644 --- a/pkg/cmd/edge_services/resources/create/create.go +++ b/pkg/cmd/edge_services/resources/create/create.go @@ -144,7 +144,8 @@ func createNewResource(client *sdk.APIClient, out io.Writer, service_id int64, r resp, httpResp, err := api.PostResource(c, service_id).CreateResourceRequest(request).Execute() if err != nil { if httpResp == nil || httpResp.StatusCode >= 500 { - return utils.ErrorInternalServerError + err := utils.CheckStatusCode500Error(err) + return err } body, err := ioutil.ReadAll(httpResp.Body) if err != nil { diff --git a/pkg/cmd/edge_services/resources/delete/delete.go b/pkg/cmd/edge_services/resources/delete/delete.go index e9c31c250..690f34b00 100644 --- a/pkg/cmd/edge_services/resources/delete/delete.go +++ b/pkg/cmd/edge_services/resources/delete/delete.go @@ -59,7 +59,8 @@ func deleteResource(client *sdk.APIClient, out io.Writer, service_id int64, reso httpResp, err := api.DeleteResource(c, service_id, resource_id).Execute() if err != nil { if httpResp == nil || httpResp.StatusCode >= 500 { - return utils.ErrorInternalServerError + err := utils.CheckStatusCode500Error(err) + return err } body, err := ioutil.ReadAll(httpResp.Body) if err != nil { diff --git a/pkg/cmd/edge_services/resources/describe/describe.go b/pkg/cmd/edge_services/resources/describe/describe.go index eead5656a..6f9c5e23f 100644 --- a/pkg/cmd/edge_services/resources/describe/describe.go +++ b/pkg/cmd/edge_services/resources/describe/describe.go @@ -90,7 +90,8 @@ func describeResource(client *sdk.APIClient, out io.Writer, service_id int64, re resp, httpResp, err := api.GetResource(c, service_id, resource_id).Execute() if err != nil { if httpResp == nil || httpResp.StatusCode >= 500 { - return nil, utils.ErrorInternalServerError + err := utils.CheckStatusCode500Error(err) + return nil, err } body, err := ioutil.ReadAll(httpResp.Body) if err != nil { diff --git a/pkg/cmd/edge_services/resources/list/list.go b/pkg/cmd/edge_services/resources/list/list.go index 25d67dbb3..b2d07503b 100644 --- a/pkg/cmd/edge_services/resources/list/list.go +++ b/pkg/cmd/edge_services/resources/list/list.go @@ -74,7 +74,8 @@ func listAllResources(client *sdk.APIClient, out io.Writer, opts *contracts.List if err != nil { if httpResp == nil || httpResp.StatusCode >= 500 { - return utils.ErrorInternalServerError + err := utils.CheckStatusCode500Error(err) + return err } body, err := ioutil.ReadAll(httpResp.Body) if err != nil { diff --git a/pkg/cmd/edge_services/resources/update/update.go b/pkg/cmd/edge_services/resources/update/update.go index b59a14117..80e5729f8 100644 --- a/pkg/cmd/edge_services/resources/update/update.go +++ b/pkg/cmd/edge_services/resources/update/update.go @@ -172,7 +172,8 @@ func updateResource(client *sdk.APIClient, out io.Writer, service_id int64, reso resp, httpResp, err := api.PatchServiceResource(c, service_id, resource_id).UpdateResourceRequest(update.UpdateResourceRequest).Execute() if err != nil { if httpResp == nil || httpResp.StatusCode >= 500 { - return utils.ErrorInternalServerError + err := utils.CheckStatusCode500Error(err) + return err } body, err := ioutil.ReadAll(httpResp.Body) if err != nil { diff --git a/pkg/cmd/edge_services/update/update.go b/pkg/cmd/edge_services/update/update.go index 080861646..fbf24978a 100644 --- a/pkg/cmd/edge_services/update/update.go +++ b/pkg/cmd/edge_services/update/update.go @@ -166,7 +166,8 @@ func updateService(client *sdk.APIClient, out io.Writer, id int64, cmd *cobra.Co resp, httpResp, err := api.PatchService(c, id).UpdateServiceRequest(request.UpdateServiceRequest).Execute() if err != nil { if httpResp == nil || httpResp.StatusCode >= 500 { - return utils.ErrorInternalServerError + err := utils.CheckStatusCode500Error(err) + return err } body, err := ioutil.ReadAll(httpResp.Body) if err != nil { diff --git a/utils/errors.go b/utils/errors.go index 09d226926..547609d58 100644 --- a/utils/errors.go +++ b/utils/errors.go @@ -30,4 +30,5 @@ var ( ErrorUnmarshalAzionJsonFile = errors.New("Failed to parse azion.json. Verify the file format.") ErrorMarshalAzionJsonFile = errors.New("Failed to encode azion.json. Verify the file format.") ErrorWritingAzionJsonFile = errors.New("Failed to write azion.json. Verify the file format.") + ErrorTimeoutAPICall = errors.New("CLI timed out while carrying out this action. Please verify if it was completed successfully") ) diff --git a/utils/helpers.go b/utils/helpers.go index b19308f1f..6e49729ef 100644 --- a/utils/helpers.go +++ b/utils/helpers.go @@ -182,3 +182,13 @@ func WriteAzionJsonContent(conf *contracts.AzionApplicationOptions) error { return nil } + +// checks varying errors that may occur when status code is 500 +func CheckStatusCode500Error(err error) error { + + if strings.Contains(err.Error(), "Client.Timeout") { + return ErrorTimeoutAPICall + } + + return ErrorInternalServerError +}