Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Go docs #9992

Merged
merged 5 commits into from
Sep 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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,
Copy link
Collaborator

@ribice ribice Sep 14, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One of these should be removed.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

}

// 🟡 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
Loading