mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-16 02:02:55 -07:00
#114 start caching quality profiles. Set the cache on startup and when obtaining quality profiles in settings
This commit is contained in:
parent
08b14d0164
commit
e8c222f66e
6 changed files with 81 additions and 14 deletions
|
@ -29,5 +29,8 @@ namespace PlexRequests.Core
|
|||
public class CacheKeys
|
||||
{
|
||||
public const string TvDbToken = "TheTvDbApiToken";
|
||||
public const string SonarrQualityProfiles = "SonarrQualityProfiles";
|
||||
public const string SickRageQualityProfiles = "SickRageQualityProfiles";
|
||||
public const string CouchPotatoQualityProfiles = "CouchPotatoQualityProfiles";
|
||||
}
|
||||
}
|
|
@ -37,6 +37,7 @@ using PlexRequests.Helpers;
|
|||
using PlexRequests.Store;
|
||||
using PlexRequests.Store.Repository;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PlexRequests.Core
|
||||
{
|
||||
|
@ -115,6 +116,52 @@ namespace PlexRequests.Core
|
|||
s.SaveSettings(defaultSettings);
|
||||
}
|
||||
|
||||
public async void CacheQualityProfiles()
|
||||
{
|
||||
var mc = new MemoryCacheProvider();
|
||||
|
||||
try
|
||||
{
|
||||
CacheSonarrQualityProfiles(mc);
|
||||
CacheCouchPotatoQualityProfiles(mc);
|
||||
// we don't need to cache sickrage profiles, those are static
|
||||
// TODO: cache headphones profiles?
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Log.Error("Failed to cache quality profiles on startup!");
|
||||
}
|
||||
}
|
||||
|
||||
private async void CacheSonarrQualityProfiles(MemoryCacheProvider cacheProvider)
|
||||
{
|
||||
var sonarrSettingsService = new SettingsServiceV2<SonarrSettings>(new SettingsJsonRepository(new DbConfiguration(new SqliteFactory()), new MemoryCacheProvider()));
|
||||
var sonarrSettings = sonarrSettingsService.GetSettings();
|
||||
if (sonarrSettings.Enabled) {
|
||||
cacheProvider.GetOrSet(CacheKeys.SonarrQualityProfiles, () =>
|
||||
{
|
||||
SonarrApi sonarrApi = new SonarrApi();
|
||||
return sonarrApi.GetProfiles(sonarrSettings.ApiKey, sonarrSettings.FullUri);
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private async void CacheCouchPotatoQualityProfiles(MemoryCacheProvider cacheProvider)
|
||||
{
|
||||
var cpSettingsService = new SettingsServiceV2<CouchPotatoSettings>(new SettingsJsonRepository(new DbConfiguration(new SqliteFactory()), new MemoryCacheProvider()));
|
||||
var cpSettings = cpSettingsService.GetSettings();
|
||||
if (cpSettings.Enabled)
|
||||
{
|
||||
cacheProvider.GetOrSet(CacheKeys.CouchPotatoQualityProfiles, () =>
|
||||
{
|
||||
CouchPotatoApi cpApi = new CouchPotatoApi();
|
||||
return cpApi.GetProfiles(cpSettings.FullUri, cpSettings.ApiKey);
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void MigrateDbFrom1300() // TODO: Remove in v1.7
|
||||
{
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ namespace PlexRequests.Helpers
|
|||
/// <param name="key">The key.</param>
|
||||
/// <param name="data">The object we want to store.</param>
|
||||
/// <param name="cacheTime">The amount of time we want to cache the object.</param>
|
||||
public void Set(string key, object data, int cacheTime)
|
||||
public void Set(string key, object data, int cacheTime = 20)
|
||||
{
|
||||
var policy = new CacheItemPolicy { AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(cacheTime) };
|
||||
Cache.Add(new CacheItem(key, data), policy);
|
||||
|
|
|
@ -374,6 +374,13 @@ namespace PlexRequests.UI.Modules
|
|||
var settings = this.Bind<SonarrSettings>();
|
||||
var profiles = SonarrApi.GetProfiles(settings.ApiKey, settings.FullUri);
|
||||
|
||||
// set the cache
|
||||
if (profiles != null)
|
||||
{
|
||||
var cache = new MemoryCacheProvider();
|
||||
cache.Set(CacheKeys.SonarrQualityProfiles, profiles);
|
||||
}
|
||||
|
||||
return Response.AsJson(profiles);
|
||||
}
|
||||
|
||||
|
@ -582,6 +589,13 @@ namespace PlexRequests.UI.Modules
|
|||
var settings = this.Bind<CouchPotatoSettings>();
|
||||
var profiles = CpApi.GetProfiles(settings.FullUri, settings.ApiKey);
|
||||
|
||||
// set the cache
|
||||
if (profiles != null)
|
||||
{
|
||||
var cache = new MemoryCacheProvider();
|
||||
cache.Set(CacheKeys.CouchPotatoQualityProfiles, profiles);
|
||||
}
|
||||
|
||||
return Response.AsJson(profiles);
|
||||
}
|
||||
|
||||
|
|
|
@ -126,7 +126,7 @@ namespace PlexRequests.UI.Modules
|
|||
}));
|
||||
|
||||
|
||||
|
||||
var mc = new MemoryCacheProvider();
|
||||
List<QualityModel> qualities = new List<QualityModel>();
|
||||
|
||||
if (isAdmin)
|
||||
|
@ -136,10 +136,13 @@ namespace PlexRequests.UI.Modules
|
|||
{
|
||||
taskList.Add(Task.Factory.StartNew(() =>
|
||||
{
|
||||
return CpApi.GetProfiles(cpSettings.FullUri, cpSettings.ApiKey).list.Select(x => new QualityModel() { Id = x._id, Name = x.label }); // TODO: cache this!
|
||||
return mc.GetOrSet(CacheKeys.CouchPotatoQualityProfiles, () =>
|
||||
{
|
||||
return CpApi.GetProfiles(cpSettings.FullUri, cpSettings.ApiKey); // TODO: cache this!
|
||||
});
|
||||
}).ContinueWith((t) =>
|
||||
{
|
||||
qualities = t.Result.ToList();
|
||||
qualities = t.Result.list.Select(x => new QualityModel() { Id = x._id, Name = x.label }).ToList();
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
@ -199,6 +202,7 @@ namespace PlexRequests.UI.Modules
|
|||
}
|
||||
}));
|
||||
|
||||
var mc = new MemoryCacheProvider();
|
||||
List<QualityModel> qualities = new List<QualityModel>();
|
||||
if (isAdmin)
|
||||
{
|
||||
|
@ -207,25 +211,22 @@ namespace PlexRequests.UI.Modules
|
|||
{
|
||||
taskList.Add(Task.Factory.StartNew(() =>
|
||||
{
|
||||
return SonarrApi.GetProfiles(sonarrSettings.ApiKey, sonarrSettings.FullUri).Select(x => new QualityModel() { Id = x.id.ToString(), Name = x.name }); // TODO: cache this!
|
||||
return mc.GetOrSet(CacheKeys.SonarrQualityProfiles, () =>
|
||||
{
|
||||
return SonarrApi.GetProfiles(sonarrSettings.ApiKey, sonarrSettings.FullUri); // TODO: cache this!
|
||||
|
||||
});
|
||||
}).ContinueWith((t) =>
|
||||
{
|
||||
qualities = t.Result.ToList();
|
||||
qualities = t.Result.Select(x => new QualityModel() { Id = x.id.ToString(), Name = x.name }).ToList();
|
||||
}));
|
||||
}
|
||||
else {
|
||||
var sickRageSettings = SickRageSettings.GetSettings();
|
||||
if (sickRageSettings.Enabled)
|
||||
{
|
||||
taskList.Add(Task.Factory.StartNew(() =>
|
||||
{
|
||||
return sickRageSettings.Qualities.Select(x => new QualityModel() { Id = x.Key, Name = x.Value }); // TODO: cache this!
|
||||
}).ContinueWith((t) =>
|
||||
{
|
||||
qualities = t.Result.ToList();
|
||||
}));
|
||||
qualities = sickRageSettings.Qualities.Select(x => new QualityModel() { Id = x.Key, Name = x.Value }).ToList();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -63,9 +63,11 @@ namespace PlexRequests.UI
|
|||
WriteOutVersion();
|
||||
|
||||
var s = new Setup();
|
||||
s.CacheQualityProfiles();
|
||||
var cn = s.SetupDb();
|
||||
ConfigureTargets(cn);
|
||||
|
||||
|
||||
if (port == -1)
|
||||
port = GetStartupPort();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue