diff --git a/handler/meter/meter.go b/handler/meter/meter.go index 996f8c0..16941c6 100644 --- a/handler/meter/meter.go +++ b/handler/meter/meter.go @@ -4,6 +4,7 @@ import ( "bytes" "compress/gzip" "context" + "io" "strings" "sync" @@ -73,8 +74,12 @@ func NewHandler(opts ...Option) *Handler { } func (h *Handler) Metrics(ctx context.Context, req *codecpb.Frame, rsp *codecpb.Frame) error { - log := logger.DefaultLogger() + log, ok := logger.FromContext(ctx) + if !ok { + log = logger.DefaultLogger() + } buf := bytes.NewBuffer(nil) + w := io.Writer(buf) if md, ok := metadata.FromContext(ctx); gzipAccepted(md) && ok { md.Set(contentEncodingHeader, "gzip") @@ -84,12 +89,10 @@ func (h *Handler) Metrics(ctx context.Context, req *codecpb.Frame, rsp *codecpb. gz.Reset(buf) defer gz.Close() - zw := gzip.NewWriter(buf) - defer zw.Close() - *zw = *gz + w = gz } - if err := h.opts.Meter.Write(buf, h.opts.MeterOptions...); err != nil { + if err := h.opts.Meter.Write(w, h.opts.MeterOptions...); err != nil { log.Error(ctx, errors.InternalServerError(h.opts.Name, "%v", err)) return nil } @@ -105,12 +108,8 @@ func gzipAccepted(md metadata.Metadata) bool { if !ok { return false } - parts := strings.Split(a, ",") - for _, part := range parts { - part = strings.TrimSpace(part) - if part == "gzip" || strings.HasPrefix(part, "gzip;") { - return true - } + if strings.Contains(a, "gzip") { + return true } return false }