From 863fcd5e9df78d2a19c5031e0899a919203edf03 Mon Sep 17 00:00:00 2001 From: runebaas Date: Tue, 11 Sep 2018 00:13:54 +0200 Subject: [PATCH] Add bugsnag --- Geekbot.net/Geekbot.net.csproj | 2 + Geekbot.net/Lib/ErrorHandling/ErrorHandler.cs | 83 +++++++++++++++---- Geekbot.net/Program.cs | 2 +- 3 files changed, 70 insertions(+), 17 deletions(-) diff --git a/Geekbot.net/Geekbot.net.csproj b/Geekbot.net/Geekbot.net.csproj index 46c1eff..052199d 100755 --- a/Geekbot.net/Geekbot.net.csproj +++ b/Geekbot.net/Geekbot.net.csproj @@ -19,6 +19,8 @@ true + + 2.0.0-beta2-00984 diff --git a/Geekbot.net/Lib/ErrorHandling/ErrorHandler.cs b/Geekbot.net/Lib/ErrorHandling/ErrorHandler.cs index 8ebee2e..7d5deec 100644 --- a/Geekbot.net/Lib/ErrorHandling/ErrorHandler.cs +++ b/Geekbot.net/Lib/ErrorHandling/ErrorHandler.cs @@ -1,12 +1,17 @@ using System; +using System.Collections.Generic; using System.Net; using System.Threading.Tasks; +using Bugsnag; +using Bugsnag.Payload; using Discord.Commands; using Discord.Net; +using Geekbot.net.Lib.GlobalSettings; using Geekbot.net.Lib.Localization; using Geekbot.net.Lib.Logger; using SharpRaven; using SharpRaven.Data; +using Exception = System.Exception; namespace Geekbot.net.Lib.ErrorHandling { @@ -16,8 +21,9 @@ namespace Geekbot.net.Lib.ErrorHandling private readonly ITranslationHandler _translation; private readonly IRavenClient _raven; private readonly bool _errorsInChat; + private readonly IClient _bugsnag; - public ErrorHandler(IGeekbotLogger logger, ITranslationHandler translation, bool errorsInChat) + public ErrorHandler(IGeekbotLogger logger, ITranslationHandler translation, IGlobalSettings globalSettings, bool errorsInChat) { _logger = logger; _translation = translation; @@ -33,6 +39,21 @@ namespace Geekbot.net.Lib.ErrorHandling { _raven = null; } + + var bugsnagApiKey = globalSettings.GetKey("BugsnagApiKey"); + if (!string.IsNullOrEmpty(bugsnagApiKey)) + { + _bugsnag = new Bugsnag.Client(new Bugsnag.Configuration + { + ApiKey = bugsnagApiKey, + AppVersion = Constants.BotVersion() + }); + _logger.Information(LogSource.Geekbot, "Command Errors will be logged to Bugsnag"); + } + else + { + _bugsnag = null; + } } public async Task HandleCommandException(Exception e, ICommandContext context, string errorMessage = "def") @@ -65,20 +86,8 @@ namespace Geekbot.net.Lib.ErrorHandling } } - - if (_raven == null) return; - - var sentryEvent = new SentryEvent(e) - { - Tags = - { - ["discord_server"] = errorObj.Guild.Name, - ["discord_user"] = errorObj.User.Name - }, - Message = errorObj.Message.Content, - Extra = errorObj - }; - _raven.Capture(sentryEvent); + + ReportExternal(e, errorObj); } catch (Exception ex) { @@ -98,6 +107,48 @@ namespace Geekbot.net.Lib.ErrorHandling } } - + private void ReportExternal(Exception e, MessageDto errorObj) + { + if (_raven != null) + { + var sentryEvent = new SentryEvent(e) + { + Tags = + { + ["discord_server"] = errorObj.Guild.Name, + ["discord_user"] = errorObj.User.Name + }, + Message = errorObj.Message.Content, + Extra = errorObj + }; + _raven.Capture(sentryEvent); + } + + _bugsnag?.Notify(e, (report) => + { + report.Event.Metadata.Add("Discord Location", new Dictionary + { + {"Guild Name", errorObj.Guild.Name}, + {"Guild Id", errorObj.Guild.Id}, + {"Channel Name", errorObj.Channel.Name}, + {"Channel Id", errorObj.Channel.Id} + }); + report.Event.Metadata.Add("Message Info", new Dictionary + { + {"Content", errorObj.Message.Content}, + {"Id", errorObj.Message.Id}, + {"Attachments", errorObj.Message.Attachments.ToString()}, + {"ChannelMentions", errorObj.Message.ChannelMentions.ToString()}, + {"UserMentions", errorObj.Message.UserMentions.ToString()}, + {"RoleMentions", errorObj.Message.RoleMentions.ToString()}, + }); + report.Event.Severity = Severity.Error; + report.Event.User = new User + { + Id = errorObj.User.Id, + Name = errorObj.User.Name + }; + }); + } } } \ No newline at end of file diff --git a/Geekbot.net/Program.cs b/Geekbot.net/Program.cs index 9af8879..e2cff4f 100755 --- a/Geekbot.net/Program.cs +++ b/Geekbot.net/Program.cs @@ -162,7 +162,7 @@ namespace Geekbot.net _logger.Information(LogSource.Geekbot, "Registering Stuff"); var translationHandler = new TranslationHandler(_databaseInitializer.Initialize(), _logger); - var errorHandler = new ErrorHandler(_logger, translationHandler, _runParameters.ExposeErrors); + var errorHandler = new ErrorHandler(_logger, translationHandler, _globalSettings, _runParameters.ExposeErrors); var reactionListener = new ReactionListener(_redis.Db); _services.AddSingleton(errorHandler); _services.AddSingleton(translationHandler);