Open smeubank opened 1 year ago
@tonyo & @cleptric converting this to an issue on meta repo, did either of you have a chance to check this if there's any big points to add for Go 1.0
some of these checklist items are done or in progress of done already if memory serves correct
Short list of short term investments:
Go SDK roadmap v1.0.0
Better performance API
Add concrete Transaction/Span types This will allow us to better distinguish between transactions and spans, allowing for stricter typing and only exposing the proper attributes and functions for each type.
Add TransactionContext & SpanContext The Go SDK lacks abstractions for the context, making it weird to compose transaction/span options. This will also make distributed tracing more robust, as we can properly propagate the parent context during transaction/span creation.
Add getters/setters for all exposed Transaction/Span attributes This will allow us to make breaking changes to the core data structures more easily.
Remove StartSpan not needed This method will be entirely replaced by
StartTransaction
and follows the unified API.Remove SpanOptions Replaced
TransactionContext/SpanContext
Move Transaction name to the Transaction context Currently, the transaction name is set on the scope, making it cumbersome to work with it in concurrent environments.
Move all integrations into their own submodules
The sentry-otel module will be the first attempt to solve this issue, leading the way for other integrations to follow.
Performance tracing out of the box
We currently only offer performance tracing for
net/http
and should expand this to all integrations by default.Add gRPC integration
available in OTel
gRPC is widely used in Go, so the SDK should ship with a default integration.
Add Fiber support
Fiber is one of Go's biggest frameworks, so the SDK ship with a default integration.
(Stretch goal) Add Buffalo support
A framework that is closer to other languages' frameworks like Ruby on Rails or Laravel.
(Stretch goal) Add support for more logging libraries
TBD
SDK usage in Go routines
The current APIs exposed are insufficient and hard to understand when working with Go routines. We should make it easier to clone and set the Hub/Scope on the context when using Go routines.
Investigate: SDK configuration via functional options
With the current approach (passing
ClientOptions
tosentry.Init
), we can't always say if the configuration option was passed or not (e.g., Golang will initialize all boolean flags tofalse
, if they're not set totrue
inClientOptions
). Functional options (resource1, resource2) is a pattern that is sometimes used to handle cases like this.Repanic
which isfalse
by default.Misc
captureExcpetion
tocaptureError
captureMethods()
should not return anEventID
Road to Performance and OTEL
Performance feature Parity
Misc: