Documentation ¶
Index ¶
- Variables
- func ClientUserHeaderInterceptor(ctx context.Context, method string, req, reply interface{}, ...) error
- func CountingListener(l net.Listener, g prometheus.Gauge) net.Listener
- func IsWSHandshakeRequest(req *http.Request) bool
- func MakeLabelValue(path string) string
- func NewStatsHandler(receivedPayloadSize, sentPayloadSize *prometheus.HistogramVec, ...) stats.Handler
- func ServerUserHeaderInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, ...) (interface{}, error)
- func StreamClientInstrumentInterceptor(metric *prometheus.HistogramVec) grpc.StreamClientInterceptor
- func StreamClientUserHeaderInterceptor(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, ...) (grpc.ClientStream, error)
- func StreamServerInstrumentInterceptor(hist *prometheus.HistogramVec) grpc.StreamServerInterceptor
- func StreamServerUserHeaderInterceptor(srv interface{}, ss grpc.ServerStream, _ *grpc.StreamServerInfo, ...) error
- func UnaryClientInstrumentInterceptor(metric *prometheus.HistogramVec) grpc.UnaryClientInterceptor
- func UnaryServerInstrumentInterceptor(hist *prometheus.HistogramVec) grpc.UnaryServerInterceptor
- type ErrorHandler
- type Func
- type GRPCServerLog
- type HeaderAdder
- type Instrument
- type Interface
- type Log
- type OptionalLogging
- type RouteMatcher
- type SourceIPExtractor
- type Tracer
Constants ¶
This section is empty.
Variables ¶
var AuthenticateUser = Func(func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, ctx, err := user.ExtractOrgIDFromHTTPRequest(r) if err != nil { http.Error(w, err.Error(), http.StatusUnauthorized) return } next.ServeHTTP(w, r.WithContext(ctx)) }) })
AuthenticateUser propagates the user ID from HTTP headers back to the request's context.
var BodySizeBuckets = []float64{1 * mb, 2.5 * mb, 5 * mb, 10 * mb, 25 * mb, 50 * mb, 100 * mb, 250 * mb}
BodySizeBuckets defines buckets for request/response body sizes.
var Logging = Log{ Log: logging.Global(), }
Logging middleware logs each HTTP request method, path, response code and duration for all HTTP requests.
Functions ¶
func ClientUserHeaderInterceptor ¶
func ClientUserHeaderInterceptor(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error
ClientUserHeaderInterceptor propagates the user ID from the context to gRPC metadata, which eventually ends up as a HTTP2 header.
func CountingListener ¶
CountingListener returns a Listener that increments a Prometheus gauge when a connection is accepted, and decrements the gauge when the connection is closed.
func IsWSHandshakeRequest ¶
IsWSHandshakeRequest returns true if the given request is a websocket handshake request.
func MakeLabelValue ¶
MakeLabelValue converts a Gorilla mux path to a string suitable for use in a Prometheus label value.
func NewStatsHandler ¶
func NewStatsHandler(receivedPayloadSize, sentPayloadSize *prometheus.HistogramVec, inflightRequests *prometheus.GaugeVec) stats.Handler
NewStatsHandler creates handler that can be added to gRPC server options to track received and sent message sizes.
func ServerUserHeaderInterceptor ¶
func ServerUserHeaderInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error)
ServerUserHeaderInterceptor propagates the user ID from the gRPC metadata back to our context.
func StreamClientInstrumentInterceptor ¶
func StreamClientInstrumentInterceptor(metric *prometheus.HistogramVec) grpc.StreamClientInterceptor
StreamClientInstrumentInterceptor records duration of streaming gRPC requests client side.
func StreamClientUserHeaderInterceptor ¶
func StreamClientUserHeaderInterceptor(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error)
StreamClientUserHeaderInterceptor propagates the user ID from the context to gRPC metadata, which eventually ends up as a HTTP2 header. For streaming gRPC requests.
func StreamServerInstrumentInterceptor ¶
func StreamServerInstrumentInterceptor(hist *prometheus.HistogramVec) grpc.StreamServerInterceptor
StreamServerInstrumentInterceptor instruments gRPC requests for errors and latency.
func StreamServerUserHeaderInterceptor ¶
func StreamServerUserHeaderInterceptor(srv interface{}, ss grpc.ServerStream, _ *grpc.StreamServerInfo, handler grpc.StreamHandler) error
StreamServerUserHeaderInterceptor propagates the user ID from the gRPC metadata back to our context.
func UnaryClientInstrumentInterceptor ¶
func UnaryClientInstrumentInterceptor(metric *prometheus.HistogramVec) grpc.UnaryClientInterceptor
UnaryClientInstrumentInterceptor records duration of gRPC requests client side.
func UnaryServerInstrumentInterceptor ¶
func UnaryServerInstrumentInterceptor(hist *prometheus.HistogramVec) grpc.UnaryServerInterceptor
UnaryServerInstrumentInterceptor instruments gRPC requests for errors and latency.
Types ¶
type ErrorHandler ¶
ErrorHandler lets you call an alternate http handler upon a certain response code. Note it will assume a 200 if the wrapped handler does not write anything
type GRPCServerLog ¶
type GRPCServerLog struct { Log logging.Interface // WithRequest will log the entire request rather than just the error WithRequest bool DisableRequestSuccessLog bool }
GRPCServerLog logs grpc requests, errors, and latency.
func (GRPCServerLog) StreamServerInterceptor ¶
func (s GRPCServerLog) StreamServerInterceptor(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error
StreamServerInterceptor returns an interceptor that logs gRPC requests
func (GRPCServerLog) UnaryServerInterceptor ¶
func (s GRPCServerLog) UnaryServerInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error)
UnaryServerInterceptor returns an interceptor that logs gRPC requests
type HeaderAdder ¶
HeaderAdder adds headers to responses
type Instrument ¶
type Instrument struct { RouteMatcher RouteMatcher Duration *prometheus.HistogramVec RequestBodySize *prometheus.HistogramVec ResponseBodySize *prometheus.HistogramVec InflightRequests *prometheus.GaugeVec }
Instrument is a Middleware which records timings for every HTTP request
type Interface ¶
Interface is the shared contract for all middlesware, and allows middlesware to wrap handlers.
Identity is an Interface which doesn't do anything.
func Merge ¶
Merge produces a middleware that applies multiple middlesware in turn; ie Merge(f,g,h).Wrap(handler) == f.Wrap(g.Wrap(h.Wrap(handler)))
func PathReplace ¶
PathReplace replcase Request.RequestURI with the specified string.
type Log ¶
type Log struct { Log logging.Interface DisableRequestSuccessLog bool LogRequestHeaders bool // LogRequestHeaders true -> dump http headers at debug log level LogRequestAtInfoLevel bool // LogRequestAtInfoLevel true -> log requests at info log level SourceIPs *SourceIPExtractor HttpHeadersToExclude map[string]bool }
Log middleware logs http requests
func NewLogMiddleware ¶
type OptionalLogging ¶
An error can implement ShouldLog() to control whether GRPCServerLog will log.
type RouteMatcher ¶
type RouteMatcher interface {
Match(*http.Request, *mux.RouteMatch) bool
}
RouteMatcher matches routes
type SourceIPExtractor ¶
type SourceIPExtractor struct {
// contains filtered or unexported fields
}
SourceIPExtractor extracts the source IPs from a HTTP request
func NewSourceIPs ¶
func NewSourceIPs(header, regex string) (*SourceIPExtractor, error)
NewSourceIPs creates a new SourceIPs