using System; using System.Linq; using DeskMetrics; using NLog; using Ninject; using NzbDrone.Common; using NzbDrone.Core.Providers.Core; namespace NzbDrone.Core.Providers { public class AnalyticsProvider { private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private readonly IDeskMetricsClient _deskMetricsClient; private readonly ConfigProvider _configProvider; public const string DESKMETRICS_TEST_ID = "4ea8d347a14ad71442000002"; public const string DESKMETRICS_PRODUCTION_ID = "4f20b01ea14ad729b2000000"; [Inject] public AnalyticsProvider(IDeskMetricsClient deskMetricsClient, ConfigProvider configProvider) { _deskMetricsClient = deskMetricsClient; _configProvider = configProvider; } public AnalyticsProvider() { } public virtual void Checkpoint() { try { //Don't report anything unless working from master branch. if (!IsOnMasterBranch()) return; if (EnvironmentProvider.RegisterNewInstall) { _deskMetricsClient.RegisterInstall(); EnvironmentProvider.RegisterNewInstall = false; } if (_deskMetricsClient.Started) { _deskMetricsClient.Stop(); } _deskMetricsClient.Start(); } catch (Exception e) { if (!EnvironmentProvider.IsProduction) throw; logger.WarnException("Error while sending analytics data.", e); } } private bool IsOnMasterBranch() { var defaultUpdateUrl = UpdateProvider.DEFAULT_UPDATE_URL.Trim().Trim('/'); var currentUpdateUrl = _configProvider.UpdateUrl.Trim().Trim('/'); return String.Equals(defaultUpdateUrl, currentUpdateUrl, StringComparison.InvariantCultureIgnoreCase); } } }