diff --git a/src/NzbDrone.Core/HealthCheck/HealthCheckService.cs b/src/NzbDrone.Core/HealthCheck/HealthCheckService.cs index 28226504e..f5cb552d2 100644 --- a/src/NzbDrone.Core/HealthCheck/HealthCheckService.cs +++ b/src/NzbDrone.Core/HealthCheck/HealthCheckService.cs @@ -70,7 +70,7 @@ namespace NzbDrone.Core.HealthCheck .ToDictionary(g => g.Key, g => g.ToArray()); } - private void PerformHealthCheck(IProvideHealthCheck[] healthChecks, IEvent message = null) + private void PerformHealthCheck(IProvideHealthCheck[] healthChecks, IEvent message = null, bool performServerChecks = false) { var results = new List(); @@ -86,7 +86,10 @@ namespace NzbDrone.Core.HealthCheck } } - results.AddRange(_serverSideNotificationService.GetServerChecks()); + if (performServerChecks) + { + results.AddRange(_serverSideNotificationService.GetServerChecks()); + } foreach (var result in results) { @@ -112,17 +115,17 @@ namespace NzbDrone.Core.HealthCheck { if (message.Trigger == CommandTrigger.Manual) { - PerformHealthCheck(_healthChecks); + PerformHealthCheck(_healthChecks, null, true); } else { - PerformHealthCheck(_scheduledHealthChecks); + PerformHealthCheck(_scheduledHealthChecks, null, true); } } public void HandleAsync(ApplicationStartedEvent message) { - PerformHealthCheck(_startupHealthChecks); + PerformHealthCheck(_startupHealthChecks, null, true); } public void HandleAsync(IEvent message) diff --git a/src/NzbDrone.Core/HealthCheck/ServerSideNotificationService.cs b/src/NzbDrone.Core/HealthCheck/ServerSideNotificationService.cs index c6d344d3b..147738c32 100644 --- a/src/NzbDrone.Core/HealthCheck/ServerSideNotificationService.cs +++ b/src/NzbDrone.Core/HealthCheck/ServerSideNotificationService.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using NLog; +using NzbDrone.Common.Cache; using NzbDrone.Common.Cloud; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Http; @@ -23,24 +24,37 @@ namespace NzbDrone.Core.HealthCheck private readonly IHttpRequestBuilderFactory _cloudRequestBuilder; private readonly Logger _logger; - public ServerSideNotificationService(IHttpClient client, IConfigFileProvider configFileProvider, IReadarrCloudRequestBuilder cloudRequestBuilder, Logger logger) + private readonly ICached> _cache; + + public ServerSideNotificationService(IHttpClient client, + IConfigFileProvider configFileProvider, + IReadarrCloudRequestBuilder cloudRequestBuilder, + ICacheManager cacheManager, + Logger logger) { _client = client; _configFileProvider = configFileProvider; _cloudRequestBuilder = cloudRequestBuilder.Services; _logger = logger; + + _cache = cacheManager.GetCache>(GetType()); } public List GetServerChecks() + { + return _cache.Get("ServerChecks", () => RetrieveServerChecks(), TimeSpan.FromHours(2)); + } + + private List RetrieveServerChecks() { var request = _cloudRequestBuilder.Create() - .Resource("/notification") - .AddQueryParam("version", BuildInfo.Version) - .AddQueryParam("os", OsInfo.Os.ToString().ToLowerInvariant()) - .AddQueryParam("arch", RuntimeInformation.OSArchitecture) - .AddQueryParam("runtime", PlatformInfo.Platform.ToString().ToLowerInvariant()) - .AddQueryParam("branch", _configFileProvider.Branch) - .Build(); + .Resource("/notification") + .AddQueryParam("version", BuildInfo.Version) + .AddQueryParam("os", OsInfo.Os.ToString().ToLowerInvariant()) + .AddQueryParam("arch", RuntimeInformation.OSArchitecture) + .AddQueryParam("runtime", PlatformInfo.Platform.ToString().ToLowerInvariant()) + .AddQueryParam("branch", _configFileProvider.Branch) + .Build(); try { _logger.Trace("Getting server side health notifications");