mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-10-02 08:47:59 +02:00
Exceptions are now being stored in mongo.
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using MongoDB.Driver;
|
||||
using MongoDB.Driver.Builders;
|
||||
|
||||
namespace NzbDrone.Services.Service.Exceptions
|
||||
{
|
||||
public class ExceptionRepository
|
||||
{
|
||||
private readonly MongoDatabase _mongoDb;
|
||||
|
||||
public ExceptionRepository(MongoDatabase mongoDb)
|
||||
{
|
||||
_mongoDb = mongoDb;
|
||||
}
|
||||
|
||||
|
||||
public virtual string Store(NzbDrone.Services.Service.Exceptions.ExceptionReport exceptionReport)
|
||||
{
|
||||
var hash = GetExceptionDetailId(exceptionReport);
|
||||
|
||||
var exceptionInstance = new NzbDrone.Services.Service.Exceptions.ExceptionInstance
|
||||
{
|
||||
AppVersion = exceptionReport.AppVersion,
|
||||
ExceptionMessage = exceptionReport.ExceptionMessage,
|
||||
Message = exceptionReport.Message,
|
||||
Time = DateTime.UtcNow,
|
||||
UserId = exceptionReport.Uid
|
||||
};
|
||||
|
||||
|
||||
|
||||
var applicationExceptions = _mongoDb.GetCollection(exceptionReport.ApplicationId);
|
||||
|
||||
applicationExceptions.Update(Query.EQ("_id", hash), Update.PushWrapped("inst", exceptionInstance));
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
private string GetExceptionDetailId(NzbDrone.Services.Service.Exceptions.ExceptionReport exceptionReport)
|
||||
{
|
||||
var hash = Hash(String.Concat(exceptionReport.AppVersion, exceptionReport.Location, exceptionReport.ExceptionType, exceptionReport.Stack));
|
||||
|
||||
if (!ExceptionInfoExists(exceptionReport.ApplicationId, hash))
|
||||
{
|
||||
var exceptionInfo = new NzbDrone.Services.Service.Exceptions.ExceptionInfo
|
||||
{
|
||||
Hash = hash,
|
||||
Stack = exceptionReport.Stack,
|
||||
ExceptionType = exceptionReport.ExceptionType,
|
||||
Location = exceptionReport.Location
|
||||
};
|
||||
|
||||
_mongoDb.GetCollection(exceptionReport.ApplicationId).Insert(exceptionInfo);
|
||||
}
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
public bool ExceptionInfoExists(string applicationId, string hash)
|
||||
{
|
||||
var appCollection = _mongoDb.GetCollection(applicationId);
|
||||
return appCollection.FindAs<NzbDrone.Services.Service.Exceptions.ExceptionInfo>(Query.EQ("_id", hash)).Any();
|
||||
}
|
||||
|
||||
private static string Hash(string input)
|
||||
{
|
||||
uint mCrc = 0xffffffff;
|
||||
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(input);
|
||||
foreach (byte myByte in bytes)
|
||||
{
|
||||
mCrc ^= ((uint)(myByte) << 24);
|
||||
for (var i = 0; i < 8; i++)
|
||||
{
|
||||
if ((Convert.ToUInt32(mCrc) & 0x80000000) == 0x80000000)
|
||||
{
|
||||
mCrc = (mCrc << 1) ^ 0x04C11DB7;
|
||||
}
|
||||
else
|
||||
{
|
||||
mCrc <<= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return String.Format("{0:x8}", mCrc);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user