Пример #1
0
        public TelemetryService(
            ILogger <TelemetryService> logger,
            IEventService eventService)
        {
            var config = Program.Configuration;

            Logger = logger;
            Logger.LogInformation("Starting Telemetry.");
            Logger.LogDebug($"DeviceId: {GetDeviceId()}.");

            TelemetryLogger = CreateLogManager(config);
            InitTelemetryLogger(TelemetryLogger, config);
            TelemetryLogger.LogEvent(
                "TelemetryStarted".AsTelemetryEvent().WithTimeSinceStart()
                );

            eventService.OnKernelStarted().On += (kernelApp) =>
            {
                TelemetryLogger.LogEvent(
                    "KernelStarted".AsTelemetryEvent().WithTimeSinceStart()
                    );
            };
            eventService.OnKernelStopped().On += (kernelApp) =>
            {
                TelemetryLogger.LogEvent("KernelStopped".AsTelemetryEvent());
                LogManager.UploadNow();
                LogManager.Teardown();
            };

            eventService.OnServiceInitialized <IMetadataController>().On += (metadataController) =>
                                                                            metadataController.MetadataChanged += (metadataController, propertyChanged) =>
                                                                                                                  SetSharedContextIfChanged(metadataController, propertyChanged,
                                                                                                                                            nameof(metadataController.ClientId),
                                                                                                                                            nameof(metadataController.UserAgent),
                                                                                                                                            nameof(metadataController.ClientCountry),
                                                                                                                                            nameof(metadataController.ClientLanguage),
                                                                                                                                            nameof(metadataController.ClientHost),
                                                                                                                                            nameof(metadataController.ClientOrigin),
                                                                                                                                            nameof(metadataController.ClientFirstOrigin),
                                                                                                                                            nameof(metadataController.ClientIsNew));
            eventService.OnServiceInitialized <ISnippets>().On += (snippets) =>
                                                                  snippets.SnippetCompiled += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());
            eventService.OnServiceInitialized <IWorkspace>().On += (workspace) =>
                                                                   workspace.Reloaded += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());
            eventService.OnServiceInitialized <IReferences>().On += (references) =>
                                                                    references.PackageLoaded += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());
            eventService.OnServiceInitialized <IExecutionEngine>().On += (executionEngine) =>
            {
                TelemetryLogger.LogEvent(
                    "ExecutionEngineInitialized".AsTelemetryEvent().WithTimeSinceStart()
                    );
                if (executionEngine is BaseEngine engine)
                {
                    engine.MagicExecuted += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());
                    engine.HelpExecuted  += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());
                }
            };
        }
Пример #2
0
 private void OnServiceInitialized <T>()
 {
     EventService.OnServiceInitialized <T>().On += (service) =>
     {
         var evt = "ServiceInitialized".AsTelemetryEvent();
         evt.SetProperty("Service", $"{typeof(T).Namespace}.{typeof(T).Name}");
         TelemetryLogger.LogEvent(evt);
     };
 }
Пример #3
0
        public int VerifyLogEventResident()
        {
            var mockChannel = new MockTelemetryChannel();
            var config      = new TelemetryConfiguration
            {
                TelemetryChannel   = mockChannel,
                InstrumentationKey = Guid.NewGuid().ToString(),
            };
            var client = new TelemetryClient(config);
            var logger = new TelemetryLogger {
                Client = client
            };

            logger.LogEvent(Event.Command, "parameters");

            return(mockChannel.SentEvents.Count());
        }
Пример #4
0
        public void SetSharedContextIfChanged(IMetadataController metadataController, string propertyChanged, params string[] propertyAllowlist)
        {
            if (propertyAllowlist == null ||
                !propertyAllowlist.Contains(propertyChanged))
            {
                return;
            }
            var property = typeof(IMetadataController)
                           .GetProperties()
                           .Where(p => p.Name == propertyChanged && p.CanRead)
                           .FirstOrDefault();

            if (property != null)
            {
                var value = $"{property.GetValue(metadataController)}";
                Logger.LogInformation($"ClientMetadataChanged: {property.Name}={value}");
                LogManager.SetSharedContext(property.Name, value);
                TelemetryLogger.LogEvent($"ClientMetadataChanged".AsTelemetryEvent());
            }
        }
Пример #5
0
        public TelemetryService(
            ILogger <TelemetryService> logger,
            IEventService eventService)
        {
            var config = Program.Configuration;

            Logger       = logger;
            EventService = eventService;
            Logger.LogInformation("Starting Telemetry.");
            Logger.LogDebug($"DeviceId: {GetDeviceId()}.");

            TelemetryLogger = CreateLogManager(config);
            InitTelemetryLogger(TelemetryLogger, config);
            TelemetryLogger.LogEvent(
                "TelemetryStarted".AsTelemetryEvent()
                );

            eventService.OnKernelStarted().On += (kernelApp) =>
            {
                TelemetryLogger.LogEvent(
                    "KernelStarted".AsTelemetryEvent()
                    );
            };
            eventService.OnKernelStopped().On += (kernelApp) =>
            {
                TelemetryLogger.LogEvent("KernelStopped".AsTelemetryEvent());
                LogManager.UploadNow();
                LogManager.Teardown();
            };

            // Send telemetry that identifies how long after startup each
            // service is ready.
            this.OnServiceInitialized <ISnippets>();
            this.OnServiceInitialized <ISymbolResolver>();
            this.OnServiceInitialized <IMagicSymbolResolver>();
            this.OnServiceInitialized <IWorkspace>();
            eventService.Events <WorkspaceReadyEvent, IWorkspace>().On += (workspace) =>
            {
                var evt = "WorkspaceReady"
                          .AsTelemetryEvent();
                TelemetryLogger.LogEvent(evt);
            };
            this.OnServiceInitialized <IReferences>();
            this.OnServiceInitialized <IConfigurationSource>();
            this.OnServiceInitialized <IMetadataController>();
            this.OnServiceInitialized <INugetPackages>();
            this.OnServiceInitialized <IAzureClient>();
            this.OnServiceInitialized <IEntryPointGenerator>();
            this.OnServiceInitialized <IExecutionEngine>();
            this.OnServiceInitialized <ICompilerService>();

            // Subscribe the logger to global events in the event service.
            eventService.Events <ExperimentalFeatureEnabledEvent, ExperimentalFeatureContent>().On += (content) =>
            {
                var evt = "ExperimentalFeatureEnabled".AsTelemetryEvent();
                evt.SetProperty(
                    "FeatureName".WithTelemetryNamespace(),
                    content.FeatureName
                    );
                evt.SetProperty(
                    "OptionalDependencies".WithTelemetryNamespace(),
                    string.Join(",", content.OptionalDependencies ?? new List <string>())
                    );
                TelemetryLogger.LogEvent(evt);
            };
            eventService.Events <CompletionEvent, CompletionEventArgs>().On += (args) =>
            {
                var evt = "CodeCompletion".AsTelemetryEvent();
                evt.SetProperty("NCompletions".WithTelemetryNamespace(), args.NCompletions);
                evt.SetProperty("Duration".WithTelemetryNamespace(), args.Duration.ToString("G"));
                TelemetryLogger.LogEvent(evt);
            };

            // As each different service starts up, we can subscribe to their
            // events as well.
            eventService.OnServiceInitialized <IMetadataController>().On += (metadataController) =>
                                                                            metadataController.MetadataChanged += (metadataController, propertyChanged) =>
                                                                                                                  SetSharedContextIfChanged(metadataController, propertyChanged,
                                                                                                                                            nameof(metadataController.ClientId),
                                                                                                                                            nameof(metadataController.UserAgent),
                                                                                                                                            nameof(metadataController.ClientCountry),
                                                                                                                                            nameof(metadataController.ClientLanguage),
                                                                                                                                            nameof(metadataController.ClientHost),
                                                                                                                                            nameof(metadataController.ClientOrigin),
                                                                                                                                            nameof(metadataController.ClientFirstOrigin),
                                                                                                                                            nameof(metadataController.ClientIsNew));
            eventService.OnServiceInitialized <IWorkspace>().On += (workspace) =>
            {
                TelemetryLogger.LogEvent(
                    "WorkspaceInitialized".AsTelemetryEvent()
                    );
                workspace.Reloaded      += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());
                workspace.ProjectLoaded += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());
            };
            eventService.OnServiceInitialized <IReferences>().On += (references) =>
                                                                    references.PackageLoaded += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());
            eventService.OnServiceInitialized <IExecutionEngine>().On += (executionEngine) =>
            {
                TelemetryLogger.LogEvent(
                    "ExecutionEngineInitialized".AsTelemetryEvent()
                    );
                if (executionEngine is BaseEngine engine)
                {
                    engine.MagicExecuted += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());
                    engine.HelpExecuted  += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());
                    baseEngine            = engine;
                }
            };

            eventService.OnServiceInitialized <IPerformanceMonitor>().On += (performanceMonitor) =>
            {
                performanceMonitor.OnSimulatorPerformanceAvailable += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());
                performanceMonitor.OnKernelPerformanceAvailable    += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());
            };
            eventService.OnServiceInitialized <ISnippets>().On += (snippets) =>
                                                                  snippets.SnippetCompiled += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());

            eventService.OnServiceInitialized <IAzureClient>().On += (azureClient) =>
            {
                client = azureClient;
                azureClient.ConnectToWorkspace += (_, info) => TelemetryLogger.LogEvent(info.AsTelemetryEvent());
            };
        }