From fa5602486ac71b6d4dd5957299d6e4a59d92704f Mon Sep 17 00:00:00 2001 From: Evstigneev Denis Date: Wed, 18 Dec 2024 20:43:01 +0300 Subject: [PATCH] lintering && fix call hook (#122) Reviewed-on: https://git.unistack.org/unistack-org/micro-client-http/pulls/122 Co-authored-by: Evstigneev Denis Co-committed-by: Evstigneev Denis --- .gitignore | 39 +++++++++++++++++++++++++++++++++++++++ http.go | 45 ++++++++++++++++++++++----------------------- stream.go | 8 ++++---- util.go | 8 ++++---- 4 files changed, 69 insertions(+), 31 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2fff38 --- /dev/null +++ b/.gitignore @@ -0,0 +1,39 @@ +# Develop tools +/.vscode/ +/.idea/ +.idea +.vscode + +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Folders +_obj +_test +_build +.DS_Store + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +# Test binary, build with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# vim temp files +*~ +*.swp +*.swo diff --git a/http.go b/http.go index 29ff3fa..25b9e0d 100644 --- a/http.go +++ b/http.go @@ -6,7 +6,7 @@ import ( "bytes" "context" "fmt" - "io/ioutil" + "io" "net" "net/http" "net/url" @@ -46,7 +46,6 @@ type httpClient struct { httpcli *http.Client opts client.Options sync.RWMutex - init bool } func newRequest(ctx context.Context, log logger.Logger, addr string, req client.Request, ct string, cf codec.Codec, msg interface{}, opts client.CallOptions) (*http.Request, error) { @@ -124,7 +123,7 @@ func newRequest(ctx context.Context, log logger.Logger, addr string, req client. u, err = u.Parse(path) if err != nil { - return nil, errors.BadRequest("go.micro.client", err.Error()) + return nil, errors.BadRequest("go.micro.client", "%+v", err) } var nmsg interface{} @@ -135,12 +134,12 @@ func newRequest(ctx context.Context, log logger.Logger, addr string, req client. } if err != nil { - return nil, errors.BadRequest("go.micro.client", err.Error()) + return nil, errors.BadRequest("go.micro.client", "%+v", err) } u, err = url.Parse(fmt.Sprintf("%s://%s%s", scheme, host, path)) if err != nil { - return nil, errors.BadRequest("go.micro.client", err.Error()) + return nil, errors.BadRequest("go.micro.client", "%+v", err) } var cookies []*http.Cookie @@ -183,11 +182,11 @@ func newRequest(ctx context.Context, log logger.Logger, addr string, req client. for k, required := range vm { v, err = rutil.StructFieldByPath(msg, k) if err != nil { - return nil, errors.BadRequest("go.micro.client", err.Error()) + return nil, errors.BadRequest("go.micro.client", "%+v", err) } if rutil.IsZero(v) { if required == "true" { - return nil, errors.BadRequest("go.micro.client", fmt.Sprintf("required field %s not set", k)) + return nil, errors.BadRequest("go.micro.client", "required field %s not set", k) } continue } @@ -203,12 +202,12 @@ func newRequest(ctx context.Context, log logger.Logger, addr string, req client. b, err := cf.Marshal(nmsg) if err != nil { - return nil, errors.BadRequest("go.micro.client", err.Error()) + return nil, errors.BadRequest("go.micro.client", "%+v", err) } var hreq *http.Request if len(b) > 0 { - hreq, err = http.NewRequestWithContext(ctx, method, u.String(), ioutil.NopCloser(bytes.NewBuffer(b))) + hreq, err = http.NewRequestWithContext(ctx, method, u.String(), io.NopCloser(bytes.NewBuffer(b))) hreq.ContentLength = int64(len(b)) header.Set("Content-Length", fmt.Sprintf("%d", hreq.ContentLength)) } else { @@ -216,7 +215,7 @@ func newRequest(ctx context.Context, log logger.Logger, addr string, req client. } if err != nil { - return nil, errors.BadRequest("go.micro.client", err.Error()) + return nil, errors.BadRequest("go.micro.client", "%+v", err) } hreq.Header = header @@ -239,7 +238,7 @@ func (c *httpClient) call(ctx context.Context, addr string, req client.Request, cf, err := c.newCodec(ct) if err != nil { - return errors.BadRequest("go.micro.client", err.Error()) + return errors.BadRequest("go.micro.client", "%+v", err) } hreq, err := newRequest(ctx, c.opts.Logger, addr, req, ct, cf, req.Body(), opts) if err != nil { @@ -252,14 +251,14 @@ func (c *httpClient) call(ctx context.Context, addr string, req client.Request, switch err := err.(type) { case *url.Error: if err, ok := err.Err.(net.Error); ok && err.Timeout() { - return errors.Timeout("go.micro.client", err.Error()) + return errors.Timeout("go.micro.client", "%+v", err) } case net.Error: if err.Timeout() { - return errors.Timeout("go.micro.client", err.Error()) + return errors.Timeout("go.micro.client", "%+v", err) } } - return errors.InternalServerError("go.micro.client", err.Error()) + return errors.InternalServerError("go.micro.client", "%+v", err) } defer hrsp.Body.Close() @@ -276,12 +275,12 @@ func (c *httpClient) stream(ctx context.Context, addr string, req client.Request // get codec cf, err := c.newCodec(ct) if err != nil { - return nil, errors.BadRequest("go.micro.client", err.Error()) + return nil, errors.BadRequest("go.micro.client", "%+v", err) } cc, err := (c.httpcli.Transport).(*http.Transport).DialContext(ctx, "tcp", addr) if err != nil { - return nil, errors.InternalServerError("go.micro.client", fmt.Sprintf("Error dialing: %v", err)) + return nil, errors.InternalServerError("go.micro.client", "Error dialing: %v", err) } return &httpStream{ @@ -324,7 +323,7 @@ func (c *httpClient) Init(opts ...client.Option) error { c.funcPublish = c.fnPublish c.funcBatchPublish = c.fnBatchPublish - c.opts.Hooks.EachNext(func(hook options.Hook) { + c.opts.Hooks.EachPrev(func(hook options.Hook) { switch h := hook.(type) { case client.HookCall: c.funcCall = h(c.funcCall) @@ -430,7 +429,7 @@ func (c *httpClient) fnCall(ctx context.Context, req client.Request, rsp interfa // call backoff first. Someone may want an initial start delay t, err := callOpts.Backoff(ctx, req, i) if err != nil { - return errors.InternalServerError("go.micro.client", err.Error()) + return errors.InternalServerError("go.micro.client", "%+v", err) } // only sleep if greater than 0 @@ -444,7 +443,7 @@ func (c *httpClient) fnCall(ctx context.Context, req client.Request, rsp interfa // TODO apply any filtering here routes, err = c.opts.Lookup(ctx, req, callOpts) if err != nil { - return errors.InternalServerError("go.micro.client", err.Error()) + return errors.InternalServerError("go.micro.client", "%+v", err) } // balance the list of nodes @@ -589,7 +588,7 @@ func (c *httpClient) fnStream(ctx context.Context, req client.Request, opts ...c // call backoff first. Someone may want an initial start delay t, cerr := callOpts.Backoff(ctx, req, i) if cerr != nil { - return nil, errors.InternalServerError("go.micro.client", cerr.Error()) + return nil, errors.InternalServerError("go.micro.client", "%+v", cerr) } // only sleep if greater than 0 @@ -603,7 +602,7 @@ func (c *httpClient) fnStream(ctx context.Context, req client.Request, opts ...c // TODO apply any filtering here routes, err = c.opts.Lookup(ctx, req, callOpts) if err != nil { - return nil, errors.InternalServerError("go.micro.client", err.Error()) + return nil, errors.InternalServerError("go.micro.client", "%+v", err) } // balance the list of nodes @@ -728,12 +727,12 @@ func (c *httpClient) publish(ctx context.Context, ps []client.Message, opts ...c // use codec for payload cf, err := c.newCodec(p.ContentType()) if err != nil { - return errors.InternalServerError("go.micro.client", err.Error()) + return errors.InternalServerError("go.micro.client", "%+v", err) } // set the body b, err := cf.Marshal(p.Payload()) if err != nil { - return errors.InternalServerError("go.micro.client", err.Error()) + return errors.InternalServerError("go.micro.client", "%+v", err) } body = b } diff --git a/stream.go b/stream.go index c69ea44..3ba9cec 100644 --- a/stream.go +++ b/stream.go @@ -90,7 +90,7 @@ func (h *httpStream) Recv(msg interface{}) error { hrsp, err := http.ReadResponse(h.reader, new(http.Request)) if err != nil { - return errors.InternalServerError("go.micro.client", err.Error()) + return errors.InternalServerError("go.micro.client", "%+v", err) } defer hrsp.Body.Close() @@ -136,7 +136,7 @@ func (h *httpStream) parseRsp(ctx context.Context, log logger.Logger, hrsp *http if log.V(logger.ErrorLevel) { log.Error(ctx, "failed to read body", err) } - return errors.InternalServerError("go.micro.client", string(buf)) + return errors.InternalServerError("go.micro.client", "%s", buf) } } @@ -146,7 +146,7 @@ func (h *httpStream) parseRsp(ctx context.Context, log logger.Logger, hrsp *http if hrsp.StatusCode < 400 { if err = cf.Unmarshal(buf, rsp); err != nil { - return errors.InternalServerError("go.micro.client", err.Error()) + return errors.InternalServerError("go.micro.client", "%+v", err) } return nil } @@ -163,7 +163,7 @@ func (h *httpStream) parseRsp(ctx context.Context, log logger.Logger, hrsp *http } if cerr := cf.Unmarshal(buf, rerr); cerr != nil { - return errors.InternalServerError("go.micro.client", cerr.Error()) + return errors.InternalServerError("go.micro.client", "%+v", cerr) } if err, ok = rerr.(error); !ok { diff --git a/util.go b/util.go index 95e0e6b..ea8778b 100644 --- a/util.go +++ b/util.go @@ -334,7 +334,7 @@ func (h *httpClient) parseRsp(ctx context.Context, hrsp *http.Response, rsp inte if h.opts.Logger.V(logger.ErrorLevel) { h.opts.Logger.Error(ctx, "failed to read body", err) } - return errors.InternalServerError("go.micro.client", string(buf)) + return errors.InternalServerError("go.micro.client", "%s", buf) } } @@ -343,7 +343,7 @@ func (h *httpClient) parseRsp(ctx context.Context, hrsp *http.Response, rsp inte if h.opts.Logger.V(logger.DebugLevel) { h.opts.Logger.Debug(ctx, fmt.Sprintf("response with %v unknown content-type %s %s", hrsp.Header, ct, buf)) } - return errors.InternalServerError("go.micro.client", cerr.Error()) + return errors.InternalServerError("go.micro.client", "%+v", cerr) } if h.opts.Logger.V(logger.DebugLevel) { @@ -353,7 +353,7 @@ func (h *httpClient) parseRsp(ctx context.Context, hrsp *http.Response, rsp inte // succeseful response if hrsp.StatusCode < 400 { if err = cf.Unmarshal(buf, rsp); err != nil { - return errors.InternalServerError("go.micro.client", err.Error()) + return errors.InternalServerError("go.micro.client", "%+v", err) } return nil } @@ -373,7 +373,7 @@ func (h *httpClient) parseRsp(ctx context.Context, hrsp *http.Response, rsp inte } if cerr := cf.Unmarshal(buf, rerr); cerr != nil { - return errors.InternalServerError("go.micro.client", cerr.Error()) + return errors.InternalServerError("go.micro.client", "%+v", cerr) } if err, ok = rerr.(error); !ok {