bugsnag / bugsnag-ruby

BugSnag error monitoring & reporting software for rails, sinatra, rack and ruby
https://docs.bugsnag.com/platforms/ruby
MIT License
248 stars 173 forks source link

Bring endpoint configuration in line with other notifiers #701

Closed imjoehaines closed 3 years ago

imjoehaines commented 3 years ago

Goal

This PR introduces Configuration#endpoints/Configuration#endpoints=, bringing endpoint configuration in line with other notifiers (e.g. Cocoa, Android & JS)

Setting the endpoints is done with a new Bugsnag::EndpointConfiguration class:

Bugsnag.configure do |config|
  config.endpoints = Bugsnag::EndpointConfiguration.new(
    "<notify endpoint>",
    "<sessions endpoint>"
  )
end

The endpoints can then be read from Configuration#endpoints:

puts Bugsnag.configuration.endpoints.notify # => <notify endpoint>
puts Bugsnag.configuration.endpoints.sessions # => <sessions endpoint>

When the endpoints are set, we validate that two non-empty strings have been given (i.e. nil & "" fail validation, all other values pass). If validation fails then we will avoid sending requests to prevent leaking data to the cloud Bugsnag instance. The exception to this rule is that we will still send events if the notify endpoint is set without the sessions endpoint. This is for backwards compatibility — it's entirely possible for users of Bugsnag before sessions existed to still only be setting the notify endpoint. This exception will be removed in the next major version; all requests will be avoided if either URL is not valid