Skip to content

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit e6f9504a62f70f45c9e742a054ce05187f175176
Author: Pasha, Rehan <Rehan.Pasha@fmr.com>
Date:   Tue Jun 11 14:34:25 2024 +0530

    Update gintrace.go

    Signed-off-by: Pasha, Rehan <Rehan.Pasha@fmr.com>

commit 8f532bdd4dee57093934a2ce3f717b3ad657d0c4
Author: Pasha, Rehan <Rehan.Pasha@fmr.com>
Date:   Tue Jun 11 14:31:49 2024 +0530

    Update option.go

    Signed-off-by: Pasha, Rehan <Rehan.Pasha@fmr.com>

commit 52b9271c55f98f64bd10838209bde7fcced30dcc
Merge: ec30e0b1 c7b10074
Author: Rehan Pasha <rehan.pasha@fmr.com>
Date:   Tue Jun 11 14:30:06 2024 +0530

    Merge branch 'rehanosp' of https://github.com/fidelity-external-staging/open-telemetry-opentelemetry-go-contrib into rehanosp

commit ec30e0b158ca3a00c6df0e5495f34f990a59c153
Author: Rehan Pasha <rehan.pasha@fmr.com>
Date:   Tue Jun 11 14:29:42 2024 +0530

    Fixing the test

commit c7b10074e6e4b90b16b384fe661d351d8ffbe035
Author: Rehan Pasha <rehan.pasha@fmr.com>
Date:   Tue Jun 11 14:23:20 2024 +0530

    Fixing the test

commit 969a646a0cf4f0d430fd5fa4255f65c52d5bfee5
Merge: 737ff9e 8b12e62
Author: Rehan Pasha <rehan.pasha@fmr.com>
Date:   Tue Jun 11 14:06:24 2024 +0530

    Merge branch 'main' of https://github.com/fidelity-external-staging/open-telemetry-opentelemetry-go-contrib into rehanosp

commit 737ff9e
Author: Rehan Pasha <rehan.pasha@fmr.com>
Date:   Fri Jun 7 18:33:59 2024 +0530

    Squashed commit of the following:

    commit 93a2b553456d9bbb19b59da9d1e611ee096412a7
    Merge: 73dd86e7 85969a3
    Author: Rehan Pasha <rehan.pasha@fmr.com>
    Date:   Fri Jun 7 18:25:10 2024 +0530

        Merge branch 'main' of https://github.com/fidelity-external-staging/open-telemetry-opentelemetry-go-contrib into rehanosp

    commit 73dd86e74e37ce595707fd8daa75df1af934706a
    Author: Rehan Pasha <rehan.pasha@fmr.com>
    Date:   Fri Jun 7 16:17:30 2024 +0530

        feat: Update WithGinFilter to use GinFilter type

        The `WithGinFilter` function in `option.go` has been updated to use the `GinFilter` type instead of the generic `Filter` type. This change ensures that only `GinFilter` instances are added to the list of filters used by the handler.

    commit c0330a053d35a2294ae2010ab3bc13eb8a6906b3
    Author: Rehan Pasha <rehan.pasha@fmr.com>
    Date:   Fri Jun 7 15:42:30 2024 +0530

        Fixing the filter and adding test open-telemetry#5743 (comment)

    commit 1facc34
    Merge: ce53f63 3488eb8
    Author: Rehan Pasha <rehan.pasha@fmr.com>
    Date:   Tue May 28 13:50:32 2024 +0530

        Merge branch 'rehanosp' of https://github.com/fidelity-external-staging/open-telemetry-opentelemetry-go-contrib into rehanosp

    commit ce53f63
    Author: Rehan Pasha <rehan.pasha@fmr.com>
    Date:   Tue May 28 13:50:12 2024 +0530

        I’ve added my DCO signoff at the project’s request. There are no other changes.

        Signed-off-by: Rehan Pasha <rehan.pasha@fmr.com>

    commit 3488eb8
    Merge: cce7c22 606c275
    Author: Rehan Pasha <rehan.pasha@fmr.com>
    Date:   Tue May 28 13:35:07 2024 +0530

        Merge branch 'rehanosp' of https://github.com/fidelity-external-staging/open-telemetry-opentelemetry-go-contrib into rehanosp

    commit cce7c22
    Author: Rehan Pasha <rehan.pasha@fmr.com>
    Date:   Tue May 28 13:34:48 2024 +0530

        feat: Add *gin.Context Filter parameter

        Signed-off-by: Rehan Pasha <rehan.pasha@fmr.com>

    commit 606c275
    Author: Rehan Pasha <rehan.pasha@fmr.com>
    Date:   Mon May 20 19:59:53 2024 +0530

        feat: Add `*gin.Context` Filter parameter in `go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin`

        open-telemetry#3070

    Signed-off-by: Rehan Pasha <rehan.pasha@fmr.com>

Signed-off-by: Rehan Pasha <rehan.pasha@fmr.com>
  • Loading branch information
rehanpfmr committed Jun 11, 2024
1 parent 8b12e62 commit 084e672
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
- The `WithSchemaURL` option function in `go.opentelemetry.io/contrib/bridges/otelslog`.
This option function is used as a replacement of `WithInstrumentationScope` to specify the semantic convention schema URL for the logged records. (#5588)
- Add support for Cloud Run jobs in `go.opentelemetry.io/contrib/detectors/gcp`. (#5559)
- Add `WithGinFilter` Filter parameter in `go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin` to allow filtering with the `gin.Context`. (#5743)

### Changed

Expand Down
8 changes: 8 additions & 0 deletions instrumentation/github.com/gin-gonic/gin/otelgin/gintrace.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,14 @@ func Middleware(service string, opts ...Option) gin.HandlerFunc {
return
}
}
for _, f := range cfg.GinFilters {
if !f(c) {
// Serve the request to the next middleware
// if a filter rejects the request.
c.Next()
return
}
}
c.Set(tracerKey, tracer)
savedCtx := c.Request.Context()
defer func() {
Expand Down
14 changes: 13 additions & 1 deletion instrumentation/github.com/gin-gonic/gin/otelgin/option.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ package otelgin // import "go.opentelemetry.io/contrib/instrumentation/github.co

import (
"net/http"

"github.com/gin-gonic/gin"
"go.opentelemetry.io/otel/propagation"
oteltrace "go.opentelemetry.io/otel/trace"
)
Expand All @@ -16,13 +16,18 @@ type config struct {
TracerProvider oteltrace.TracerProvider
Propagators propagation.TextMapPropagator
Filters []Filter
GinFilters []GinFilter
SpanNameFormatter SpanNameFormatter
}

// Filter is a predicate used to determine whether a given http.request should
// be traced. A Filter must return true if the request should be traced.
type Filter func(*http.Request) bool

// Adding new Filter parameter (*gin.Context)
//gin.Context has FullPath() method, which returns a matched route full path.
type GinFilter func(*gin.Context) bool

// SpanNameFormatter is used to set span name by http.request.
type SpanNameFormatter func(r *http.Request) string

Expand Down Expand Up @@ -70,6 +75,13 @@ func WithFilter(f ...Filter) Option {
})
}

// WithGinFilter adds a filter to the list of filters used by the handler.
func WithGinFilter(f ...GinFilter) Option {
return optionFunc(func(c *config) {
c.GinFilters = append(c.GinFilters, f...)
})
}

// WithSpanNameFormatter takes a function that will be called on every
// request and the returned string will become the Span Name.
func WithSpanNameFormatter(f func(r *http.Request) string) Option {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,3 +287,38 @@ func TestWithFilter(t *testing.T) {
assert.Len(t, sr.Ended(), 1)
})
}

func TestWithGinFilter(t *testing.T) {
t.Run("custom filter filtering route", func(t *testing.T) {
sr := tracetest.NewSpanRecorder()
otel.SetTracerProvider(sdktrace.NewTracerProvider(sdktrace.WithSpanProcessor(sr)))

router := gin.New()
f := func(c *gin.Context) bool { return c.Request.URL.Path != "/healthcheck" }
router.Use(otelgin.Middleware("foobar", otelgin.WithGinFilter(f)))
router.GET("/healthcheck", func(c *gin.Context) {})

r := httptest.NewRequest("GET", "/healthcheck", nil)
w := httptest.NewRecorder()

router.ServeHTTP(w, r)
assert.Len(t, sr.Ended(), 0)
})

t.Run("custom filter not filtering route", func(t *testing.T) {
sr := tracetest.NewSpanRecorder()
otel.SetTracerProvider(sdktrace.NewTracerProvider(sdktrace.WithSpanProcessor(sr)))

router := gin.New()
f := func(c *gin.Context) bool { return c.Request.URL.Path != "/user/:id" }
router.Use(otelgin.Middleware("foobar", otelgin.WithGinFilter(f)))
router.GET("/user/:id", func(c *gin.Context) {})

r := httptest.NewRequest("GET", "/user/123", nil)
w := httptest.NewRecorder()

router.ServeHTTP(w, r)
assert.Len(t, sr.Ended(), 1)
})
}

0 comments on commit 084e672

Please sign in to comment.