本文整理汇总了Golang中github.com/joyent/gocommon/errors.Newf函数的典型用法代码示例。如果您正苦于以下问题:Golang Newf函数的具体用法?Golang Newf怎么用?Golang Newf使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Newf函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: JsonRequest
// JsonRequest JSON encodes and sends the object in reqData.ReqValue (if any) to the specified URL.
// Optional method arguments are passed using the RequestData object.
// Relevant RequestData fields:
// ReqHeaders: additional HTTP header values to add to the request.
// ExpectedStatus: the allowed HTTP response status values, else an error is returned.
// ReqValue: the data object to send.
// RespValue: the data object to decode the result into.
func (c *Client) JsonRequest(method, url, rfc1123Date string, request *RequestData, response *ResponseData) (err error) {
err = nil
var body []byte
if request.Params != nil {
url += "?" + request.Params.Encode()
}
if request.ReqValue != nil {
body, err = json.Marshal(request.ReqValue)
if err != nil {
err = errors.Newf(err, "failed marshalling the request body")
return
}
}
headers, err := createHeaders(request.ReqHeaders, c.credentials, contentTypeJSON, rfc1123Date, c.apiVersion,
isMantaRequest(url, c.credentials.UserAuthentication.User))
if err != nil {
return err
}
respBody, respHeader, err := c.sendRequest(
method, url, bytes.NewReader(body), len(body), headers, response.ExpectedStatus, c.logger)
if err != nil {
return
}
defer respBody.Close()
respData, err := ioutil.ReadAll(respBody)
if err != nil {
err = errors.Newf(err, "failed reading the response body")
return
}
if len(respData) > 0 {
if response.RespValue != nil {
if _, ok := response.RespValue.(*[]byte); ok {
response.RespValue = respData
//err = decodeJSON(bytes.NewReader(respData), false, response.RespValue)
//if err != nil {
// err = errors.Newf(err, "failed unmarshaling/decoding the response body: %s", respData)
//}
} else {
err = json.Unmarshal(respData, response.RespValue)
if err != nil {
err = decodeJSON(bytes.NewReader(respData), true, response.RespValue)
if err != nil {
err = errors.Newf(err, "failed unmarshaling/decoding the response body: %s", respData)
}
}
}
}
}
if respHeader != nil {
response.RespHeaders = respHeader
}
return
}
示例2: TestErrorCause
func (s *ErrorsSuite) TestErrorCause(c *gc.C) {
rootCause := errors.NewResourceNotFoundf(nil, "some value", "")
// Construct a new error, based on a resource not found root cause.
err := errors.Newf(rootCause, "an error occurred")
c.Assert(err.Cause(), gc.Equals, rootCause)
// Check the other error attributes.
c.Assert(err.Error(), gc.Equals, "an error occurred\ncaused by: Resource Not Found: some value")
}
示例3: TestErrorIsType
func (s *ErrorsSuite) TestErrorIsType(c *gc.C) {
rootCause := errors.NewBadRequestf(nil, "some value", "")
// Construct a new error, based on a bad request root cause.
err := errors.Newf(rootCause, "an error occurred")
// Check that the error is not falsely identified as something it is not.
c.Assert(errors.IsNotAuthorized(err), gc.Equals, false)
// Check that the error is correctly identified as a not found error.
c.Assert(errors.IsBadRequest(err), gc.Equals, true)
}
示例4: sendRateLimitedRequest
func (c *Client) sendRateLimitedRequest(method, URL string, headers http.Header, reqData []byte,
logger *loggo.Logger) (resp *http.Response, err error) {
for i := 0; i < c.maxSendAttempts; i++ {
var reqReader io.Reader
if reqData != nil {
reqReader = bytes.NewReader(reqData)
}
req, err := http.NewRequest(method, URL, reqReader)
if err != nil {
err = errors.Newf(err, "failed creating the request %s", URL)
return nil, err
}
// Setting req.Close to true to avoid malformed HTTP version "nullHTTP/1.1" error
// See http://stackoverflow.com/questions/17714494/golang-http-request-results-in-eof-errors-when-making-multiple-requests-successi
req.Close = true
for header, values := range headers {
for _, value := range values {
req.Header.Add(header, value)
}
}
req.ContentLength = int64(len(reqData))
resp, err = c.Do(req)
if err != nil {
return nil, errors.Newf(err, "failed executing the request %s", URL)
}
if resp.StatusCode != http.StatusRequestEntityTooLarge || resp.Header.Get("Retry-After") == "" {
return resp, nil
}
resp.Body.Close()
retryAfter, err := strconv.ParseFloat(resp.Header.Get("Retry-After"), 64)
if err != nil {
return nil, errors.Newf(err, "Invalid Retry-After header %s", URL)
}
if retryAfter == 0 {
return nil, errors.Newf(err, "Resource limit exeeded at URL %s", URL)
}
if logger != nil {
logger.Warningf("Too many requests, retrying in %dms.", int(retryAfter*1000))
}
time.Sleep(time.Duration(retryAfter) * time.Second)
}
return nil, errors.Newf(err, "Maximum number of attempts (%d) reached sending request to %s", c.maxSendAttempts, URL)
}
示例5: CancelJob
// This cancels a job from doing any further work.
// Cancellation is asynchronous and "best effort"; there is no guarantee the job will actually stop
// See API docs: http://apidocs.joyent.com/manta/api.html#CancelJob
func (c *Client) CancelJob(jobId string) error {
req := request{
method: client.POST,
url: makeURL(apiJobs, jobId, apiJobsLive, apiJobsCancel),
expectedStatus: http.StatusAccepted,
}
if _, err := c.sendRequest(req); err != nil {
return errors.Newf(err, "failed to cancel job %s", jobId)
}
return nil
}
示例6: EndJobInputs
// This closes input for a job, and finalize the job.
// See API docs: http://apidocs.joyent.com/manta/api.html#EndJobInput
func (c *Client) EndJobInputs(jobId string) error {
req := request{
method: client.POST,
url: makeURL(apiJobs, jobId, apiJobsLive, apiJobsIn, apiJobsEnd),
expectedStatus: http.StatusAccepted,
}
if _, err := c.sendRequest(req); err != nil {
return errors.Newf(err, "failed to end inputs for job %s", jobId)
}
return nil
}
示例7: AddJobInputs
// Submits inputs to an already created job.
// See API docs: http://apidocs.joyent.com/manta/api.html#AddJobInputs
func (c *Client) AddJobInputs(jobId string, jobInputs io.Reader) error {
inputData, errI := ioutil.ReadAll(jobInputs)
if errI != nil {
return errors.Newf(errI, "failed to read inputs for job %s", jobId)
}
requestHeaders := make(http.Header)
requestHeaders.Set("Accept", "*/*")
requestHeaders.Set("Content-Type", "text/plain")
req := request{
method: client.POST,
url: makeURL(apiJobs, jobId, apiJobsLive, apiJobsIn),
reqValue: string(inputData),
reqHeader: requestHeaders,
expectedStatus: http.StatusNoContent,
}
if _, err := c.sendRequest(req); err != nil {
return errors.Newf(err, "failed to add inputs to job %s", jobId)
}
return nil
}
示例8: DeleteMachineTag
// DeleteMachineTag deletes a single tag from the specified machine.
// See API docs: http://apidocs.joyent.com/cloudapi/#DeleteMachineTag
func (c *Client) DeleteMachineTag(machineID, tagKey string) error {
req := request{
method: client.DELETE,
url: makeURL(apiMachines, machineID, apiTags, tagKey),
expectedStatus: http.StatusNoContent,
}
if _, err := c.sendRequest(req); err != nil {
return errors.Newf(err, "failed to delete tag with key %s for machine with id %s", tagKey, machineID)
}
return nil
}
示例9: DeleteImage
// DeleteImage (Beta) Delete the image specified by imageId. Must be image owner to do so.
// See API docs: http://apidocs.joyent.com/cloudapi/#DeleteImage
func (c *Client) DeleteImage(imageID string) error {
req := request{
method: client.DELETE,
url: makeURL(apiImages, imageID),
expectedStatus: http.StatusNoContent,
}
if _, err := c.sendRequest(req); err != nil {
return errors.Newf(err, "failed to delete image with id: %s", imageID)
}
return nil
}
示例10: DeleteKey
// DeleteKey deletes the key identified by keyName.
// See API docs: http://apidocs.joyent.com/cloudapi/#DeleteKey
func (c *Client) DeleteKey(keyName string) error {
req := request{
method: client.DELETE,
url: makeURL(apiKeys, keyName),
expectedStatus: http.StatusNoContent,
}
if _, err := c.sendRequest(req); err != nil {
return errors.Newf(err, "failed to delete key with name: %s", keyName)
}
return nil
}
示例11: DeleteFirewallRule
// DeleteFirewallRule removes the given firewall rule record from all the required account machines.
// See API docs: http://apidocs.joyent.com/cloudapi/#DeleteFirewallRule
func (c *Client) DeleteFirewallRule(fwRuleID string) error {
req := request{
method: client.DELETE,
url: makeURL(apiFirewallRules, fwRuleID),
expectedStatus: http.StatusNoContent,
}
if _, err := c.sendRequest(req); err != nil {
return errors.Newf(err, "failed to delete firewall rule with id %s", fwRuleID)
}
return nil
}
示例12: DeleteMachineSnapshot
// DeleteMachineSnapshot deletes the specified snapshot.
// See API docs: http://apidocs.joyent.com/cloudapi/#DeleteMachineSnapshot
func (c *Client) DeleteMachineSnapshot(machineID, snapshotName string) error {
req := request{
method: client.DELETE,
url: makeURL(apiMachines, machineID, apiSnapshots, snapshotName),
expectedStatus: http.StatusNoContent,
}
if _, err := c.sendRequest(req); err != nil {
return errors.Newf(err, "failed to delete snapshot %s for machine with id %s", snapshotName, machineID)
}
return nil
}
示例13: StartMachineFromSnapshot
// StartMachineFromSnapshot starts the machine from the specified snapshot.
// Machine must be in 'stopped' state.
// See API docs: http://apidocs.joyent.com/cloudapi/#StartMachineFromSnapshot
func (c *Client) StartMachineFromSnapshot(machineID, snapshotName string) error {
req := request{
method: client.POST,
url: makeURL(apiMachines, machineID, apiSnapshots, snapshotName),
expectedStatus: http.StatusAccepted,
}
if _, err := c.sendRequest(req); err != nil {
return errors.Newf(err, "failed to start machine with id %s from snapshot %s", machineID, snapshotName)
}
return nil
}
示例14: StartMachine
// Starts a stopped machine.
// See API docs: http://apidocs.joyent.com/cloudapi/#StartMachine
func (c *Client) StartMachine(machineId string) error {
req := request{
method: client.POST,
url: fmt.Sprintf("%s/%s?action=%s", apiMachines, machineId, actionStart),
expectedStatus: http.StatusAccepted,
}
if _, err := c.sendRequest(req); err != nil {
return errors.Newf(err, "failed to start machine with id: %s", machineId)
}
return nil
}
示例15: DeleteInstrumentation
// Destroys an instrumentation.
// See API docs: http://apidocs.joyent.com/cloudapi/#DeleteInstrumentation
func (c *Client) DeleteInstrumentation(instrumentationId string) error {
req := request{
method: client.DELETE,
url: makeURL(apiAnalytics, apiInstrumentations, instrumentationId),
expectedStatus: http.StatusNoContent,
}
if _, err := c.sendRequest(req); err != nil {
return errors.Newf(err, "failed to delete instrumentation with id %s", instrumentationId)
}
return nil
}