hotfix (#186)
## Pull Request template Please, go through these steps before clicking submit on this PR. 1. Give a descriptive title to your PR. 2. Provide a description of your changes. 3. Make sure you have some relevant tests. 4. Put `closes #XXXX` in your comment to auto-close the issue that your PR fixes (if applicable). **PLEASE REMOVE THIS TEMPLATE BEFORE SUBMITTING** Co-authored-by: Gorbunov Kirill Andreevich <kgorbunov@mtsbank.ru> Reviewed-on: #186 Co-authored-by: Кирилл Горбунов <kirya_gorbunov_2015@mail.ru> Co-committed-by: Кирилл Горбунов <kirya_gorbunov_2015@mail.ru>
This commit was merged in pull request #186.
	This commit is contained in:
		| @@ -42,9 +42,10 @@ type Handler struct { | ||||
| type Option func(*Options) | ||||
|  | ||||
| type Options struct { | ||||
| 	Meter        meter.Meter | ||||
| 	Name         string | ||||
| 	MeterOptions []options.Option | ||||
| 	Meter           meter.Meter | ||||
| 	Name            string | ||||
| 	MeterOptions    []options.Option | ||||
| 	DisableCompress bool | ||||
| } | ||||
|  | ||||
| func Meter(m meter.Meter) Option { | ||||
| @@ -59,6 +60,12 @@ func Name(name string) Option { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func DisableCompress(g bool) Option { | ||||
| 	return func(o *Options) { | ||||
| 		o.DisableCompress = g | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func MeterOptions(opts ...options.Option) Option { | ||||
| 	return func(o *Options) { | ||||
| 		o.MeterOptions = append(o.MeterOptions, opts...) | ||||
| @@ -66,7 +73,7 @@ func MeterOptions(opts ...options.Option) Option { | ||||
| } | ||||
|  | ||||
| func NewOptions(opts ...Option) Options { | ||||
| 	options := Options{Meter: meter.DefaultMeter} | ||||
| 	options := Options{Meter: meter.DefaultMeter, DisableCompress: false} | ||||
| 	for _, o := range opts { | ||||
| 		o(&options) | ||||
| 	} | ||||
| @@ -90,8 +97,9 @@ func (h *Handler) Metrics(ctx context.Context, req *codecpb.Frame, rsp *codecpb. | ||||
|  | ||||
| 	w := io.Writer(buf) | ||||
|  | ||||
| 	if md, ok := metadata.FromContext(ctx); gzipAccepted(md) && ok { | ||||
| 		md.Set(contentEncodingHeader, "gzip") | ||||
| 	if md, ok := metadata.FromIncomingContext(ctx); gzipAccepted(md) && ok && !h.opts.DisableCompress { | ||||
| 		omd, _ := metadata.FromOutgoingContext(ctx) | ||||
| 		omd.Set(contentEncodingHeader, "gzip") | ||||
| 		gz := gzipPool.Get().(*gzip.Writer) | ||||
| 		defer gzipPool.Put(gz) | ||||
|  | ||||
| @@ -99,6 +107,7 @@ func (h *Handler) Metrics(ctx context.Context, req *codecpb.Frame, rsp *codecpb. | ||||
| 		defer gz.Close() | ||||
|  | ||||
| 		w = gz | ||||
| 		gz.Flush() | ||||
| 	} | ||||
|  | ||||
| 	if err := h.opts.Meter.Write(w, h.opts.MeterOptions...); err != nil { | ||||
|   | ||||
							
								
								
									
										49
									
								
								handler/meter/meter_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								handler/meter/meter_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | ||||
| package meter | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"testing" | ||||
|  | ||||
| 	codecpb "go.unistack.org/micro-proto/v4/codec" | ||||
| ) | ||||
|  | ||||
| func TestHandler_Metrics(t *testing.T) { | ||||
| 	type fields struct { | ||||
| 		opts Options | ||||
| 	} | ||||
| 	type args struct { | ||||
| 		ctx context.Context | ||||
| 		req *codecpb.Frame | ||||
| 		rsp *codecpb.Frame | ||||
| 	} | ||||
| 	tests := []struct { | ||||
| 		name    string | ||||
| 		fields  fields | ||||
| 		args    args | ||||
| 		wantErr bool | ||||
| 	}{ | ||||
| 		{ | ||||
| 			"Test #1", | ||||
| 			fields{ | ||||
| 				opts: NewOptions(), | ||||
| 			}, | ||||
| 			args{ | ||||
| 				context.Background(), | ||||
| 				&codecpb.Frame{Data: []byte("gzip")}, | ||||
| 				&codecpb.Frame{}, | ||||
| 			}, | ||||
| 			true, | ||||
| 		}, | ||||
| 	} | ||||
| 	for _, tt := range tests { | ||||
| 		t.Run(tt.name, func(t *testing.T) { | ||||
| 			h := &Handler{ | ||||
| 				opts: tt.fields.opts, | ||||
| 			} | ||||
| 			if err := h.Metrics(tt.args.ctx, tt.args.req, tt.args.rsp); (err != nil) != tt.wantErr { | ||||
| 				t.Errorf("Metrics() error = %v, wantErr %v", err, tt.wantErr) | ||||
| 			} | ||||
| 			t.Logf("RSP: %v", tt.args.rsp.Data) | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user