Skip to content

Commit

Permalink
Update Go docs (#9992)
Browse files Browse the repository at this point in the history
Co-authored-by: Stephanie Anderson <stephanie.anderson@sentry.io>
Co-authored-by: vivianyentran <20403606+vivianyentran@users.noreply.github.com>
  • Loading branch information
3 people authored Sep 14, 2024
1 parent f59c169 commit e6f1a1b
Show file tree
Hide file tree
Showing 5 changed files with 189 additions and 13 deletions.
163 changes: 163 additions & 0 deletions docs/platforms/go/guides/fiber/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
---
title: Fiber
description: "Learn how to add Sentry instrumentation to programs using the Fiber package."
---

package.

The Sentry Go SDK repository has a [complete
example](https://github.com/getsentry/sentry-go/tree/master/_examples/fiber)
of how to set up Sentry for a Fiber app.

For additional reference, see the [`sentryfiber` API
documentation](https://godoc.org/github.com/getsentry/sentry-go/fiber).

## Install

```shell
go get github.com/getsentry/sentry-go/fiber
```

<Break />

<SignInNote />

```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.
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`!**

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

<SignInNote />

```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
},
})
```
15 changes: 8 additions & 7 deletions docs/product/performance/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,14 @@ If you don't already have performance monitoring enabled, use the links for supp

- <PlatformLinkWithLogo platform="go" url="/platforms/go/tracing/" />

- [Echo](/platforms/go/guides/echo/tracing/)
- [FastHTTP](/platforms/go/guides/fasthttp/tracing/)
- [Gin](/platforms/go/guides/gin/tracing/)
- [Iris](/platforms/go/guides/iris/tracing/)
- [Negroni](/platforms/go/guides/negroni/tracing/)
- [net/http](/platforms/go/guides/http/tracing/)
- [OpenTelemetry](/platforms/go/tracing/instrumentation/opentelemetry/)
- [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/)
- [Negroni](/platforms/go/guides/negroni/performance/)
- [net/http](/platforms/go/guides/http/performance/)
- [OpenTelemetry](/platforms/go/performance/instrumentation/opentelemetry/)

- <PlatformLinkWithLogo
platform="java"
Expand Down
13 changes: 7 additions & 6 deletions platform-includes/crons/setup/go.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -87,19 +87,20 @@ 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
monitorConfig := &sentry.MonitorConfig{
Schedule: monitorSchedule,
MaxRuntime: 2,
CheckInMargin: 1,
FailureIssueThreshold: 2,
}

// 🟡 Notify Sentry your job is running:
Expand Down
7 changes: 7 additions & 0 deletions src/components/platformIcon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -184,6 +185,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';
Expand Down Expand Up @@ -471,6 +473,10 @@ const formatToSVG = {
sm: FasthttpSVG,
lg: FasthttpSVGLarge,
},
fiber: {
sm: FiberSVG,
lg: FiberSVGLarge,
},
flask: {
sm: FlaskSVG,
lg: FlaskSVGLarge,
Expand Down Expand Up @@ -854,6 +860,7 @@ export const PLATFORM_TO_ICON = {
go: 'go',
'go-echo': 'echo',
'go-fasthttp': 'fasthttp',
'go-fiber': 'fiber',
'go-gin': 'gin',
'go-iris': 'iris',
'go-negroni': 'go',
Expand Down
4 changes: 4 additions & 0 deletions src/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,10 @@ const USER_DOCS_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/',
Expand Down

0 comments on commit e6f1a1b

Please sign in to comment.