Co-Authored-By: ta264 <ta264@users.noreply.github.com>pull/3268/head
parent
de31dfb11e
commit
f9dc2fb6d5
@ -1,12 +0,0 @@
|
|||||||
using SharpRaven.Data;
|
|
||||||
|
|
||||||
namespace NzbDrone.Common.Instrumentation.Sentry
|
|
||||||
{
|
|
||||||
public class MachineNameUserFactory : ISentryUserFactory
|
|
||||||
{
|
|
||||||
public SentryUser Create()
|
|
||||||
{
|
|
||||||
return new SentryUser(HashUtil.AnonymousToken());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,85 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using Sentry;
|
||||||
|
using Sentry.Protocol;
|
||||||
|
|
||||||
|
namespace NzbDrone.Common.Instrumentation.Sentry
|
||||||
|
{
|
||||||
|
public static class SentryCleanser
|
||||||
|
{
|
||||||
|
public static SentryEvent CleanseEvent(SentryEvent sentryEvent)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
sentryEvent.Message = CleanseLogMessage.Cleanse(sentryEvent.Message);
|
||||||
|
|
||||||
|
if (sentryEvent.Fingerprint != null)
|
||||||
|
{
|
||||||
|
var fingerprint = sentryEvent.Fingerprint.Select(x => CleanseLogMessage.Cleanse(x)).ToList();
|
||||||
|
sentryEvent.SetFingerprint(fingerprint);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sentryEvent.Extra != null)
|
||||||
|
{
|
||||||
|
var extras = sentryEvent.Extra.ToDictionary(x => x.Key, y => (object)CleanseLogMessage.Cleanse((string)y.Value));
|
||||||
|
sentryEvent.SetExtras(extras);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var exception in sentryEvent.SentryExceptions)
|
||||||
|
{
|
||||||
|
exception.Value = CleanseLogMessage.Cleanse(exception.Value);
|
||||||
|
foreach (var frame in exception.Stacktrace.Frames)
|
||||||
|
{
|
||||||
|
frame.FileName = ShortenPath(frame.FileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return sentryEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Breadcrumb CleanseBreadcrumb(Breadcrumb b)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var message = CleanseLogMessage.Cleanse(b.Message);
|
||||||
|
var data = b.Data?.ToDictionary(x => x.Key, y => CleanseLogMessage.Cleanse(y.Value));
|
||||||
|
return new Breadcrumb(message, b.Type, data, b.Category, b.Level);
|
||||||
|
}
|
||||||
|
catch(Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string ShortenPath(string path)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(path))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the paths in the stacktrace depend on where it was compiled,
|
||||||
|
// not the current OS
|
||||||
|
var rootDirs = new [] { "\\src\\", "/src/" };
|
||||||
|
foreach (var rootDir in rootDirs)
|
||||||
|
{
|
||||||
|
var index = path.IndexOf(rootDir, StringComparison.Ordinal);
|
||||||
|
|
||||||
|
if (index > 0)
|
||||||
|
{
|
||||||
|
return path.Substring(index + rootDir.Length - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,72 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using SharpRaven.Data;
|
|
||||||
|
|
||||||
namespace NzbDrone.Common.Instrumentation.Sentry
|
|
||||||
{
|
|
||||||
public class SonarrJsonPacketFactory : IJsonPacketFactory
|
|
||||||
{
|
|
||||||
private readonly SentryPacketCleanser _cleanser;
|
|
||||||
|
|
||||||
public SonarrJsonPacketFactory()
|
|
||||||
{
|
|
||||||
_cleanser = new SentryPacketCleanser();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static string ShortenPath(string path)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(path))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var index = path.IndexOf("\\src\\", StringComparison.Ordinal);
|
|
||||||
|
|
||||||
if (index <= 0)
|
|
||||||
{
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
|
|
||||||
return path.Substring(index + "\\src".Length);
|
|
||||||
}
|
|
||||||
|
|
||||||
public JsonPacket Create(string project, SentryEvent @event)
|
|
||||||
{
|
|
||||||
var packet = new SonarrSentryPacket(project, @event);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
foreach (var exception in packet.Exceptions)
|
|
||||||
{
|
|
||||||
foreach (var frame in exception.Stacktrace.Frames)
|
|
||||||
{
|
|
||||||
frame.Filename = ShortenPath(frame.Filename);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_cleanser.CleansePacket(packet);
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return packet;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Obsolete]
|
|
||||||
public JsonPacket Create(string project, SentryMessage message, ErrorLevel level = ErrorLevel.Info, IDictionary<string, string> tags = null,
|
|
||||||
string[] fingerprint = null, object extra = null)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Obsolete]
|
|
||||||
public JsonPacket Create(string project, Exception exception, SentryMessage message = null, ErrorLevel level = ErrorLevel.Error,
|
|
||||||
IDictionary<string, string> tags = null, string[] fingerprint = null, object extra = null)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
using Newtonsoft.Json;
|
|
||||||
using SharpRaven.Data;
|
|
||||||
|
|
||||||
namespace NzbDrone.Common.Instrumentation.Sentry
|
|
||||||
{
|
|
||||||
public class SonarrSentryPacket : JsonPacket
|
|
||||||
{
|
|
||||||
private readonly JsonSerializerSettings _setting;
|
|
||||||
|
|
||||||
public SonarrSentryPacket(string project, SentryEvent @event) :
|
|
||||||
base(project, @event)
|
|
||||||
{
|
|
||||||
_setting = new JsonSerializerSettings
|
|
||||||
{
|
|
||||||
DefaultValueHandling = DefaultValueHandling.Ignore
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ToString(Formatting formatting)
|
|
||||||
{
|
|
||||||
return JsonConvert.SerializeObject(this, formatting, _setting);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ToString()
|
|
||||||
{
|
|
||||||
return ToString(Formatting.None);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in new issue