| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- package sessions
- import (
- "log"
- "net/http"
- "sync"
- "time"
- )
- // SessionTrackingConfiguration defines the configuration options relevant for session tracking.
- // These are likely a subset of the global bugsnag.Configuration. Users should
- // not modify this struct directly but rather call
- // `bugsnag.Configure(bugsnag.Configuration)` which will update this configuration in return.
- type SessionTrackingConfiguration struct {
- // PublishInterval defines how often the sessions are sent off to the session server.
- PublishInterval time.Duration
- // AutoCaptureSessions can be set to false to disable automatic session
- // tracking. If you want control over what is deemed a session, you can
- // switch off automatic session tracking with this configuration, and call
- // bugsnag.StartSession() when appropriate for your application. See the
- // official docs for instructions and examples of associating handled
- // errors with sessions and ensuring error rate accuracy on the Bugsnag
- // dashboard. This will default to true, but is stored as an interface to enable
- // us to detect when this option has not been set.
- AutoCaptureSessions interface{}
- // APIKey defines the API key for the Bugsnag project. Same value as for reporting errors.
- APIKey string
- // Endpoint is the URI of the session server to receive session payloads.
- Endpoint string
- // Version defines the current version of the notifier.
- Version string
- // ReleaseStage defines the release stage, e.g. "production" or "staging",
- // that this session occurred in. The release stage, in combination with
- // the app version make up the release that Bugsnag tracks.
- ReleaseStage string
- // Hostname defines the host of the server this application is running on.
- Hostname string
- // AppType defines the type of the application.
- AppType string
- // AppVersion defines the version of the application.
- AppVersion string
- // Transport defines the http.RoundTripper to be used for managing HTTP requests.
- Transport http.RoundTripper
- // The release stages to notify about sessions in. If you set this then
- // bugsnag-go will only send sessions to Bugsnag if the release stage
- // is listed here.
- NotifyReleaseStages []string
- // Logger is the logger that Bugsnag should log to. Uses the same defaults
- // as go's builtin logging package. This logger gets invoked when any error
- // occurs inside the library itself.
- Logger interface {
- Printf(format string, v ...interface{})
- }
- mutex sync.Mutex
- }
- // Update modifies the values inside the receiver to match the non-default properties of the given config.
- // Existing properties will not be cleared when given empty fields.
- func (c *SessionTrackingConfiguration) Update(config *SessionTrackingConfiguration) {
- c.mutex.Lock()
- defer c.mutex.Unlock()
- if config.PublishInterval != 0 {
- c.PublishInterval = config.PublishInterval
- }
- if config.APIKey != "" {
- c.APIKey = config.APIKey
- }
- if config.Endpoint != "" {
- c.Endpoint = config.Endpoint
- }
- if config.Version != "" {
- c.Version = config.Version
- }
- if config.ReleaseStage != "" {
- c.ReleaseStage = config.ReleaseStage
- }
- if config.Hostname != "" {
- c.Hostname = config.Hostname
- }
- if config.AppType != "" {
- c.AppType = config.AppType
- }
- if config.AppVersion != "" {
- c.AppVersion = config.AppVersion
- }
- if config.Transport != nil {
- c.Transport = config.Transport
- }
- if config.Logger != nil {
- c.Logger = config.Logger
- }
- if config.NotifyReleaseStages != nil {
- c.NotifyReleaseStages = config.NotifyReleaseStages
- }
- if config.AutoCaptureSessions != nil {
- c.AutoCaptureSessions = config.AutoCaptureSessions
- }
- }
- func (c *SessionTrackingConfiguration) logf(fmt string, args ...interface{}) {
- if c != nil && c.Logger != nil {
- c.Logger.Printf(fmt, args...)
- } else {
- log.Printf(fmt, args...)
- }
- }
- // IsAutoCaptureSessions identifies whether or not the notifier should
- // automatically capture sessions as requests come in. It's a convenience
- // wrapper that allows automatic session capturing to be enabled by default.
- func (c *SessionTrackingConfiguration) IsAutoCaptureSessions() bool {
- if c.AutoCaptureSessions == nil {
- return true // enabled by default
- }
- if val, ok := c.AutoCaptureSessions.(bool); ok {
- return val
- }
- // It has been configured to *something* (although not a valid value)
- // assume the user wanted to disable this option.
- return false
- }
|