1package errortracking
2
3import "github.com/getsentry/sentry-go"
4
5// Tracker is an abstraction for error tracking.
6type Tracker interface {
7	// Capture reports an error to the error reporting service
8	Capture(err error, opts ...CaptureOption)
9}
10
11var (
12	defaultTracker = newSentryTracker(sentry.CurrentHub())
13)
14
15// DefaultTracker returns the default global error tracker.
16func DefaultTracker() Tracker {
17	return defaultTracker
18}
19
20// NewTracker constructs a new Tracker with the provided options.
21func NewTracker(opts ...TrackerOption) (Tracker, error) {
22	client, err := sentry.NewClient(trackerOptionsToSentryClientOptions(opts...))
23	if err != nil {
24		return nil, err
25	}
26	hub := sentry.NewHub(client, sentry.NewScope())
27	return newSentryTracker(hub), nil
28}
29
30func trackerOptionsToSentryClientOptions(opts ...TrackerOption) sentry.ClientOptions {
31	config := applyTrackerOptions(opts)
32
33	return sentry.ClientOptions{
34		Dsn:         config.sentryDSN,
35		Release:     config.version,
36		Environment: config.sentryEnvironment,
37	}
38}
39