private void sendCustomEventData(IAnalyticsEvent evt)
 {
     foreach (var p in evt.dataAsDictionary)
     {
         processDesignEventData(evt.eventName, p);
     }
 }
        public AppInsightsEventTelemetry(string userId, string instrumentationKey, IAnalyticsEvent analyticsEvent)
        {
            InstrumentationKey = instrumentationKey;

            DataTypeName = $"Microsoft.ApplicationInsights.{InstrumentationKey}.Event";

            EventDateTime = DateTime.UtcNow.ToString("O");

            TelemetryTags = new Dictionary <string, string>()
            {
                { "ai.user.id", userId },
                { "ai.user.accountId", userId }
            };

            TelemetryData = new TelemetryData
            {
                ItemTypeName      = "EventData",
                TelemetryDataItem = new TelemetryDataItem
                {
                    EventName  = analyticsEvent.EventName,
                    Properties = new Dictionary <string, string>(analyticsEvent.Properties)
                    {
                        { "UserId", userId },
                        { "Platform", GetOSPlatform() ?? DefaultValue },
                        { "PlatformDescription", RuntimeInformation.OSDescription },
                    }
                }
            };
        }
 public void SendEvent(IAnalyticsEvent analyticsEvent)
 {
     _telemetryClient.TrackEvent(
         analyticsEvent.EventType,
         SeverityLevel.Warning,
         analyticsEvent.ToDictionary());
     _telemetryClient.Flush();
 }
예제 #4
0
 private static WriteClientPlayerEventRequest getPlayerEventRequest(IAnalyticsEvent data)
 {
     return(new WriteClientPlayerEventRequest()
     {
         Body = data.dataAsDictionary,
         EventName = data.eventName
     });
 }
        public async Task TransmitEventAsync(IAnalyticsEvent analyticsEvent)
        {
            var serializedEventTelemetry = _appInsightsEventSerializer.SerializeAnalyticsEvent(analyticsEvent);

            using (var httpContent = new ByteArrayContent(serializedEventTelemetry))
            {
                await _httpClient.PostAsync(_appInsightsDataCollectionEndPoint, httpContent);
            }
        }
        public void TransmitEvent(IAnalyticsEvent analyticsEvent)
        {
            if (!_enableAnalyticsChecker.IsEnabled())
            {
                throw new InvalidOperationException("This method should not be called because analytics transmission is disabled.");
            }

            Console.WriteLine(analyticsEvent.ToString());
        }
        public async Task TransmitEventAsync(IAnalyticsEvent analyticsEvent, string instrumentationKey)
        {
            var serializedEventTelemetry = _appInsightsEventSerializer.SerializeAnalyticsEvent(analyticsEvent, instrumentationKey);

            using (var httpContent = new ByteArrayContent(serializedEventTelemetry))
            {
                await _httpClientWrapper.HttpClient.PostAsync(EndPoint, httpContent);
            }
        }
예제 #8
0
        public Task <IResult> TransmitEvent(IAnalyticsEvent analyticsEvent)
        {
            if (!IsEnabled)
            {
                return(Task.FromResult(Result.Success()));
            }

            return(_analyticsTransmitterSink.TransmitEvent(analyticsEvent));
        }
예제 #9
0
        public void TransmitEvent(IAnalyticsEvent analyticsEvent)
        {
            if (!_enableAnalyticsChecker.IsEnabled())
            {
                throw new InvalidOperationException("This method may not be called when analytics transmission is disabled.");
            }

            Console.WriteLine(@"Simulating transmission of {0}", analyticsEvent);
        }
예제 #10
0
        public async Task <IResult> TransmitEvent(IAnalyticsEvent analyticsEvent)
        {
            if (!_environmentSpecFlowTelemetryChecker.IsSpecFlowTelemetryEnabled())
            {
                return(Result.Success());
            }

            return(await _analyticsTransmitterSink.TransmitEvent(analyticsEvent));
        }
 private void sendFacebookEvent(IAnalyticsEvent evt)
 {
     if (!FB.IsInitialized)
     {
         if (mPendingEvents.Count < 50)
         {
             mPendingEvents.Add(evt);
         }
         return;
     }
     FB.LogAppEvent(evt.eventName, parameters: evt.dataAsDictionary);
 }
        public async Task TransmitRuntimeEvent(IAnalyticsEvent runtimeEvent)
        {
            var ideVersion           = _applicationHost.HostProductInfo.VersionMarketingString;
            var specFlowId           = _specFlowUserIdStore.GetUserId();
            var currentPluginVersion = Assembly.GetExecutingAssembly().GetName().Version;
            var properties           = runtimeEvent.Properties;

            properties.Add("Ide", "JetBrains Rider");
            properties.Add("IdeVersion", ideVersion);
            properties.Add("ExtensionVersion", currentPluginVersion.ToString());
            await _analyticsTransmitterSink.TransmitEvent(runtimeEvent, specFlowId);
        }
예제 #13
0
        public void TransmitEvent(IAnalyticsEvent analyticsEvent)
        {
            if (!_enableAnalyticsChecker.IsEnabled())
            {
                throw new InvalidOperationException("This method should not be called because analytics transmission is disabled.");
            }

            var appInsightsEvent = _appInsightsEventConverter.ConvertToAppInsightsEvent(analyticsEvent);
            var telemetryClient  = _telemetryClientWrapper.TelemetryClient;

            telemetryClient.TrackEvent(appInsightsEvent);
            telemetryClient.Flush();
        }
예제 #14
0
    public void LogEvent(IAnalyticsEvent analyticsEvent)
    {
        foreach (IAnalyticsEngine analyticsEngine in _analyticsEnginesFactory.CreateAnalyticsEngines(_customConfigurationManager))
        {
            string analyticsEngineName = analyticsEngine.AnalyticsEngineName;
            bool   flag = _customConfigurationManager.GetFlag(analyticsEngineName);

            if (flag)
            {
                analyticsEngine.SendEvent(analyticsEvent);
            }
        }
    }
예제 #15
0
    public void Initilize()
    {
        _dummyAnalyticsEvent = It.IsAny <IAnalyticsEvent>();

        _mockCustomConfigurationManager = new Mock <ICustomConfigurationManager>();
        _mockAnalyticsEnginesFactory    = new Mock <IAnalyticsEnginesFactory>();

        List <IAnalyticsEngine> analyticsEngines = new List <IAnalyticsEngine>();

        _mockApplicationInsightsAnalyticsEngine = new Mock <IAnalyticsEngine>();
        analyticsEngines.Add(_mockApplicationInsightsAnalyticsEngine.Object);

        _mockAnalyticsEnginesFactory.Setup(e => e.CreateAnalyticsEngines(It.IsAny <ICustomConfigurationManager>())).Returns(analyticsEngines);
    }
        public async Task <IResult> TransmitEvent(IAnalyticsEvent analyticsEvent, string instrumentationKey)
        {
            try
            {
                await TransmitEventAsync(analyticsEvent, instrumentationKey);

                return(Result.Success());
            }
            catch (Exception e)
            {
                // we swallow the exception to not break the build when just the analytics could not be transmitted
                // but we still return it inside a Failure to tell the outside world that something has failed
                return(Result.Failure(e));
            }
        }
예제 #17
0
        public async Task TransmitEvent(IAnalyticsEvent analyticsEvent)
        {
            try
            {
                var serializedEventTelemetry = _appInsightsEventSerializer.SerializeAnalyticsEvent(analyticsEvent);

                using (var httpContent = new ByteArrayContent(serializedEventTelemetry))
                {
                    await _httpClient.PostAsync(_appInsightsDataCollectionEndPoint, httpContent);
                }
            }
            catch (Exception)
            {
                //we don't care if we get any error during the sending
            }
        }
예제 #18
0
    public async Task LogEventParallelAsync(IAnalyticsEvent analyticsEvent)
    {
        List <Task> tasks = new List <Task>();

        foreach (IAnalyticsEngine analyticsEngine in _analyticEnginesFactory.CreateAnalyticsEngines(_customConfigurationManager))
        {
            string analyticsEngineName = analyticsEngine.GetAnalyticsEngineName;
            bool   flag = _customConfigurationManager.GetFlag(analyticsEngineName);
            if (flag)
            {
                Task task = analyticsEngine.SendEventAsync(analyticsEvent);
                tasks.Add(task);
            }
        }
        await Task.WhenAll(tasks);
    }
예제 #19
0
        private void TransmitEvent(IAnalyticsEvent analyticsEvent)
        {
            try
            {
                if (!_environmentSpecFlowTelemetryChecker.IsSpecFlowTelemetryEnabled())
                {
                    return;
                }

                _analyticsTransmitterSink.TransmitEvent(analyticsEvent);
            }
            catch (Exception)
            {
                //nope
            }
        }
        public async Task TransmitEvent(IAnalyticsEvent analyticsEvent, string userId)
        {
            if (!_environmentSpecFlowTelemetryChecker.IsSpecFlowTelemetryEnabled())
            {
                return;
            }

            try
            {
                await TransmitEventAsync(analyticsEvent, userId);
            }
            catch (Exception e)
            {
                _logger.Verbose(e);
            }
        }
예제 #21
0
        public EventTelemetry ConvertToAppInsightsEvent(IAnalyticsEvent analyticsEvent)
        {
            var eventTelemetry = new EventTelemetry(analyticsEvent.EventName)
            {
                Timestamp  = analyticsEvent.UtcDate,
                Properties =
                {
                    { "UserId",  analyticsEvent.UserId                },
                    { "UtcDate", analyticsEvent.UtcDate.ToString("O") },
                }
            };

            if (analyticsEvent is ExceptionAnalyticsEvent exceptionAnalyticsEvent)
            {
                eventTelemetry.Properties.Remove("UserId");
                eventTelemetry.Properties.Add("ExceptionType", exceptionAnalyticsEvent.ExceptionType);
                return(eventTelemetry);
            }
            if (analyticsEvent is ExtensionInstalledAnalyticsEvent extensionInstalledAnalyticsEvent)
            {
                eventTelemetry.Properties.Add("ExtensionVersion", extensionInstalledAnalyticsEvent.ExtensionVersion);
                eventTelemetry.Properties.Add("IdeVersion", extensionInstalledAnalyticsEvent.IdeVersion);
            }
            if (analyticsEvent is ExtensionLoadedAnalyticsEvent extensionLoadedAnalyticsEvent)
            {
                eventTelemetry.Properties.Add("ExtensionVersion", extensionLoadedAnalyticsEvent.ExtensionVersion);
                eventTelemetry.Properties.Add("IdeVersion", extensionLoadedAnalyticsEvent.IdeVersion);
                eventTelemetry.Properties.Add("Ide", extensionLoadedAnalyticsEvent.Ide);
                eventTelemetry.Properties.Add("ProjectTargetFramework", string.Join(";", extensionLoadedAnalyticsEvent.ProjectTargetFrameworks));
            }
            if (analyticsEvent is ExtensionUpgradedAnalyticsEvent extensionUpgradeAnalyticsEvent)
            {
                eventTelemetry.Properties.Add("ExtensionVersion", extensionUpgradeAnalyticsEvent.ExtensionVersion);
                eventTelemetry.Properties.Add("OldExtensionVersion", extensionUpgradeAnalyticsEvent.OldExtensionVersion);
            }
            if (analyticsEvent is ProjectTemplateWizardCompletedAnalyticsEvent projectTemplateWizardCompleted)
            {
                eventTelemetry.Properties.Add("SelectedDotNetFramework", projectTemplateWizardCompleted.SelectedDotNetFramework);
                eventTelemetry.Properties.Add("SelectedUnitTestFramework", projectTemplateWizardCompleted.SelectedUnitTestFramework);
            }

            return(eventTelemetry);
        }
        public AppInsightsEventTelemetry(IAnalyticsEvent analyticsEvent, string instrumentationKey)
        {
            InstrumentationKey = instrumentationKey;
            DataTypeName       = $"Microsoft.ApplicationInsights.{InstrumentationKey}.Event";

            EventDateTime = analyticsEvent.UtcDate.ToString("O");

            TelemetryTags = new Dictionary <string, string>()
            {
                { "ai.user.id", analyticsEvent.UserId },
                { "ai.user.accountId", analyticsEvent.UserId }
            };

            TelemetryData = new TelemetryData
            {
                ItemTypeName      = "EventData",
                TelemetryDataItem = new TelemetryDataItem
                {
                    EventName  = analyticsEvent.EventName,
                    Properties = new Dictionary <string, string>()
                    {
                        { "UtcDate", analyticsEvent.UtcDate.ToString("O") },
                        { "UserId", analyticsEvent.UserId },
                        { "Platform", analyticsEvent.Platform },
                        { "PlatformDescription", analyticsEvent.PlatformDescription },
                        { "SpecFlowVersion", analyticsEvent.SpecFlowVersion },
                        { "UnitTestProvider", analyticsEvent.UnitTestProvider ?? DefaultValue },
                        { "IsBuildServer", analyticsEvent.IsBuildServer.ToString() },
                        { "BuildServerName", analyticsEvent.BuildServerName ?? DefaultValue },
                        { "IsDockerContainer", analyticsEvent.IsDockerContainer.ToString() },
                        { "HashedAssemblyName", analyticsEvent.HashedAssemblyName ?? DefaultValue },
                        { "TargetFrameworks", analyticsEvent.TargetFrameworks },
                        { "TargetFramework", analyticsEvent.TargetFramework },
                    }
                }
            };

            if (analyticsEvent is SpecFlowProjectCompilingEvent specFlowProjectCompiledEvent)
            {
                TelemetryData.TelemetryDataItem.Properties.Add("MSBuildVersion", specFlowProjectCompiledEvent.MSBuildVersion);
                TelemetryData.TelemetryDataItem.Properties.Add("ProjectGuid", specFlowProjectCompiledEvent.ProjectGuid ?? DefaultValue);
            }
        }
        public CreatePlaceholdersState(
            IDataSource <TThreadSafe, TDatabase> dataSource,
            ILastTimeUsageStorage lastTimeUsageStorage,
            ITimeService timeService,
            IAnalyticsEvent <int> analyticsEvent,
            Func <ITimeEntry, long[]> dependencyIdsSelector,
            Func <long, long, TThreadSafe> buildDependencyPlaceholder)
        {
            Ensure.Argument.IsNotNull(dataSource, nameof(dataSource));
            Ensure.Argument.IsNotNull(lastTimeUsageStorage, nameof(lastTimeUsageStorage));
            Ensure.Argument.IsNotNull(timeService, nameof(timeService));
            Ensure.Argument.IsNotNull(analyticsEvent, nameof(analyticsEvent));
            Ensure.Argument.IsNotNull(dependencyIdsSelector, nameof(dependencyIdsSelector));
            Ensure.Argument.IsNotNull(buildDependencyPlaceholder, nameof(buildDependencyPlaceholder));

            this.dataSource                 = dataSource;
            this.lastTimeUsageStorage       = lastTimeUsageStorage;
            this.timeService                = timeService;
            this.analyticsEvent             = analyticsEvent;
            this.dependencyIdsSelector      = dependencyIdsSelector;
            this.buildDependencyPlaceholder = buildDependencyPlaceholder;
        }
예제 #24
0
 public static IObservable <T> Track <T, T1, TException>(this IObservable <T> observable, IAnalyticsEvent <T1> analyticsEvent, T1 parameter)
     where TException : Exception
 => observable.Catch <T, TException>(exception =>
 {
     analyticsEvent.Track(parameter);
     return(Observable.Throw <T>(exception));
 });
예제 #25
0
 public static IObservable <T> Track <T, T1, T2>(this IObservable <T> observable, IAnalyticsEvent <T1, T2> analyticsEvent, T1 param1, T2 param2)
 => observable.Do(_ => analyticsEvent.Track(param1, param2));
예제 #26
0
 public static IObservable <T> Track <T, T1>(this IObservable <T> observable, IAnalyticsEvent <T1> analyticsEvent, T1 parameter)
 => observable.Do(_ => analyticsEvent.Track(parameter));
예제 #27
0
 public static IObservable <T> Track <T>(this IObservable <T> observable, IAnalyticsEvent <T> analyticsEvent)
 => observable.Do(analyticsEvent.Track);
예제 #28
0
 private void trackStepOutcome(RatingViewOutcome outcome, IAnalyticsEvent specificEvent)
 {
     onboardingStorage.SetRatingViewOutcome(outcome, timeService.CurrentDateTime);
     specificEvent.Track();
 }
예제 #29
0
 private void trackSecondStepOutcome(RatingViewOutcome outcome, RatingViewSecondStepOutcome genericEventParameter, IAnalyticsEvent specificEvent)
 {
     trackStepOutcome(outcome, specificEvent);
     analyticsService.UserFinishedRatingViewSecondStep.Track(genericEventParameter);
 }
예제 #30
0
        public byte[] SerializeAnalyticsEvent(IAnalyticsEvent analyticsEvent, string instrumentationKey)
        {
            var eventTelemetry = new AppInsightsEventTelemetry(analyticsEvent, instrumentationKey);

            return(Encoding.UTF8.GetBytes(eventTelemetry.ToJson()));
        }