From 0a61466253b3c687843c9efadd13cffed8cfcfe2 Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Wed, 13 Jun 2018 10:04:47 -0700 Subject: [PATCH] vendor: upgrade "github.com/grpc-ecosystem/go-grpc-prometheus" Signed-off-by: Gyuho Lee --- Gopkg.lock | 3 +- .../go-grpc-prometheus/client_metrics.go | 31 +++++----- .../go-grpc-prometheus/metric_options.go | 41 +++++++++++++ .../go-grpc-prometheus/server_metrics.go | 57 ++++++------------- .../grpc-ecosystem/go-grpc-prometheus/util.go | 6 +- 5 files changed, 81 insertions(+), 57 deletions(-) create mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-prometheus/metric_options.go diff --git a/Gopkg.lock b/Gopkg.lock index f379fa44f..0f9dd4c0e 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -102,7 +102,8 @@ [[projects]] name = "github.com/grpc-ecosystem/go-grpc-prometheus" packages = ["."] - revision = "0dafe0d496ea71181bf2dd039e7e3f44b6bd11a7" + revision = "c225b8c3b01faf2899099b768856a9e916e5087b" + version = "v1.2.0" [[projects]] name = "github.com/grpc-ecosystem/grpc-gateway" diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client_metrics.go b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client_metrics.go index c3e21c1de..9b476f983 100644 --- a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client_metrics.go +++ b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/client_metrics.go @@ -7,6 +7,7 @@ import ( "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) // ClientMetrics represents a collection of metrics to be registered on a @@ -25,31 +26,32 @@ type ClientMetrics struct { // ClientMetrics when not using the default Prometheus metrics registry, for // example when wanting to control which metrics are added to a registry as // opposed to automatically adding metrics via init functions. -func NewClientMetrics() *ClientMetrics { +func NewClientMetrics(counterOpts ...CounterOption) *ClientMetrics { + opts := counterOptions(counterOpts) return &ClientMetrics{ clientStartedCounter: prom.NewCounterVec( - prom.CounterOpts{ + opts.apply(prom.CounterOpts{ Name: "grpc_client_started_total", Help: "Total number of RPCs started on the client.", - }, []string{"grpc_type", "grpc_service", "grpc_method"}), + }), []string{"grpc_type", "grpc_service", "grpc_method"}), clientHandledCounter: prom.NewCounterVec( - prom.CounterOpts{ + opts.apply(prom.CounterOpts{ Name: "grpc_client_handled_total", Help: "Total number of RPCs completed by the client, regardless of success or failure.", - }, []string{"grpc_type", "grpc_service", "grpc_method", "grpc_code"}), + }), []string{"grpc_type", "grpc_service", "grpc_method", "grpc_code"}), clientStreamMsgReceived: prom.NewCounterVec( - prom.CounterOpts{ + opts.apply(prom.CounterOpts{ Name: "grpc_client_msg_received_total", Help: "Total number of RPC stream messages received by the client.", - }, []string{"grpc_type", "grpc_service", "grpc_method"}), + }), []string{"grpc_type", "grpc_service", "grpc_method"}), clientStreamMsgSent: prom.NewCounterVec( - prom.CounterOpts{ + opts.apply(prom.CounterOpts{ Name: "grpc_client_msg_sent_total", Help: "Total number of gRPC stream messages sent by the client.", - }, []string{"grpc_type", "grpc_service", "grpc_method"}), + }), []string{"grpc_type", "grpc_service", "grpc_method"}), clientHandledHistogramEnabled: false, clientHandledHistogramOpts: prom.HistogramOpts{ @@ -111,18 +113,20 @@ func (m *ClientMetrics) UnaryClientInterceptor() func(ctx context.Context, metho if err != nil { monitor.ReceivedMessage() } - monitor.Handled(grpc.Code(err)) + st, _ := status.FromError(err) + monitor.Handled(st.Code()) return err } } -// StreamServerInterceptor is a gRPC client-side interceptor that provides Prometheus monitoring for Streaming RPCs. +// StreamClientInterceptor is a gRPC client-side interceptor that provides Prometheus monitoring for Streaming RPCs. func (m *ClientMetrics) StreamClientInterceptor() func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { return func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { monitor := newClientReporter(m, clientStreamType(desc), method) clientStream, err := streamer(ctx, desc, cc, method, opts...) if err != nil { - monitor.Handled(grpc.Code(err)) + st, _ := status.FromError(err) + monitor.Handled(st.Code()) return nil, err } return &monitoredClientStream{clientStream, monitor}, nil @@ -159,7 +163,8 @@ func (s *monitoredClientStream) RecvMsg(m interface{}) error { } else if err == io.EOF { s.monitor.Handled(codes.OK) } else { - s.monitor.Handled(grpc.Code(err)) + st, _ := status.FromError(err) + s.monitor.Handled(st.Code()) } return err } diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/metric_options.go b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/metric_options.go new file mode 100644 index 000000000..9d51aec98 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/metric_options.go @@ -0,0 +1,41 @@ +package grpc_prometheus + +import ( + prom "github.com/prometheus/client_golang/prometheus" +) + +// A CounterOption lets you add options to Counter metrics using With* funcs. +type CounterOption func(*prom.CounterOpts) + +type counterOptions []CounterOption + +func (co counterOptions) apply(o prom.CounterOpts) prom.CounterOpts { + for _, f := range co { + f(&o) + } + return o +} + +// WithConstLabels allows you to add ConstLabels to Counter metrics. +func WithConstLabels(labels prom.Labels) CounterOption { + return func(o *prom.CounterOpts) { + o.ConstLabels = labels + } +} + +// A HistogramOption lets you add options to Histogram metrics using With* +// funcs. +type HistogramOption func(*prom.HistogramOpts) + +// WithHistogramBuckets allows you to specify custom bucket ranges for histograms if EnableHandlingTimeHistogram is on. +func WithHistogramBuckets(buckets []float64) HistogramOption { + return func(o *prom.HistogramOpts) { o.Buckets = buckets } +} + +// WithHistogramConstLabels allows you to add custom ConstLabels to +// histograms metrics. +func WithHistogramConstLabels(labels prom.Labels) HistogramOption { + return func(o *prom.HistogramOpts) { + o.ConstLabels = labels + } +} diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server_metrics.go b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server_metrics.go index 1245d71a4..5b1467e7a 100644 --- a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server_metrics.go +++ b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/server_metrics.go @@ -4,6 +4,7 @@ import ( prom "github.com/prometheus/client_golang/prometheus" "golang.org/x/net/context" "google.golang.org/grpc" + "google.golang.org/grpc/status" ) // ServerMetrics represents a collection of metrics to be registered on a @@ -22,28 +23,29 @@ type ServerMetrics struct { // ServerMetrics when not using the default Prometheus metrics registry, for // example when wanting to control which metrics are added to a registry as // opposed to automatically adding metrics via init functions. -func NewServerMetrics() *ServerMetrics { +func NewServerMetrics(counterOpts ...CounterOption) *ServerMetrics { + opts := counterOptions(counterOpts) return &ServerMetrics{ serverStartedCounter: prom.NewCounterVec( - prom.CounterOpts{ + opts.apply(prom.CounterOpts{ Name: "grpc_server_started_total", Help: "Total number of RPCs started on the server.", - }, []string{"grpc_type", "grpc_service", "grpc_method"}), + }), []string{"grpc_type", "grpc_service", "grpc_method"}), serverHandledCounter: prom.NewCounterVec( - prom.CounterOpts{ + opts.apply(prom.CounterOpts{ Name: "grpc_server_handled_total", Help: "Total number of RPCs completed on the server, regardless of success or failure.", - }, []string{"grpc_type", "grpc_service", "grpc_method", "grpc_code"}), + }), []string{"grpc_type", "grpc_service", "grpc_method", "grpc_code"}), serverStreamMsgReceived: prom.NewCounterVec( - prom.CounterOpts{ + opts.apply(prom.CounterOpts{ Name: "grpc_server_msg_received_total", Help: "Total number of RPC stream messages received on the server.", - }, []string{"grpc_type", "grpc_service", "grpc_method"}), + }), []string{"grpc_type", "grpc_service", "grpc_method"}), serverStreamMsgSent: prom.NewCounterVec( - prom.CounterOpts{ + opts.apply(prom.CounterOpts{ Name: "grpc_server_msg_sent_total", Help: "Total number of gRPC stream messages sent by the server.", - }, []string{"grpc_type", "grpc_service", "grpc_method"}), + }), []string{"grpc_type", "grpc_service", "grpc_method"}), serverHandledHistogramEnabled: false, serverHandledHistogramOpts: prom.HistogramOpts{ Name: "grpc_server_handling_seconds", @@ -54,13 +56,6 @@ func NewServerMetrics() *ServerMetrics { } } -type HistogramOption func(*prom.HistogramOpts) - -// WithHistogramBuckets allows you to specify custom bucket ranges for histograms if EnableHandlingTimeHistogram is on. -func WithHistogramBuckets(buckets []float64) HistogramOption { - return func(o *prom.HistogramOpts) { o.Buckets = buckets } -} - // EnableHandlingTimeHistogram enables histograms being registered when // registering the ServerMetrics on a Prometheus registry. Histograms can be // expensive on Prometheus servers. It takes options to configure histogram @@ -110,7 +105,8 @@ func (m *ServerMetrics) UnaryServerInterceptor() func(ctx context.Context, req i monitor := newServerReporter(m, Unary, info.FullMethod) monitor.ReceivedMessage() resp, err := handler(ctx, req) - monitor.Handled(grpc.Code(err)) + st, _ := status.FromError(err) + monitor.Handled(st.Code()) if err == nil { monitor.SentMessage() } @@ -121,9 +117,10 @@ func (m *ServerMetrics) UnaryServerInterceptor() func(ctx context.Context, req i // StreamServerInterceptor is a gRPC server-side interceptor that provides Prometheus monitoring for Streaming RPCs. func (m *ServerMetrics) StreamServerInterceptor() func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { return func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { - monitor := newServerReporter(m, streamRpcType(info), info.FullMethod) + monitor := newServerReporter(m, streamRPCType(info), info.FullMethod) err := handler(srv, &monitoredServerStream{ss, monitor}) - monitor.Handled(grpc.Code(err)) + st, _ := status.FromError(err) + monitor.Handled(st.Code()) return err } } @@ -140,27 +137,7 @@ func (m *ServerMetrics) InitializeMetrics(server *grpc.Server) { } } -// Register registers all server metrics in a given metrics registry. Depending -// on histogram options and whether they are enabled, histogram metrics are -// also registered. -// -// Deprecated: ServerMetrics implements Prometheus Collector interface. You can -// register an instance of ServerMetrics directly by using -// prometheus.Register(m). -func (m *ServerMetrics) Register(r prom.Registerer) error { - return r.Register(m) -} - -// MustRegister tries to register all server metrics and panics on an error. -// -// Deprecated: ServerMetrics implements Prometheus Collector interface. You can -// register an instance of ServerMetrics directly by using -// prometheus.MustRegister(m). -func (m *ServerMetrics) MustRegister(r prom.Registerer) { - r.MustRegister(m) -} - -func streamRpcType(info *grpc.StreamServerInfo) grpcType { +func streamRPCType(info *grpc.StreamServerInfo) grpcType { if info.IsClientStream && !info.IsServerStream { return ClientStream } else if !info.IsClientStream && info.IsServerStream { diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/util.go b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/util.go index d581c7925..7987de35f 100644 --- a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/util.go +++ b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/util.go @@ -37,13 +37,13 @@ func splitMethodName(fullMethodName string) (string, string) { } func typeFromMethodInfo(mInfo *grpc.MethodInfo) grpcType { - if mInfo.IsClientStream == false && mInfo.IsServerStream == false { + if !mInfo.IsClientStream && !mInfo.IsServerStream { return Unary } - if mInfo.IsClientStream == true && mInfo.IsServerStream == false { + if mInfo.IsClientStream && !mInfo.IsServerStream { return ClientStream } - if mInfo.IsClientStream == false && mInfo.IsServerStream == true { + if !mInfo.IsClientStream && mInfo.IsServerStream { return ServerStream } return BidiStream