Esempio n. 1
0
        public TelemetryManager(IActiveSolutionBoundTracker solutionBindingTracker, ITelemetryDataRepository telemetryRepository, IVsVersionProvider vsVersionProvider,
                                ILogger logger, ITelemetryClient telemetryClient, ITelemetryTimer telemetryTimer, IKnownUIContexts knownUIContexts,
                                ICurrentTimeProvider currentTimeProvider)
        {
            this.solutionBindingTracker = solutionBindingTracker;
            this.telemetryRepository    = telemetryRepository;
            this.logger              = logger;
            this.telemetryClient     = telemetryClient;
            this.telemetryTimer      = telemetryTimer;
            this.knownUIContexts     = knownUIContexts;
            this.currentTimeProvider = currentTimeProvider;

            vsVersion = vsVersionProvider.Version;

            if (this.telemetryRepository.Data.InstallationDate == DateTimeOffset.MinValue)
            {
                this.telemetryRepository.Data.InstallationDate = currentTimeProvider.Now;
                this.telemetryRepository.Save();
            }

            if (IsAnonymousDataShared)
            {
                EnableAllEvents();
            }
        }
        private static IdeVersionInformation GetVsVersion(IVsVersion vsVersion)
        {
            if (vsVersion == null)
            {
                return(null);
            }

            return(new IdeVersionInformation
            {
                DisplayName = vsVersion.DisplayName,
                InstallationVersion = vsVersion.InstallationVersion,
                DisplayVersion = vsVersion.DisplayVersion
            });
        }
 internal VsVersionProvider(IServiceProvider serviceProvider, ISetupConfigurationProvider setupConfigurationProvider, ILogger logger)
 {
     Version = CalculateVersion(serviceProvider, setupConfigurationProvider, logger);
 }
        public static TelemetryPayload CreatePayload(TelemetryData telemetryData, DateTimeOffset now,
                                                     BindingConfiguration bindingConfiguration, IVsVersion vsVersion)
        {
            if (telemetryData == null)
            {
                throw new ArgumentNullException(nameof(telemetryData));
            }

            if (bindingConfiguration == null)
            {
                throw new ArgumentNullException(nameof(bindingConfiguration));
            }

            // Note: we are capturing the data about the connected mode at the point
            // the data is about to be sent. This seems weird, as it depends entirely
            // on the solution the user happens to have open at the time, if any.
            // However, this is what was spec-ed in the MMF.
            var isConnected       = bindingConfiguration?.Mode != SonarLintMode.Standalone;
            var isLegacyConnected = bindingConfiguration?.Mode == SonarLintMode.LegacyConnected;
            var isSonarCloud      = IsSonarCloud(bindingConfiguration?.Project?.ServerUri);

            return(new TelemetryPayload
            {
                SonarLintProduct = "SonarLint Visual Studio",
                SonarLintVersion = SonarLintVersion,
                VisualStudioVersion = VisualStudioHelpers.VisualStudioVersion,
                VisualStudioVersionInformation = GetVsVersion(vsVersion),
                NumberOfDaysSinceInstallation = now.DaysPassedSince(telemetryData.InstallationDate),
                NumberOfDaysOfUse = telemetryData.NumberOfDaysOfUse,
                IsUsingConnectedMode = isConnected,
                IsUsingLegacyConnectedMode = isLegacyConnected,
                IsUsingSonarCloud = isSonarCloud,
                SystemDate = now,
                InstallDate = telemetryData.InstallationDate,
                Analyses = telemetryData.Analyses,
                ShowHotspot = telemetryData.ShowHotspot,
                TaintVulnerabilities = telemetryData.TaintVulnerabilities,
                ServerNotifications = isConnected ? telemetryData.ServerNotifications : null
            });
        }