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()); } }; }
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); }; }
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()); }
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()); } }
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()); }; }