pull/8/head
Qstick 3 years ago
parent 79c96b86a4
commit 783c29ef80

@ -30,6 +30,21 @@ function getTotalRequestsData(indexerStats) {
return data; return data;
} }
function getNumberGrabsData(indexerStats) {
const data = indexerStats.map((indexer) => {
return {
label: indexer.indexerName,
value: indexer.numberOfGrabs
};
});
data.sort((a, b) => {
return b.value - a.value;
});
return data;
}
function Stats(props) { function Stats(props) {
const { const {
items, items,
@ -70,6 +85,12 @@ function Stats(props) {
title='Total Indexer Queries' title='Total Indexer Queries'
/> />
</div> </div>
<div className={styles.halfWidthChart}>
<BarChart
data={getNumberGrabsData(items)}
title='Total Indexer Grabs'
/>
</div>
</div> </div>
} }
</PageContent> </PageContent>

@ -111,6 +111,7 @@ namespace NzbDrone.Core.History
}; };
history.Data.Add("Successful", message.Successful.ToString()); history.Data.Add("Successful", message.Successful.ToString());
history.Data.Add("Source", message.Source ?? string.Empty);
_historyRepository.Insert(history); _historyRepository.Insert(history);
} }

@ -8,5 +8,6 @@ namespace NzbDrone.Core.IndexerStats
public string IndexerName { get; set; } public string IndexerName { get; set; }
public int AverageResponseTime { get; set; } public int AverageResponseTime { get; set; }
public int NumberOfQueries { get; set; } public int NumberOfQueries { get; set; }
public int NumberOfGrabs { get; set; }
} }
} }

@ -48,7 +48,8 @@ namespace NzbDrone.Core.IndexerStats
private SqlBuilder Builder() => new SqlBuilder() private SqlBuilder Builder() => new SqlBuilder()
.Select(@"Indexers.Id AS IndexerId, .Select(@"Indexers.Id AS IndexerId,
Indexers.Name AS IndexerName, Indexers.Name AS IndexerName,
COUNT(History.Id) AS NumberOfQueries, SUM(CASE WHEN EventType == 2 then 1 else 0 end) AS NumberOfQueries,
SUM(CASE WHEN EventType == 1 then 1 else 0 end) AS NumberOfGrabs,
AVG(json_extract(History.Data,'$.elapsedTime')) AS AverageResponseTime") AVG(json_extract(History.Data,'$.elapsedTime')) AS AverageResponseTime")
.Join<History.History, IndexerDefinition>((t, r) => t.IndexerId == r.Id) .Join<History.History, IndexerDefinition>((t, r) => t.IndexerId == r.Id)
.GroupBy<IndexerDefinition>(x => x.Id); .GroupBy<IndexerDefinition>(x => x.Id);

@ -13,7 +13,7 @@ namespace NzbDrone.Core.Indexers
{ {
public interface IDownloadService public interface IDownloadService
{ {
byte[] DownloadReport(string link, int indexerId); byte[] DownloadReport(string link, int indexerId, string source);
} }
public class DownloadService : IDownloadService public class DownloadService : IDownloadService
@ -37,7 +37,7 @@ namespace NzbDrone.Core.Indexers
_logger = logger; _logger = logger;
} }
public byte[] DownloadReport(string link, int indexerId) public byte[] DownloadReport(string link, int indexerId, string source)
{ {
var url = new HttpUri(link); var url = new HttpUri(link);
@ -48,7 +48,7 @@ namespace NzbDrone.Core.Indexers
} }
var indexer = _indexerFactory.GetInstance(_indexerFactory.Get(indexerId)); var indexer = _indexerFactory.GetInstance(_indexerFactory.Get(indexerId));
bool success; var success = false;
var downloadedBytes = Array.Empty<byte>(); var downloadedBytes = Array.Empty<byte>();
try try
@ -60,7 +60,7 @@ namespace NzbDrone.Core.Indexers
catch (ReleaseUnavailableException) catch (ReleaseUnavailableException)
{ {
_logger.Trace("Release {0} no longer available on indexer.", link); _logger.Trace("Release {0} no longer available on indexer.", link);
_eventAggregator.PublishEvent(new IndexerDownloadEvent(indexerId, false)); _eventAggregator.PublishEvent(new IndexerDownloadEvent(indexerId, success, source));
throw; throw;
} }
catch (ReleaseDownloadException ex) catch (ReleaseDownloadException ex)
@ -75,11 +75,11 @@ namespace NzbDrone.Core.Indexers
_indexerStatusService.RecordFailure(indexerId); _indexerStatusService.RecordFailure(indexerId);
} }
_eventAggregator.PublishEvent(new IndexerDownloadEvent(indexerId, false)); _eventAggregator.PublishEvent(new IndexerDownloadEvent(indexerId, success, source));
throw; throw;
} }
_eventAggregator.PublishEvent(new IndexerDownloadEvent(indexerId, success)); _eventAggregator.PublishEvent(new IndexerDownloadEvent(indexerId, success, source));
return downloadedBytes; return downloadedBytes;
} }
} }

@ -11,11 +11,13 @@ namespace NzbDrone.Core.Indexers.Events
{ {
public int IndexerId { get; set; } public int IndexerId { get; set; }
public bool Successful { get; set; } public bool Successful { get; set; }
public string Source { get; set; }
public IndexerDownloadEvent(int indexerId, bool successful) public IndexerDownloadEvent(int indexerId, bool successful, string source)
{ {
IndexerId = indexerId; IndexerId = indexerId;
Successful = successful; Successful = successful;
Source = source;
} }
} }
} }

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Net;
using System.Text; using System.Text;
using Nancy; using Nancy;
using Nancy.ModelBinding; using Nancy.ModelBinding;
@ -115,8 +116,10 @@ namespace Prowlarr.Api.V1.Indexers
var indexerInstance = _indexerFactory.GetInstance(indexer); var indexerInstance = _indexerFactory.GetInstance(indexer);
var source = UserAgentParser.ParseSource(Request.Headers.UserAgent);
var downloadBytes = Array.Empty<byte>(); var downloadBytes = Array.Empty<byte>();
downloadBytes = _downloadService.DownloadReport(_downloadMappingService.ConvertToNormalLink(link), id); downloadBytes = _downloadService.DownloadReport(_downloadMappingService.ConvertToNormalLink(link), id, source);
// handle magnet URLs // handle magnet URLs
if (downloadBytes.Length >= 7 if (downloadBytes.Length >= 7

@ -11,6 +11,7 @@ namespace Prowlarr.Api.V1.Indexers
public string IndexerName { get; set; } public string IndexerName { get; set; }
public int NumberOfQueries { get; set; } public int NumberOfQueries { get; set; }
public int AverageResponseTime { get; set; } public int AverageResponseTime { get; set; }
public int NumberOfGrabs { get; set; }
} }
public static class IndexerStatsResourceMapper public static class IndexerStatsResourceMapper
@ -27,7 +28,8 @@ namespace Prowlarr.Api.V1.Indexers
IndexerId = model.IndexerId, IndexerId = model.IndexerId,
IndexerName = model.IndexerName, IndexerName = model.IndexerName,
NumberOfQueries = model.NumberOfQueries, NumberOfQueries = model.NumberOfQueries,
AverageResponseTime = model.AverageResponseTime AverageResponseTime = model.AverageResponseTime,
NumberOfGrabs = model.NumberOfGrabs
}; };
} }

Loading…
Cancel
Save