| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package honeybadger
- import (
- "encoding/json"
- "net/http"
- "net/url"
- )
- // VERSION defines the version of the honeybadger package.
- const VERSION = "0.4.0"
- var (
- // client is a pre-defined "global" client.
- DefaultClient = New(Configuration{})
- // Config is a pointer to the global client's Config.
- Config = DefaultClient.Config
- // Notices is the feature for sending error reports.
- Notices = Feature{"notices"}
- )
- // Feature references a resource provided by the API service. Its Endpoint maps
- // to the collection endpoint of the /v1 API.
- type Feature struct {
- Endpoint string
- }
- // CGIData stores variables from the server/request environment indexed by key.
- // Header keys should be converted to upercase, all non-alphanumeric characters
- // replaced with underscores, and prefixed with HTTP_. For example, the header
- // "Content-Type" would become "HTTP_CONTENT_TYPE".
- type CGIData hash
- // Params stores the form or url values from an HTTP request.
- type Params url.Values
- // Tags represents tags of the error which is classified errors in Honeybadger.
- type Tags []string
- // hash is used internally to construct JSON payloads.
- type hash map[string]interface{}
- func (h *hash) toJSON() []byte {
- out, err := json.Marshal(h)
- if err == nil {
- return out
- }
- panic(err)
- }
- // Configure updates configuration of the global client.
- func Configure(c Configuration) {
- DefaultClient.Configure(c)
- }
- // SetContext merges c Context into the Context of the global client.
- func SetContext(c Context) {
- DefaultClient.SetContext(c)
- }
- // Notify reports the error err to the Honeybadger service.
- //
- // The first argument err may be an error, a string, or any other type in which
- // case its formatted value will be used.
- //
- // It returns a string UUID which can be used to reference the error from the
- // Honeybadger service, and an error as a second argument.
- func Notify(err interface{}, extra ...interface{}) (string, error) {
- return DefaultClient.Notify(newError(err, 2), extra...)
- }
- // Monitor is used to automatically notify Honeybadger service of panics which
- // happen inside the current function. In order to monitor for panics, defer a
- // call to Monitor. For example:
- // func main {
- // defer honeybadger.Monitor()
- // // Do risky stuff...
- // }
- // The Monitor function re-panics after the notification has been sent, so it's
- // still up to the user to recover from panics if desired.
- func Monitor() {
- if err := recover(); err != nil {
- DefaultClient.Notify(newError(err, 2))
- DefaultClient.Flush()
- panic(err)
- }
- }
- // Flush blocks until all data (normally sent in the background) has been sent
- // to the Honeybadger service.
- func Flush() {
- DefaultClient.Flush()
- }
- // Handler returns an http.Handler function which automatically reports panics
- // to Honeybadger and then re-panics.
- func Handler(h http.Handler) http.Handler {
- return DefaultClient.Handler(h)
- }
- // BeforeNotify adds a callback function which is run before a notice is
- // reported to Honeybadger. If any function returns an error the notification
- // will be skipped, otherwise it will be sent.
- func BeforeNotify(handler func(notice *Notice) error) {
- DefaultClient.BeforeNotify(handler)
- }
|