diff --git a/src/NzbDrone.Core/Analytics/AnalyticsService.cs b/src/NzbDrone.Core/Analytics/AnalyticsService.cs index 6e2d43382..bd1281999 100644 --- a/src/NzbDrone.Core/Analytics/AnalyticsService.cs +++ b/src/NzbDrone.Core/Analytics/AnalyticsService.cs @@ -1,22 +1,40 @@ -using NzbDrone.Common.EnvironmentInfo; +using System; +using System.Linq; +using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Core.Configuration; +using NzbDrone.Core.Datastore; +using NzbDrone.Core.History; namespace NzbDrone.Core.Analytics { public interface IAnalyticsService { bool IsEnabled { get; } + bool InstallIsActive { get; } } public class AnalyticsService : IAnalyticsService { private readonly IConfigFileProvider _configFileProvider; + private readonly IHistoryService _historyService; - public AnalyticsService(IConfigFileProvider configFileProvider) + public AnalyticsService(IHistoryService historyService, IConfigFileProvider configFileProvider) { _configFileProvider = configFileProvider; + _historyService = historyService; } - public bool IsEnabled => _configFileProvider.AnalyticsEnabled && RuntimeInfo.IsProduction; + public bool IsEnabled => _configFileProvider.AnalyticsEnabled && RuntimeInfo.IsProduction || RuntimeInfo.IsDevelopment; + + public bool InstallIsActive + { + get + { + var lastRecord = _historyService.Paged(new PagingSpec() { Page = 0, PageSize = 1, SortKey = "date", SortDirection = SortDirection.Descending }); + var monthAgo = DateTime.UtcNow.AddMonths(-1); + + return lastRecord.Records.Any(v => v.Date > monthAgo); + } + } } } \ No newline at end of file diff --git a/src/NzbDrone.Core/Update/UpdatePackageProvider.cs b/src/NzbDrone.Core/Update/UpdatePackageProvider.cs index cbcab70dc..d1cca39fc 100644 --- a/src/NzbDrone.Core/Update/UpdatePackageProvider.cs +++ b/src/NzbDrone.Core/Update/UpdatePackageProvider.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using NzbDrone.Common.Cloud; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Http; +using NzbDrone.Core.Analytics; namespace NzbDrone.Core.Update { @@ -15,14 +16,16 @@ namespace NzbDrone.Core.Update public class UpdatePackageProvider : IUpdatePackageProvider { private readonly IHttpClient _httpClient; - private readonly IPlatformInfo _platformInfo; private readonly IHttpRequestBuilderFactory _requestBuilder; + private readonly IPlatformInfo _platformInfo; + private readonly IAnalyticsService _analyticsService; - public UpdatePackageProvider(IHttpClient httpClient, ISonarrCloudRequestBuilder requestBuilder, IPlatformInfo platformInfo) + public UpdatePackageProvider(IHttpClient httpClient, ISonarrCloudRequestBuilder requestBuilder, IAnalyticsService analyticsService, IPlatformInfo platformInfo) { - _httpClient = httpClient; _platformInfo = platformInfo; + _analyticsService = analyticsService; _requestBuilder = requestBuilder.Services; + _httpClient = httpClient; } public UpdatePackage GetLatestUpdate(string branch, Version currentVersion) @@ -32,10 +35,15 @@ namespace NzbDrone.Core.Update .AddQueryParam("version", currentVersion) .AddQueryParam("os", OsInfo.Os.ToString().ToLowerInvariant()) .AddQueryParam("runtimeVer", _platformInfo.Version) - .SetSegment("branch", branch) - .Build(); + .SetSegment("branch", branch); - var update = _httpClient.Get(request).Resource; + if (_analyticsService.IsEnabled) + { + // Send if the system is active so we know which versions to deprecate/ignore + request.AddQueryParam("active", _analyticsService.InstallIsActive.ToString().ToLower()); + } + + var update = _httpClient.Get(request.Build()).Resource; if (!update.Available) return null; @@ -49,10 +57,15 @@ namespace NzbDrone.Core.Update .AddQueryParam("version", currentVersion) .AddQueryParam("os", OsInfo.Os.ToString().ToLowerInvariant()) .AddQueryParam("runtimeVer", _platformInfo.Version) - .SetSegment("branch", branch) - .Build(); + .SetSegment("branch", branch); - var updates = _httpClient.Get>(request); + if (_analyticsService.IsEnabled) + { + // Send if the system is active so we know which versions to deprecate/ignore + request.AddQueryParam("active", _analyticsService.InstallIsActive.ToString().ToLower()); + } + + var updates = _httpClient.Get>(request.Build()); return updates.Resource; }