Skip to content

Commit f388688

Browse files
committed
Improve context for errors from CloudControl.
Use errors.Wrapf where appropriate. #15
1 parent 0783686 commit f388688

File tree

4 files changed

+24
-11
lines changed

4 files changed

+24
-11
lines changed

Diff for: compute/client.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"time"
1616

1717
"github.com/DimensionDataResearch/go-dd-cloud-compute/compute/requests"
18+
"github.com/pkg/errors"
1819
)
1920

2021
// Client is the client for Dimension Data's cloud compute API.
@@ -170,7 +171,7 @@ func (client *Client) executeRequest(request *http.Request) (responseBody []byte
170171
log.Printf("Unexpected error while performing '%s' request to '%s': %s.",
171172
request.Method,
172173
request.URL.String(),
173-
err.Error(),
174+
err,
174175
)
175176

176177
for retryCount := 0; retryCount < client.maxRetryCount; retryCount++ {
@@ -210,7 +211,7 @@ func (client *Client) executeRequest(request *http.Request) (responseBody []byte
210211
log.Printf("Still failing - '%s' request to '%s': %s.",
211212
request.Method,
212213
request.URL.String(),
213-
err.Error(),
214+
err,
214215
)
215216
}
216217

@@ -228,10 +229,9 @@ func (client *Client) executeRequest(request *http.Request) (responseBody []byte
228229
}
229230

230231
if err != nil {
231-
err = fmt.Errorf("Unexpected error while performing '%s' request to '%s': %s",
232+
err = errors.Wrapf(err,"Unexpected error while performing '%s' request to '%s': %s",
232233
request.Method,
233234
request.URL.String(),
234-
err.Error(),
235235
)
236236

237237
return
@@ -243,7 +243,7 @@ func (client *Client) executeRequest(request *http.Request) (responseBody []byte
243243

244244
responseBody, err = ioutil.ReadAll(response.Body)
245245
if err != nil {
246-
err = fmt.Errorf("Error reading response body for '%s': %s", request.URL.String(), err.Error())
246+
err = errors.Wrapf(err,"error reading response body for '%s'", request.URL.String())
247247
}
248248

249249
if client.IsExtendedLoggingEnabled() {
@@ -347,7 +347,7 @@ func readAPIResponseV1(responseBody []byte, statusCode int) (apiResponse *APIRes
347347
apiResponse = &APIResponseV1{}
348348
err = xml.Unmarshal(responseBody, apiResponse)
349349
if err != nil {
350-
err = fmt.Errorf("Error reading API response (v1) from XML: %s", err.Error())
350+
err = errors.Wrapf(err,"error reading API response (v1) from XML")
351351

352352
return
353353
}
@@ -368,7 +368,7 @@ func readAPIResponseAsJSON(responseBody []byte, statusCode int) (apiResponse *AP
368368
apiResponse = &APIResponseV2{}
369369
err = json.Unmarshal(responseBody, apiResponse)
370370
if err != nil {
371-
err = fmt.Errorf("Error reading API response (v2) from JSON: %s", err.Error())
371+
err = errors.Wrapf(err,"error reading API response (v2) from JSON")
372372

373373
return
374374
}

Diff for: compute/requests/snapshot.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"io"
77
"io/ioutil"
88
"net/http"
9+
"github.com/pkg/errors"
910
)
1011

1112
// CreateSnapshot creates a snapshot of the specified request.
@@ -98,7 +99,8 @@ func CacheBody(request *http.Request) (requestBody []byte, err error) {
9899

99100
requestBody, err = ioutil.ReadAll(request.Body)
100101
if err != nil {
101-
err = fmt.Errorf("Unexpected error reading request body: %s", err.Error())
102+
err = errors.Wrapf(err,"unexpected error reading request body")
103+
102104
return
103105
}
104106

Diff for: compute/responses.go

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package compute
22

3+
import "github.com/pkg/errors"
4+
35
// APIResponse represents the response to an API call.
46
type APIResponse interface {
57
// GetMessage gets the message associated with the API response.
@@ -45,14 +47,21 @@ func IsNoIPAddressAvailableError(err error) bool {
4547

4648
// IsAPIErrorCode determines whether the specified error represents a CloudControl API error with the specified response code.
4749
func IsAPIErrorCode(err error, responseCode string) bool {
48-
apiError, ok := err.(*APIError)
50+
apiError, ok := errors.Cause(err).(*APIError)
4951
if !ok {
5052
return false
5153
}
5254

5355
return apiError.Response.GetResponseCode() == responseCode
5456
}
5557

58+
// IsAPIError determines whether the specified error represents a CloudControl API error.
59+
func IsAPIError(err error, responseCode string) bool {
60+
_, ok := errors.Cause(err).(*APIError)
61+
62+
return ok
63+
}
64+
5665
// Well-known API (v1) results
5766

5867
const (

Diff for: compute/utilities.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ package compute
22

33
import (
44
"bytes"
5-
"fmt"
65
"io"
76
"io/ioutil"
87
"net/http"
8+
9+
"github.com/pkg/errors"
910
)
1011

1112
func stringToPtr(value string) *string {
@@ -23,7 +24,8 @@ func getRequestBody(request *http.Request) (requestBody []byte, err error) {
2324

2425
requestBody, err = ioutil.ReadAll(request.Body)
2526
if err != nil {
26-
err = fmt.Errorf("Unexpected error reading request body: %s", err.Error())
27+
err = errors.Wrapf(err, "unexpected error reading request body")
28+
2729
return
2830
}
2931

0 commit comments

Comments
 (0)