From 3b615a3291b6f5398f5d332df85e41556c80042b Mon Sep 17 00:00:00 2001 From: Vincent Boutour Date: Sun, 7 Jan 2024 14:28:56 +0100 Subject: [PATCH] feat: Adding route tagging Signed-off-by: Vincent Boutour --- go.mod | 4 ++-- go.sum | 4 ++-- pkg/crud/create.go | 4 ++-- pkg/crud/get.go | 13 ++++++------- pkg/crud/post.go | 14 +++++++------- pkg/crud/rename.go | 4 ++-- pkg/fibr/renderer.go | 3 ++- pkg/fibr/utils.go | 15 --------------- 8 files changed, 23 insertions(+), 38 deletions(-) diff --git a/go.mod b/go.mod index c02f25f7..c389ccfb 100644 --- a/go.mod +++ b/go.mod @@ -10,13 +10,12 @@ require ( github.com/ViBiOh/auth/v2 v2.18.1 github.com/ViBiOh/exas v0.7.1 github.com/ViBiOh/flags v1.5.0 - github.com/ViBiOh/httputils/v4 v4.70.4 + github.com/ViBiOh/httputils/v4 v4.71.0 github.com/ViBiOh/vith v0.6.0 github.com/rabbitmq/amqp091-go v1.9.0 github.com/redis/go-redis/v9 v9.3.1 github.com/rs/xid v1.5.0 github.com/zeebo/xxh3 v1.0.2 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 go.opentelemetry.io/otel v1.21.0 go.opentelemetry.io/otel/metric v1.21.0 go.opentelemetry.io/otel/trace v1.21.0 @@ -49,6 +48,7 @@ require ( github.com/sirupsen/logrus v1.9.3 // indirect github.com/tdewolff/minify/v2 v2.20.10 // indirect github.com/tdewolff/parse/v2 v2.7.7 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect go.opentelemetry.io/contrib/instrumentation/runtime v0.46.1 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0 // indirect diff --git a/go.sum b/go.sum index ad4ca95e..04dea9bf 100644 --- a/go.sum +++ b/go.sum @@ -8,8 +8,8 @@ github.com/ViBiOh/exas v0.7.1 h1:nzh6E1668OFRgoTIJZJa1RybCW64Gd918qi0Z+0Q4WA= github.com/ViBiOh/exas v0.7.1/go.mod h1:MvIWQZXpWgg45Vsde9bMV48Kb0J8frya8vimmrkQ04E= github.com/ViBiOh/flags v1.5.0 h1:nwuFS8tAwtV6rTPpv2pCB+r12WjZYLjluW7yT+SeVpQ= github.com/ViBiOh/flags v1.5.0/go.mod h1:39UMuTnKsIp6walgD8dK99KRCb4DJt9vPtbWehHh1T0= -github.com/ViBiOh/httputils/v4 v4.70.4 h1:SMhk+wKNmQaf0jIinme0UErt4M/G4b7TLxOyUlkAi2w= -github.com/ViBiOh/httputils/v4 v4.70.4/go.mod h1:YQcY6qKO4SS5BSwkfpaA0xtTXlmuKOm7q4ie4UgKHMs= +github.com/ViBiOh/httputils/v4 v4.71.0 h1:FKLqcFV/STEbS3MU3epO8wMfeiDTSMd8TIcbgqfBTYc= +github.com/ViBiOh/httputils/v4 v4.71.0/go.mod h1:YQcY6qKO4SS5BSwkfpaA0xtTXlmuKOm7q4ie4UgKHMs= github.com/ViBiOh/vith v0.6.0 h1:bdLmwgqUEWi3ivShtAhtM9gOZlWQzvZi2Z5b0BRSB1U= github.com/ViBiOh/vith v0.6.0/go.mod h1:eRqtDU2uB8g85vll4spbnCV93DHyHNAYwXCMIBH1GuQ= github.com/bsm/ginkgo/v2 v2.7.0/go.mod h1:AiKlXPm7ItEHNc/2+OkrNG4E0ITzojb9/xWzvQ9XZ9w= diff --git a/pkg/crud/create.go b/pkg/crud/create.go index a276c27d..952c3714 100644 --- a/pkg/crud/create.go +++ b/pkg/crud/create.go @@ -7,14 +7,14 @@ import ( "path" absto "github.com/ViBiOh/absto/pkg/model" - "github.com/ViBiOh/fibr/pkg/fibr" "github.com/ViBiOh/fibr/pkg/provider" "github.com/ViBiOh/httputils/v4/pkg/model" "github.com/ViBiOh/httputils/v4/pkg/renderer" + "github.com/ViBiOh/httputils/v4/pkg/telemetry" ) func (s Service) Create(w http.ResponseWriter, r *http.Request, request provider.Request) { - fibr.SetRouteTag(r.Context(), "/mkdir") + telemetry.SetRouteTag(r.Context(), "/mkdir") if !request.CanEdit { s.error(w, r, request, model.WrapForbidden(ErrNotAuthorized)) diff --git a/pkg/crud/get.go b/pkg/crud/get.go index 547e778c..e58507c4 100644 --- a/pkg/crud/get.go +++ b/pkg/crud/get.go @@ -14,7 +14,6 @@ import ( "time" absto "github.com/ViBiOh/absto/pkg/model" - "github.com/ViBiOh/fibr/pkg/fibr" "github.com/ViBiOh/fibr/pkg/geo" "github.com/ViBiOh/fibr/pkg/metadata" "github.com/ViBiOh/fibr/pkg/provider" @@ -119,19 +118,19 @@ func (s Service) handleDir(w http.ResponseWriter, r *http.Request, request provi } if query.GetBool(r, "geojson") { - fibr.SetRouteTag(r.Context(), "/geojson") + telemetry.SetRouteTag(r.Context(), "/geojson") s.serveGeoJSON(w, r, request, item, items) return renderer.Page{}, nil } if query.GetBool(r, "thumbnail") { - fibr.SetRouteTag(r.Context(), "/thumbnail") + telemetry.SetRouteTag(r.Context(), "/thumbnail") s.thumbnail.List(w, r, item, items) return renderer.Page{}, nil } if query.GetBool(r, "download") { - fibr.SetRouteTag(r.Context(), "/download") + telemetry.SetRouteTag(r.Context(), "/download") s.Download(w, r, request, items) return errorReturn(request, err) } @@ -139,18 +138,18 @@ func (s Service) handleDir(w http.ResponseWriter, r *http.Request, request provi go s.pushEvent(cntxt.WithoutDeadline(r.Context()), provider.NewAccessEvent(r.Context(), item, r)) if query.GetBool(r, "search") { - fibr.SetRouteTag(r.Context(), "/search") + telemetry.SetRouteTag(r.Context(), "/search") return s.search(r, request, item, items) } provider.SetPrefsCookie(w, request) if request.IsStory() { - fibr.SetRouteTag(r.Context(), "/story") + telemetry.SetRouteTag(r.Context(), "/story") return s.story(r, request, item, items) } - fibr.SetRouteTag(r.Context(), "/directory") + telemetry.SetRouteTag(r.Context(), "/directory") return s.list(r.Context(), request, message, item, items) } diff --git a/pkg/crud/post.go b/pkg/crud/post.go index a99b9f26..d318343f 100644 --- a/pkg/crud/post.go +++ b/pkg/crud/post.go @@ -9,11 +9,11 @@ import ( "strconv" "strings" - "github.com/ViBiOh/fibr/pkg/fibr" "github.com/ViBiOh/fibr/pkg/provider" "github.com/ViBiOh/httputils/v4/pkg/cntxt" "github.com/ViBiOh/httputils/v4/pkg/model" "github.com/ViBiOh/httputils/v4/pkg/renderer" + "github.com/ViBiOh/httputils/v4/pkg/telemetry" ) func parseMultipart(r *http.Request) (map[string]string, *multipart.Part, error) { @@ -72,15 +72,15 @@ func (s Service) handleFormURLEncoded(w http.ResponseWriter, r *http.Request, re switch r.FormValue("type") { case "share": - fibr.SetRouteTag(r.Context(), "/share") + telemetry.SetRouteTag(r.Context(), "/share") s.handlePostShare(w, r, request, method) case "webhook": - fibr.SetRouteTag(r.Context(), "/webhook") + telemetry.SetRouteTag(r.Context(), "/webhook") s.handlePostWebhook(w, r, request, method) case "description": - fibr.SetRouteTag(r.Context(), "/description") + telemetry.SetRouteTag(r.Context(), "/description") s.handlePostDescription(w, r, request) default: @@ -114,14 +114,14 @@ func (s Service) handleMultipart(w http.ResponseWriter, r *http.Request, request chunkNumber = fmt.Sprintf("%010d", chunkNumberValue) - fibr.SetRouteTag(r.Context(), "/chunk") + telemetry.SetRouteTag(r.Context(), "/chunk") s.uploadChunk(w, r, request, values["filename"], chunkNumber, file) } else { - fibr.SetRouteTag(r.Context(), "/merge") + telemetry.SetRouteTag(r.Context(), "/merge") s.mergeChunk(w, r, request, values) } } else { - fibr.SetRouteTag(r.Context(), "/upload") + telemetry.SetRouteTag(r.Context(), "/upload") s.upload(w, r, request, values, file) } } diff --git a/pkg/crud/rename.go b/pkg/crud/rename.go index 0d9e7fd1..9a6f964b 100644 --- a/pkg/crud/rename.go +++ b/pkg/crud/rename.go @@ -8,11 +8,11 @@ import ( "strings" absto "github.com/ViBiOh/absto/pkg/model" - "github.com/ViBiOh/fibr/pkg/fibr" "github.com/ViBiOh/fibr/pkg/provider" "github.com/ViBiOh/httputils/v4/pkg/cntxt" "github.com/ViBiOh/httputils/v4/pkg/model" "github.com/ViBiOh/httputils/v4/pkg/renderer" + "github.com/ViBiOh/httputils/v4/pkg/telemetry" ) func (s Service) DoRename(ctx context.Context, oldPath, newPath string, oldItem absto.Item) (absto.Item, error) { @@ -62,7 +62,7 @@ func parseRenameParams(r *http.Request, request provider.Request) (string, strin } func (s Service) Rename(w http.ResponseWriter, r *http.Request, request provider.Request) { - fibr.SetRouteTag(r.Context(), "/rename") + telemetry.SetRouteTag(r.Context(), "/rename") if !request.CanEdit { s.error(w, r, request, model.WrapForbidden(ErrNotAuthorized)) diff --git a/pkg/fibr/renderer.go b/pkg/fibr/renderer.go index 0b7d670c..f016d4bb 100644 --- a/pkg/fibr/renderer.go +++ b/pkg/fibr/renderer.go @@ -11,6 +11,7 @@ import ( "github.com/ViBiOh/httputils/v4/pkg/model" "github.com/ViBiOh/httputils/v4/pkg/query" "github.com/ViBiOh/httputils/v4/pkg/renderer" + "github.com/ViBiOh/httputils/v4/pkg/telemetry" ) var FuncMap = template.FuncMap{ @@ -68,7 +69,7 @@ func (s Service) TemplateFunc(w http.ResponseWriter, r *http.Request) (renderer. } if r.URL.Path == "/sitemap.xml" { - SetRouteTag(r.Context(), "/sitemap.xml") + telemetry.SetRouteTag(r.Context(), "/sitemap.xml") return renderer.NewPage("sitemap", http.StatusOK, nil), nil } diff --git a/pkg/fibr/utils.go b/pkg/fibr/utils.go index e3b393d1..57066cd8 100644 --- a/pkg/fibr/utils.go +++ b/pkg/fibr/utils.go @@ -1,12 +1,7 @@ package fibr import ( - "context" "net/http" - - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" - semconv "go.opentelemetry.io/otel/semconv/v1.4.0" - "go.opentelemetry.io/otel/trace" ) func isMethodAllowed(r *http.Request) bool { @@ -17,13 +12,3 @@ func isMethodAllowed(r *http.Request) bool { return false } } - -func SetRouteTag(ctx context.Context, route string) { - attr := semconv.HTTPRouteKey.String(route) - - span := trace.SpanFromContext(ctx) - span.SetAttributes(attr) - - labeler, _ := otelhttp.LabelerFromContext(ctx) - labeler.Add(attr) -}