From a3837a57638fb813d4417638331b1bad3461540c Mon Sep 17 00:00:00 2001 From: Michael Hoffmann Date: Thu, 11 Apr 2024 13:36:27 +0200 Subject: [PATCH 1/4] Update Go Crons docs --- platform-includes/crons/setup/go.mdx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/platform-includes/crons/setup/go.mdx b/platform-includes/crons/setup/go.mdx index 06f612dc1ccab..ccf4407d19251 100644 --- a/platform-includes/crons/setup/go.mdx +++ b/platform-includes/crons/setup/go.mdx @@ -87,12 +87,12 @@ monitorSchedule := sentry.IntervalSchedule(10, sentry.MonitorScheduleUnitMinute) Supported units are: -- MonitorScheduleUnitMinute -- MonitorScheduleUnitHour -- MonitorScheduleUnitDay -- MonitorScheduleUnitWeek -- MonitorScheduleUnitMonth -- MonitorScheduleUnitYear +- `sentry.MonitorScheduleUnitMinute` +- `sentry.MonitorScheduleUnitHour` +- `sentry.MonitorScheduleUnitDay` +- `sentry.MonitorScheduleUnitWeek` +- `sentry.MonitorScheduleUnitMonth` +- `sentry.MonitorScheduleUnitYear` ```go // Create a monitor config object @@ -100,6 +100,8 @@ monitorConfig := &sentry.MonitorConfig{ Schedule: monitorSchedule, MaxRuntime: 2, CheckInMargin: 1, + FailureIssueThreshold: 2, + FailureIssueThreshold: 2, } // 🟡 Notify Sentry your job is running: From ab1f24c9e5053ae602aac716cfd4c319dc2f0586 Mon Sep 17 00:00:00 2001 From: Michael Hoffmann Date: Fri, 10 May 2024 11:16:33 -0400 Subject: [PATCH 2/4] Add docs for Fiber --- docs/platforms/go/guides/fiber/index.mdx | 165 +++++++++++++++++++ docs/product/performance/getting-started.mdx | 1 + src/components/platformIcon.tsx | 7 + src/middleware.ts | 4 + 4 files changed, 177 insertions(+) create mode 100644 docs/platforms/go/guides/fiber/index.mdx diff --git a/docs/platforms/go/guides/fiber/index.mdx b/docs/platforms/go/guides/fiber/index.mdx new file mode 100644 index 0000000000000..90f93027ddc9f --- /dev/null +++ b/docs/platforms/go/guides/fiber/index.mdx @@ -0,0 +1,165 @@ +--- +title: Fiber +description: "Learn how to add Sentry instrumentation to programs using the Fiber package." +--- + +This page shows how to add Sentry instrumentation to programs using the Fiber +package. + +For a quick reference, there is a [complete +example](https://github.com/getsentry/sentry-go/tree/master/_examples/fiber) +available directly at the Go SDK source code repository. + +[GoDoc-style API +documentation](https://godoc.org/github.com/getsentry/sentry-go/fiber) is also +available. + +## Install + +```shell +go get github.com/getsentry/sentry-go/fiber +``` + + + + + +```go +import ( + "fmt" + "net/http" + + "github.com/getsentry/sentry-go" + sentryfiber "github.com/getsentry/sentry-go/fiber" +) + +// To initialize Sentry's handler, you need to initialize Sentry itself beforehand +if err := sentry.Init(sentry.ClientOptions{ + Dsn: "___PUBLIC_DSN___", + EnableTracing: true, + // Set TracesSampleRate to 1.0 to capture 100% + // of transactions for performance monitoring. + // We recommend adjusting this value in production, + TracesSampleRate: 1.0, +}); err != nil { + fmt.Printf("Sentry initialization failed: %v\n", err) +} + + // Later in the code + sentryHandler := sentryfiber.New(sentryfiber.Options{ + Repanic: true, + WaitForDelivery: true, + }) + + enhanceSentryEvent := func(ctx *fiber.Ctx) error { + if hub := sentryfiber.GetHubFromContext(ctx); hub != nil { + hub.Scope().SetTag("someRandomTag", "maybeYouNeedIt") + } + return ctx.Next() + } + + app := fiber.New() + + app.Use(sentryHandler) + + app.All("/foo", enhanceSentryEvent, func(c *fiber.Ctx) error { + panic("y tho") + }) + + app.All("/", func(ctx *fiber.Ctx) error { + if hub := sentryfiber.GetHubFromContext(ctx); hub != nil { + hub.WithScope(func(scope *sentry.Scope) { + scope.SetExtra("unwantedQuery", "someQueryDataMaybe") + hub.CaptureMessage("User provided unwanted query string, but we recovered just fine") + }) + } + return ctx.SendStatus(fiber.StatusOK) + }) + + if err := app.Listen(":3000"); err != nil { + panic(err) + } +``` + +## Configure + +`sentryfiber` accepts a struct of `Options` that allows you to configure how the handler will behave. + +Currently, it respects three options: + +```go +// Repanic configures whether Sentry should repanic after recovery, in most cases it should be set to true, +// as fiber includes its own Recover middleware that handles http responses. +Repanic bool +// WaitForDelivery configures whether you want to block the request before moving forward with the response. +// Because Fiber's `Recover` handler doesn't restart the application, +// it's safe to either skip this option or set it to `false`. +WaitForDelivery bool +// Timeout for the event delivery requests. +Timeout time.Duration +``` + +## Usage + +`sentryfiber` attaches an instance of `*sentry.Hub` (https://godoc.org/github.com/getsentry/sentry-go#Hub) to the request's context, which makes it available throughout the rest of the request's lifetime. +You can access it by using the `sentryfiber.GetHubFromContext()` method on the context itself in any of your proceeding middleware and routes. +And it should be used instead of the global `sentry.CaptureMessage`, `sentry.CaptureException`, or any other calls, as it keeps the separation of data between the requests. + +**Keep in mind that `*sentry.Hub` won't be available in middleware attached before `sentryfiber`!** + +```go +func enhanceSentryEvent := func(ctx *fiber.Ctx) error { + if hub := sentryfiber.GetHubFromContext(ctx); hub != nil { + hub.Scope().SetTag("someRandomTag", "maybeYouNeedIt") + } + return ctx.Next() +} + +// Later in the code +sentryHandler := sentryfiber.New(sentryfiber.Options{ + Repanic: true, + WaitForDelivery: true, +}) + +defaultHandler := func(ctx *fiber.Ctx) error { + if hub := sentryfiber.GetHubFromContext(ctx); hub != nil { + hub.WithScope(func(scope *sentry.Scope) { + scope.SetExtra("unwantedQuery", "someQueryDataMaybe") + hub.CaptureMessage("User provided unwanted query string, but we recovered just fine") + }) + } + return ctx.SendStatus(fiber.StatusOK) +} + +fooHandler := enhanceSentryEvent(func(ctx *fiber.Ctx) { + panic("y tho") +}) + +app.All("/foo", fooHandler) +app.All("/", defaultHandler) + +if err := app.Listen(":3000"); err != nil { + panic(err) +} + +fmt.Println("Listening and serving HTTP on :3000") +``` + +### Accessing Context in `BeforeSend` callback + + + +```go +sentry.Init(sentry.ClientOptions{ + Dsn: "___PUBLIC_DSN___", + BeforeSend: func(event *sentry.Event, hint *sentry.EventHint) *sentry.Event { + if hint.Context != nil { + if ctx, ok := hint.Context.Value(sentry.RequestContextKey).(*fiber.Ctx); ok { + // You have access to the original Context if it panicked + fmt.Println(utils.CopyString(ctx.Hostname())) + } + } + return event + }, +}) +``` diff --git a/docs/product/performance/getting-started.mdx b/docs/product/performance/getting-started.mdx index f8216e72ef05b..0db54698f7c0d 100644 --- a/docs/product/performance/getting-started.mdx +++ b/docs/product/performance/getting-started.mdx @@ -17,6 +17,7 @@ If you don't already have performance monitoring enabled, use the links for supp - [Echo](/platforms/go/guides/echo/performance/) - [FastHTTP](/platforms/go/guides/fasthttp/performance/) + - [Fiber](/platforms/go/guides/fiber/performance/) - [Gin](/platforms/go/guides/gin/performance/) - [Iris](/platforms/go/guides/iris/performance/) - [Martini](/platforms/go/guides/martini/performance/) diff --git a/src/components/platformIcon.tsx b/src/components/platformIcon.tsx index ad313a1d2e000..21638ae3f246b 100644 --- a/src/components/platformIcon.tsx +++ b/src/components/platformIcon.tsx @@ -49,6 +49,7 @@ import FalconSVG from 'platformicons/svg/falcon.svg'; import FastapiSVG from 'platformicons/svg/fastapi.svg'; import FasthttpSVG from 'platformicons/svg/fasthttp.svg'; import FastifySVG from 'platformicons/svg/fastify.svg'; +import FiberSVG from 'platformicons/svg/fiber.svg'; import FlaskSVG from 'platformicons/svg/flask.svg'; import FlutterSVG from 'platformicons/svg/flutter.svg'; import FontSVG from 'platformicons/svg/font.svg'; @@ -181,6 +182,7 @@ import FalconSVGLarge from 'platformicons/svg_80x80/falcon.svg'; import FastapiSVGLarge from 'platformicons/svg_80x80/fastapi.svg'; import FasthttpSVGLarge from 'platformicons/svg_80x80/fasthttp.svg'; import FastifySVGLarge from 'platformicons/svg_80x80/fastify.svg'; +import FiberSVGLarge from 'platformicons/svg_80x80/fiber.svg'; import FlaskSVGLarge from 'platformicons/svg_80x80/flask.svg'; import FlutterSVGLarge from 'platformicons/svg_80x80/flutter.svg'; import FontSVGLarge from 'platformicons/svg_80x80/font.svg'; @@ -465,6 +467,10 @@ const formatToSVG = { sm: FasthttpSVG, lg: FasthttpSVGLarge, }, + fiber: { + sm: FiberSVG, + lg: FiberSVGLarge, + }, flask: { sm: FlaskSVG, lg: FlaskSVGLarge, @@ -836,6 +842,7 @@ export const PLATFORM_TO_ICON = { go: 'go', 'go-echo': 'echo', 'go-fasthttp': 'fasthttp', + 'go-fiber': 'fiber', 'go-gin': 'gin', 'go-iris': 'iris', 'go-martini': 'martini', diff --git a/src/middleware.ts b/src/middleware.ts index a7fc77c0dc0b7..8658ffdcc8061 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -181,6 +181,10 @@ const REDIRECTS: Redirect[] = [ from: '/platforms/go/fasthttp/', to: '/platforms/go/guides/fasthttp/', }, + { + from: '/platforms/go/fiber/', + to: '/platforms/go/guides/fiber/', + }, { from: '/platforms/go/echo/', to: '/platforms/go/guides/echo/', From fd77ed5578f2000741d369137f4259290f36ab5e Mon Sep 17 00:00:00 2001 From: Stephanie Anderson Date: Fri, 14 Jun 2024 10:47:01 +0200 Subject: [PATCH 3/4] Apply suggestions from code review Co-authored-by: vivianyentran <20403606+vivianyentran@users.noreply.github.com> --- docs/platforms/go/guides/fiber/index.mdx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/docs/platforms/go/guides/fiber/index.mdx b/docs/platforms/go/guides/fiber/index.mdx index 90f93027ddc9f..9f8507d6759c4 100644 --- a/docs/platforms/go/guides/fiber/index.mdx +++ b/docs/platforms/go/guides/fiber/index.mdx @@ -3,16 +3,14 @@ title: Fiber description: "Learn how to add Sentry instrumentation to programs using the Fiber package." --- -This page shows how to add Sentry instrumentation to programs using the Fiber package. -For a quick reference, there is a [complete +The Sentry Go SDK repository has a [complete example](https://github.com/getsentry/sentry-go/tree/master/_examples/fiber) -available directly at the Go SDK source code repository. +of how to set up Sentry for a Fiber app. -[GoDoc-style API -documentation](https://godoc.org/github.com/getsentry/sentry-go/fiber) is also -available. +For additional reference, see the [`sentryfiber` API +documentation](https://godoc.org/github.com/getsentry/sentry-go/fiber). ## Install @@ -103,7 +101,7 @@ Timeout time.Duration `sentryfiber` attaches an instance of `*sentry.Hub` (https://godoc.org/github.com/getsentry/sentry-go#Hub) to the request's context, which makes it available throughout the rest of the request's lifetime. You can access it by using the `sentryfiber.GetHubFromContext()` method on the context itself in any of your proceeding middleware and routes. -And it should be used instead of the global `sentry.CaptureMessage`, `sentry.CaptureException`, or any other calls, as it keeps the separation of data between the requests. +This method should be used instead of the global `sentry.CaptureMessage`, `sentry.CaptureException`, or any other calls, as it maintains the separation of data between the requests. **Keep in mind that `*sentry.Hub` won't be available in middleware attached before `sentryfiber`!** From 294a2330c2b30b9f3fe077d099dd57c8e8766b49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emir=20Ribi=C4=87?= Date: Sat, 14 Sep 2024 10:24:55 +0200 Subject: [PATCH 4/4] fix duplicate init --- platform-includes/crons/setup/go.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/platform-includes/crons/setup/go.mdx b/platform-includes/crons/setup/go.mdx index ccf4407d19251..40cabc08b8221 100644 --- a/platform-includes/crons/setup/go.mdx +++ b/platform-includes/crons/setup/go.mdx @@ -101,7 +101,6 @@ monitorConfig := &sentry.MonitorConfig{ MaxRuntime: 2, CheckInMargin: 1, FailureIssueThreshold: 2, - FailureIssueThreshold: 2, } // 🟡 Notify Sentry your job is running: