diff options
| author | n1c00o <n@nc0.fr> | 2023-02-05 14:05:26 +0100 | 
|---|---|---|
| committer | Nicolas <34602094+n1c00o@users.noreply.github.com> | 2023-02-06 22:35:54 +0100 | 
| commit | b371cb11a5877ede8847351e95c7847b5024a551 (patch) | |
| tree | 958227cf8562503246976744b89370d389de5f66 /vendor/go.opencensus.io/plugin/ochttp/route.go | |
| parent | 03e0c597ad5f3539ad33976fe02c11a9e39f34d6 (diff) | |
Init Go module
Diffstat (limited to 'vendor/go.opencensus.io/plugin/ochttp/route.go')
| -rw-r--r-- | vendor/go.opencensus.io/plugin/ochttp/route.go | 61 | 
1 files changed, 61 insertions, 0 deletions
diff --git a/vendor/go.opencensus.io/plugin/ochttp/route.go b/vendor/go.opencensus.io/plugin/ochttp/route.go new file mode 100644 index 0000000..5e6a343 --- /dev/null +++ b/vendor/go.opencensus.io/plugin/ochttp/route.go @@ -0,0 +1,61 @@ +// Copyright 2018, OpenCensus Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//     http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package ochttp + +import ( +	"context" +	"net/http" + +	"go.opencensus.io/tag" +) + +// SetRoute sets the http_server_route tag to the given value. +// It's useful when an HTTP framework does not support the http.Handler interface +// and using WithRouteTag is not an option, but provides a way to hook into the request flow. +func SetRoute(ctx context.Context, route string) { +	if a, ok := ctx.Value(addedTagsKey{}).(*addedTags); ok { +		a.t = append(a.t, tag.Upsert(KeyServerRoute, route)) +	} +} + +// WithRouteTag returns an http.Handler that records stats with the +// http_server_route tag set to the given value. +func WithRouteTag(handler http.Handler, route string) http.Handler { +	return taggedHandlerFunc(func(w http.ResponseWriter, r *http.Request) []tag.Mutator { +		addRoute := []tag.Mutator{tag.Upsert(KeyServerRoute, route)} +		ctx, _ := tag.New(r.Context(), addRoute...) +		r = r.WithContext(ctx) +		handler.ServeHTTP(w, r) +		return addRoute +	}) +} + +// taggedHandlerFunc is a http.Handler that returns tags describing the +// processing of the request. These tags will be recorded along with the +// measures in this package at the end of the request. +type taggedHandlerFunc func(w http.ResponseWriter, r *http.Request) []tag.Mutator + +func (h taggedHandlerFunc) ServeHTTP(w http.ResponseWriter, r *http.Request) { +	tags := h(w, r) +	if a, ok := r.Context().Value(addedTagsKey{}).(*addedTags); ok { +		a.t = append(a.t, tags...) +	} +} + +type addedTagsKey struct{} + +type addedTags struct { +	t []tag.Mutator +}  | 
