From 7a5fe769ecd5441c351615a8f7080a9310a901f1 Mon Sep 17 00:00:00 2001 From: Sebastian Winkler Date: Sun, 24 Feb 2019 20:52:42 +0100 Subject: [PATCH] adds errortracking package --- errortracking/raven.go | 25 +++++++++++++++++++++++++ events/event.go | 1 + events/event_except.go | 34 +++++++++++++++++++++++++++++++++- events/generating.go | 14 ++++++++++++++ featureflag/featureflag.go | 8 ++++---- go.mod | 2 ++ go.sum | 4 ++++ 7 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 errortracking/raven.go diff --git a/errortracking/raven.go b/errortracking/raven.go new file mode 100644 index 0000000..33feec7 --- /dev/null +++ b/errortracking/raven.go @@ -0,0 +1,25 @@ +package errortracking + +import ( + raven "github.com/getsentry/raven-go" +) + +type Config struct { + Version string `envconfig:"VERSION"` + Environment string `envconfig:"ENVIRONMENT"` + RavenDSN string `envconfig:"RAVEN_DSN"` +} + +func Init(cfg *Config) error { + if cfg.RavenDSN == "" { + return nil + } + + err := raven.SetDSN(cfg.RavenDSN) + if err != nil { + return err + } + raven.SetEnvironment(cfg.Environment) + raven.SetRelease(cfg.Version) + return nil +} diff --git a/events/event.go b/events/event.go index 1f61753..b4ced3a 100644 --- a/events/event.go +++ b/events/event.go @@ -17,6 +17,7 @@ type Event struct { ReceivedAt time.Time BotUserID string GuildID string `json:",omitempty"` + UserID string `json:",omitempty"` // discordgo event data ChannelCreate *discordgo.ChannelCreate `json:",omitempty"` diff --git a/events/event_except.go b/events/event_except.go index 6277753..dcbd198 100644 --- a/events/event_except.go +++ b/events/event_except.go @@ -2,6 +2,7 @@ package events import ( "github.com/bwmarrin/discordgo" + raven "github.com/getsentry/raven-go" "gitlab.com/Cacophony/go-kit/state" "go.uber.org/zap" ) @@ -55,7 +56,22 @@ func (e *Event) Except(err error) { if doLog { e.Logger().Error("error occurred while executing event", zap.Error(err)) - // TODO: send to sentry… + + if raven.DefaultClient != nil { + raven.CaptureError( + err, + map[string]string{ + "event_id": e.ID, + "event_type:": string(e.Type), + "bot_id": e.BotUserID, + "guild_id": e.GuildID, + "silent": "false", + }, + &raven.User{ + ID: e.UserID, + }, + ) + } } } @@ -63,4 +79,20 @@ func (e *Event) ExceptSilent(err error) { if e.logger != nil { e.Logger().Error("silent occurred error while executing event", zap.Error(err)) } + + if raven.DefaultClient != nil { + raven.CaptureError( + err, + map[string]string{ + "event_id": e.ID, + "event_type:": string(e.Type), + "bot_id": e.BotUserID, + "guild_id": e.GuildID, + "silent": "true", + }, + &raven.User{ + ID: e.UserID, + }, + ) + } } diff --git a/events/generating.go b/events/generating.go index e76eddd..61e4699 100644 --- a/events/generating.go +++ b/events/generating.go @@ -59,6 +59,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* event.Type = GuildMemberAddType event.GuildMemberAdd = t event.GuildID = t.GuildID + event.UserID = t.User.ID event.ID, err = hash(t) if err != nil { return nil, err @@ -67,6 +68,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* event.Type = GuildMemberUpdateType event.GuildMemberUpdate = t event.GuildID = t.GuildID + event.UserID = t.User.ID event.ID, err = hash(t) if err != nil { return nil, err @@ -75,6 +77,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* event.Type = GuildMemberRemoveType event.GuildMemberRemove = t event.GuildID = t.GuildID + event.UserID = t.User.ID event.ID, err = hash(t) if err != nil { return nil, err @@ -147,6 +150,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* event.Type = MessageCreateType event.MessageCreate = t event.GuildID = t.GuildID + event.UserID = t.Author.ID event.ID, err = hash(t.ID) if err != nil { return nil, err @@ -155,6 +159,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* event.Type = MessageUpdateType event.MessageUpdate = t event.GuildID = t.GuildID + event.UserID = t.Author.ID event.ID, err = hash(t.ID + t.Content) if err != nil { return nil, err @@ -163,6 +168,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* event.Type = MessageDeleteType event.MessageDelete = t event.GuildID = t.GuildID + event.UserID = t.Author.ID event.ID, err = hash(t.ID) if err != nil { return nil, err @@ -179,6 +185,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* event.Type = GuildBanAddType event.GuildBanAdd = t event.GuildID = t.GuildID + event.UserID = t.User.ID event.ID, err = hash(t) if err != nil { return nil, err @@ -187,6 +194,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* event.Type = GuildBanRemoveType event.GuildBanRemove = t event.GuildID = t.GuildID + event.UserID = t.User.ID event.ID, err = hash(t) if err != nil { return nil, err @@ -195,6 +203,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* event.Type = MessageReactionAddType event.MessageReactionAdd = t event.GuildID = t.GuildID + event.UserID = t.UserID event.ID, err = hash(t) if err != nil { return nil, err @@ -203,6 +212,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* event.Type = MessageReactionRemoveType event.MessageReactionRemove = t event.GuildID = t.GuildID + event.UserID = t.UserID event.ID, err = hash(t) if err != nil { return nil, err @@ -211,6 +221,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* event.Type = MessageReactionRemoveAllType event.MessageReactionRemoveAll = t event.GuildID = t.GuildID + event.UserID = t.UserID event.ID, err = hash(t) if err != nil { return nil, err @@ -227,6 +238,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* event.Type = PresenceUpdateType event.PresenceUpdate = t event.GuildID = t.GuildID + event.UserID = t.User.ID event.ID, err = hash(t) if err != nil { return nil, err @@ -242,6 +254,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* case *discordgo.UserUpdate: event.Type = UserUpdateType event.UserUpdate = t + event.UserID = t.User.ID event.ID, err = hash(t) if err != nil { return nil, err @@ -250,6 +263,7 @@ func GenerateEventFromDiscordgoEvent(botUserID string, eventItem interface{}) (* event.Type = VoiceStateUpdateType event.VoiceStateUpdate = t event.GuildID = t.GuildID + event.UserID = t.UserID event.ID, err = hash(t) if err != nil { return nil, err diff --git a/featureflag/featureflag.go b/featureflag/featureflag.go index c8e428c..987ae04 100644 --- a/featureflag/featureflag.go +++ b/featureflag/featureflag.go @@ -7,8 +7,8 @@ import ( unleash "github.com/Unleash/unleash-client-go" ) -// FeatureFlaggerConfig represents a Feature Flagger Configuration -type FeatureFlaggerConfig struct { +// Config represents a Feature Flagger Configuration +type Config struct { Environment string `envconfig:"ENVIRONMENT"` UnleashURL string `envconfig:"UNLEASH_URL"` @@ -20,8 +20,8 @@ type FeatureFlagger struct { unleashClient *unleash.Client } -// NewFeatureFlagger creates a new FeatureFlagger -func NewFeatureFlagger(config *FeatureFlaggerConfig) (*FeatureFlagger, error) { +// New creates a new FeatureFlagger +func New(config *Config) (*FeatureFlagger, error) { if config.Environment == "development" { return &FeatureFlagger{}, nil } diff --git a/go.mod b/go.mod index 3f172c0..c099332 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,9 @@ require ( github.com/BurntSushi/toml v0.3.1 // indirect github.com/Unleash/unleash-client-go v0.0.0-20181121205122-ae068e0ad68c github.com/bwmarrin/discordgo v0.19.0 + github.com/certifi/gocertifi v0.0.0-20190105021004-abcd57078448 // indirect github.com/dustin/go-humanize v1.0.0 + github.com/getsentry/raven-go v0.2.0 github.com/go-chi/chi v4.0.1+incompatible github.com/go-redis/redis v6.15.1+incompatible github.com/json-iterator/go v1.1.5 diff --git a/go.sum b/go.sum index 5298921..f279f54 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ github.com/Unleash/unleash-client-go v0.0.0-20181121205122-ae068e0ad68c h1:Q9cN+ github.com/Unleash/unleash-client-go v0.0.0-20181121205122-ae068e0ad68c/go.mod h1:89lPmFeGRU6Xv5kYZnN1ByXulB4vHW+UepUYSm8s8ws= github.com/bwmarrin/discordgo v0.19.0 h1:kMED/DB0NR1QhRcalb85w0Cu3Ep2OrGAqZH1R5awQiY= github.com/bwmarrin/discordgo v0.19.0/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q= +github.com/certifi/gocertifi v0.0.0-20190105021004-abcd57078448 h1:8tNk6SPXzLDnATTrWoI5Bgw9s/x4uf0kmBpk21NZgI4= +github.com/certifi/gocertifi v0.0.0-20190105021004-abcd57078448/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -12,6 +14,8 @@ github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs= +github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/go-chi/chi v4.0.1+incompatible h1:RSRC5qmFPtO90t7pTL0DBMNpZFsb/sHF3RXVlDgFisA= github.com/go-chi/chi v4.0.1+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= github.com/go-redis/redis v6.15.1+incompatible h1:BZ9s4/vHrIqwOb0OPtTQ5uABxETJ3NRuUNoSUurnkew=