Sentry will now back-off if it's API key is revoked.

pull/4/head
Keivan Beigi 8 years ago
parent 0bdc137093
commit ed2e4d0f1d

@ -99,7 +99,7 @@ namespace NzbDrone.Common.Instrumentation
else else
{ {
dsn = RuntimeInfo.IsProduction dsn = RuntimeInfo.IsProduction
? "https://fed3f47e8bea4527831e96edfa02d495:8ed11e4878614d8e87b1e1b15d890dc9@sentry.sonarr.tv/8" ? "https://3e8a38b1a4df4de8b0453a724f5a1139:5a708dd75c724b32ae5128b6a895650f@sentry.sonarr.tv/8"
: "https://4ee3580e01d8407c96a7430fbc953512:5f2d07227a0b4fde99dea07041a3ff93@sentry.sonarr.tv/10"; : "https://4ee3580e01d8407c96a7430fbc953512:5f2d07227a0b4fde99dea07041a3ff93@sentry.sonarr.tv/10";
} }

@ -29,5 +29,10 @@ namespace NzbDrone.Common.Instrumentation.Sentry
_cache.Set(key, true, _ttl); _cache.Set(key, true, _ttl);
return true; return true;
} }
public void Clear()
{
_cache.Clear();
}
} }
} }

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net;
using System.Threading; using System.Threading;
using NLog; using NLog;
using NLog.Common; using NLog.Common;
@ -27,6 +28,8 @@ namespace NzbDrone.Common.Instrumentation.Sentry
}; };
private readonly SentryDebounce _debounce; private readonly SentryDebounce _debounce;
private bool _unauthorized;
public SentryTarget(string dsn) public SentryTarget(string dsn)
{ {
@ -37,6 +40,8 @@ namespace NzbDrone.Common.Instrumentation.Sentry
Release = BuildInfo.Release Release = BuildInfo.Release
}; };
_client.ErrorOnCapture = OnError;
_client.Tags.Add("osfamily", OsInfo.Os.ToString()); _client.Tags.Add("osfamily", OsInfo.Os.ToString());
_client.Tags.Add("runtime", PlatformInfo.Platform.ToString().ToLower()); _client.Tags.Add("runtime", PlatformInfo.Platform.ToString().ToLower());
_client.Tags.Add("culture", Thread.CurrentThread.CurrentCulture.Name); _client.Tags.Add("culture", Thread.CurrentThread.CurrentCulture.Name);
@ -46,6 +51,24 @@ namespace NzbDrone.Common.Instrumentation.Sentry
_debounce = new SentryDebounce(); _debounce = new SentryDebounce();
} }
private void OnError(Exception ex)
{
var webException = ex as WebException;
if (webException != null)
{
var response = webException.Response as HttpWebResponse;
var statusCode = response?.StatusCode;
if (statusCode == HttpStatusCode.Unauthorized)
{
_unauthorized = true;
_debounce.Clear();
}
}
InternalLogger.Error(ex, "Unable to send error to Sentry");
}
private static List<string> GetFingerPrint(LogEventInfo logEvent) private static List<string> GetFingerPrint(LogEventInfo logEvent)
{ {
var fingerPrint = new List<string> var fingerPrint = new List<string>
@ -77,7 +100,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry
try try
{ {
// don't report non-critical events without exceptions // don't report non-critical events without exceptions
if (logEvent.Exception == null) if (logEvent.Exception == null || _unauthorized)
{ {
return; return;
} }
@ -121,7 +144,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry
} }
catch (Exception e) catch (Exception e)
{ {
InternalLogger.Error(e, "Unable to send Sentry request"); OnError(e);
} }
} }
} }

Loading…
Cancel
Save