Skip to content

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit f5116f4472a90ace1b336eecae28589d77311d92
Author: Rehan Pasha <rehan.pasha@fmr.com>
Date:   Tue Jun 25 08:04:38 2024 -0400

    Fixing lint error

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

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

    Squashed commit of the following:

    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 #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`

            #3070

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

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

Signed-off-by: Rehan Pasha <rehan.pasha@fmr.com>
  • Loading branch information
rehanpfmr committed Jul 19, 2024
1 parent 7ce8deb commit 5130e44
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,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: 14 additions & 0 deletions instrumentation/github.com/gin-gonic/gin/otelgin/option.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ 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 +18,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 +77,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 5130e44

Please sign in to comment.