New: Basic stats on your library. View at: /System/Stats
This commit is contained in:
parent
05b91dbb4f
commit
a1fa6287c7
|
@ -164,7 +164,6 @@ namespace NzbDrone.Core.Test
|
||||||
[TestCase("Pawn Stars S04E87 REPACK 720p HDTV x264 aAF", QualityTypes.HDTV, true)]
|
[TestCase("Pawn Stars S04E87 REPACK 720p HDTV x264 aAF", QualityTypes.HDTV, true)]
|
||||||
[TestCase("The Real Housewives of Vancouver S01E04 DSR x264 2HD", QualityTypes.SDTV, false)]
|
[TestCase("The Real Housewives of Vancouver S01E04 DSR x264 2HD", QualityTypes.SDTV, false)]
|
||||||
[TestCase("Vanguard S01E04 Mexicos Death Train DSR x264 MiNDTHEGAP", QualityTypes.SDTV, false)]
|
[TestCase("Vanguard S01E04 Mexicos Death Train DSR x264 MiNDTHEGAP", QualityTypes.SDTV, false)]
|
||||||
|
|
||||||
public void quality_parse(string postTitle, object quality, bool proper)
|
public void quality_parse(string postTitle, object quality, bool proper)
|
||||||
{
|
{
|
||||||
var result = Parser.ParseQuality(postTitle);
|
var result = Parser.ParseQuality(postTitle);
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Model
|
||||||
|
{
|
||||||
|
public class StatsModel
|
||||||
|
{
|
||||||
|
[DisplayName("Number of Series")]
|
||||||
|
public int SeriesTotal { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("Number of Series Countinuing")]
|
||||||
|
public int SeriesContinuing { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("Number of Series Ended")]
|
||||||
|
public int SeriesEnded { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("Number of Episodes")]
|
||||||
|
public int EpisodesTotal { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("Number of Episodes On Disk")]
|
||||||
|
public int EpisodesOnDisk { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("Number of Episodes Missing")]
|
||||||
|
public int EpisodesMissing { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("Downloaded in the Last Week")]
|
||||||
|
public int DownloadLastWeek { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("Downloaded in the Last 30 days")]
|
||||||
|
public int DownloadedLastMonth { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -264,6 +264,7 @@
|
||||||
<Compile Include="Model\Sabnzbd\SabModel.cs" />
|
<Compile Include="Model\Sabnzbd\SabModel.cs" />
|
||||||
<Compile Include="Model\Sabnzbd\SabQueueItem.cs" />
|
<Compile Include="Model\Sabnzbd\SabQueueItem.cs" />
|
||||||
<Compile Include="Model\Sabnzbd\SabVersionModel.cs" />
|
<Compile Include="Model\Sabnzbd\SabVersionModel.cs" />
|
||||||
|
<Compile Include="Model\StatsModel.cs" />
|
||||||
<Compile Include="Model\Twitter\TwitterAuthorizationModel.cs" />
|
<Compile Include="Model\Twitter\TwitterAuthorizationModel.cs" />
|
||||||
<Compile Include="Model\UpdatePackage.cs" />
|
<Compile Include="Model\UpdatePackage.cs" />
|
||||||
<Compile Include="Model\Xbmc\ActionType.cs" />
|
<Compile Include="Model\Xbmc\ActionType.cs" />
|
||||||
|
@ -305,6 +306,7 @@
|
||||||
<Compile Include="Providers\AnalyticsProvider.cs">
|
<Compile Include="Providers\AnalyticsProvider.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Providers\StatsProvider.cs" />
|
||||||
<Compile Include="Repository\Search\SearchHistoryItem.cs" />
|
<Compile Include="Repository\Search\SearchHistoryItem.cs" />
|
||||||
<Compile Include="Repository\Search\SearchHistory.cs" />
|
<Compile Include="Repository\Search\SearchHistory.cs" />
|
||||||
<Compile Include="Model\ReportRejectionType.cs" />
|
<Compile Include="Model\ReportRejectionType.cs" />
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Ninject;
|
||||||
|
using NzbDrone.Core.Model;
|
||||||
|
using NzbDrone.Core.Repository;
|
||||||
|
using PetaPoco;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Providers
|
||||||
|
{
|
||||||
|
public class StatsProvider
|
||||||
|
{
|
||||||
|
private readonly IDatabase _database;
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
public StatsProvider(IDatabase database)
|
||||||
|
{
|
||||||
|
_database = database;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StatsProvider()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual StatsModel GetStats()
|
||||||
|
{
|
||||||
|
var series = _database.Fetch<Series>();
|
||||||
|
var episodes = _database.Fetch<Episode>();
|
||||||
|
var history = _database.Fetch<History>("WHERE Date <= @0", DateTime.Today.AddDays(-30));
|
||||||
|
|
||||||
|
var stats = new StatsModel();
|
||||||
|
stats.SeriesTotal = series.Count;
|
||||||
|
stats.SeriesContinuing = series.Count(s => s.Status == "Continuing");
|
||||||
|
stats.SeriesEnded = series.Count(s => s.Status == "Ended");
|
||||||
|
stats.EpisodesTotal = episodes.Count;
|
||||||
|
stats.EpisodesOnDisk = episodes.Count(e => e.EpisodeFileId > 0);
|
||||||
|
stats.EpisodesMissing = episodes.Count(e => e.Ignored == false && e.EpisodeFileId == 0);
|
||||||
|
stats.DownloadedLastMonth = history.Count;
|
||||||
|
stats.DownloadLastWeek = history.Count(h => h.Date <= DateTime.Today.AddDays(7));
|
||||||
|
|
||||||
|
return stats;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,16 +22,18 @@ namespace NzbDrone.Web.Controllers
|
||||||
private readonly ConfigProvider _configProvider;
|
private readonly ConfigProvider _configProvider;
|
||||||
private readonly DiskProvider _diskProvider;
|
private readonly DiskProvider _diskProvider;
|
||||||
private readonly BackupProvider _backupProvider;
|
private readonly BackupProvider _backupProvider;
|
||||||
|
private readonly StatsProvider _statsProvider;
|
||||||
|
|
||||||
public SystemController(JobProvider jobProvider, IndexerProvider indexerProvider,
|
public SystemController(JobProvider jobProvider, IndexerProvider indexerProvider,
|
||||||
ConfigProvider configProvider, DiskProvider diskProvider,
|
ConfigProvider configProvider, DiskProvider diskProvider,
|
||||||
BackupProvider backupProvider)
|
BackupProvider backupProvider, StatsProvider statsProvider)
|
||||||
{
|
{
|
||||||
_jobProvider = jobProvider;
|
_jobProvider = jobProvider;
|
||||||
_indexerProvider = indexerProvider;
|
_indexerProvider = indexerProvider;
|
||||||
_configProvider = configProvider;
|
_configProvider = configProvider;
|
||||||
_diskProvider = diskProvider;
|
_diskProvider = diskProvider;
|
||||||
_backupProvider = backupProvider;
|
_backupProvider = backupProvider;
|
||||||
|
_statsProvider = statsProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult Jobs()
|
public ActionResult Jobs()
|
||||||
|
@ -176,5 +178,12 @@ namespace NzbDrone.Web.Controllers
|
||||||
|
|
||||||
return File(fileInfo.FullName, "application/binary", fileInfo.Name);
|
return File(fileInfo.FullName, "application/binary", fileInfo.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ActionResult Stats()
|
||||||
|
{
|
||||||
|
var model = _statsProvider.GetStats();
|
||||||
|
|
||||||
|
return View(model);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -531,6 +531,9 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Views\SearchHistory\Details.cshtml" />
|
<Content Include="Views\SearchHistory\Details.cshtml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="Views\System\Stats.cshtml" />
|
||||||
|
</ItemGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
@model NzbDrone.Core.Model.StatsModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewBag.Title = "Stats";
|
||||||
|
}
|
||||||
|
|
||||||
|
@section HeaderContent
|
||||||
|
{
|
||||||
|
<style>
|
||||||
|
label
|
||||||
|
{
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Stats</h2>
|
||||||
|
|
||||||
|
@Html.LabelFor(m => m.SeriesTotal):
|
||||||
|
@Html.DisplayTextFor(m => m.SeriesTotal)
|
||||||
|
<br/>
|
||||||
|
@Html.LabelFor(m => m.SeriesContinuing):
|
||||||
|
@Html.DisplayTextFor(m => m.SeriesContinuing)
|
||||||
|
<br/>
|
||||||
|
@Html.LabelFor(m => m.SeriesEnded):
|
||||||
|
@Html.DisplayTextFor(m => m.SeriesEnded)
|
||||||
|
<br/>
|
||||||
|
@Html.LabelFor(m => m.EpisodesTotal):
|
||||||
|
@Html.DisplayTextFor(m => m.EpisodesTotal)
|
||||||
|
<br/>
|
||||||
|
@Html.LabelFor(m => m.EpisodesOnDisk):
|
||||||
|
@Html.DisplayTextFor(m => m.EpisodesOnDisk)
|
||||||
|
<br/>
|
||||||
|
@Html.LabelFor(m => m.EpisodesMissing):
|
||||||
|
@Html.DisplayTextFor(m => m.EpisodesMissing)
|
||||||
|
<br/>
|
||||||
|
@Html.LabelFor(m => m.DownloadLastWeek):
|
||||||
|
@Html.DisplayTextFor(m => m.DownloadLastWeek)
|
||||||
|
<br/>
|
||||||
|
@Html.LabelFor(m => m.DownloadedLastMonth):
|
||||||
|
@Html.DisplayTextFor(m => m.DownloadedLastMonth)
|
Loading…
Reference in New Issue