public void RestoreTelemetryService_EmitRestoreEvent_OperationSucceed(RestoreOperationSource source, NuGetOperationStatus status) { // Arrange var telemetrySession = new Mock <ITelemetrySession>(); TelemetryEvent lastTelemetryEvent = null; telemetrySession .Setup(x => x.PostEvent(It.IsAny <TelemetryEvent>())) .Callback <TelemetryEvent>(x => lastTelemetryEvent = x); string operationId = Guid.NewGuid().ToString(); var stausMessage = status == NuGetOperationStatus.Failed ? "Operation Failed" : string.Empty; var restoreTelemetryData = new RestoreTelemetryEvent( operationId: operationId, projectIds: new[] { Guid.NewGuid().ToString() }, source: source, startTime: DateTimeOffset.Now.AddSeconds(-3), status: status, packageCount: 2, endTime: DateTimeOffset.Now, duration: 2.10); var service = new RestoreTelemetryService(telemetrySession.Object); // Act service.EmitRestoreEvent(restoreTelemetryData); // Assert VerifyTelemetryEventData(restoreTelemetryData, lastTelemetryEvent); }
private void EmitRestoreTelemetryEvent(IEnumerable <NuGetProject> projects, RestoreOperationSource source, DateTimeOffset startTime, double duration) { var sortedProjects = projects.OrderBy( project => project.GetMetadata <string>(NuGetProjectMetadataKeys.UniqueName)); var projectIds = sortedProjects.Select( project => project.GetMetadata <string>(NuGetProjectMetadataKeys.ProjectId)).ToArray(); var restoreTelemetryEvent = new RestoreTelemetryEvent( _nuGetProjectContext.OperationId.ToString(), projectIds, source, startTime, _status, _packageCount, _noOpProjectsCount, DateTimeOffset.Now, duration); TelemetryActivity.EmitTelemetryEvent(restoreTelemetryEvent); var sources = _sourceRepositoryProvider.PackageSourceProvider.LoadPackageSources().ToList(); var sourceEvent = SourceTelemetry.GetRestoreSourceSummaryEvent(_nuGetProjectContext.OperationId, sources); TelemetryActivity.EmitTelemetryEvent(sourceEvent); }
private void EmitRestoreTelemetryEvent(IEnumerable <NuGetProject> projects, bool forceRestore, RestoreOperationSource source, DateTimeOffset startTime, double duration, PackageSourceTelemetry.Totals protocolDiagnosticTotals, IntervalTracker intervalTimingTracker) { var sortedProjects = projects.OrderBy( project => project.GetMetadata <string>(NuGetProjectMetadataKeys.UniqueName)); var projectIds = sortedProjects.Select( project => project.GetMetadata <string>(NuGetProjectMetadataKeys.ProjectId)).ToArray(); var restoreTelemetryEvent = new RestoreTelemetryEvent( _nuGetProjectContext.OperationId.ToString(), projectIds, forceRestore, source, startTime, _status, packageCount: _packageCount, noOpProjectsCount: _noOpProjectsCount, upToDateProjectsCount: _upToDateProjectCount, DateTimeOffset.Now, duration, isSolutionLoadRestore: _isSolutionLoadRestore, intervalTimingTracker); TelemetryActivity.EmitTelemetryEvent(restoreTelemetryEvent); var sources = _sourceRepositoryProvider.PackageSourceProvider.LoadPackageSources().ToList(); var sourceEvent = SourceTelemetry.GetRestoreSourceSummaryEvent(_nuGetProjectContext.OperationId, sources, protocolDiagnosticTotals); TelemetryActivity.EmitTelemetryEvent(sourceEvent); }
private void VerifyTelemetryEventData(string operationId, RestoreTelemetryEvent expected, TelemetryEvent actual) { Assert.NotNull(actual); Assert.Equal(RestoreTelemetryEvent.RestoreActionEventName, actual.Name); Assert.Equal(26, actual.Count); Assert.Equal(expected.OperationSource.ToString(), actual["OperationSource"].ToString()); Assert.Equal(expected.NoOpProjectsCount, (int)actual["NoOpProjectsCount"]); Assert.Equal(expected.ForceRestore, (bool)actual["ForceRestore"]); Assert.Equal(expected.IsSolutionLoadRestore, (bool)actual["IsSolutionLoadRestore"]); Assert.Equal(expected.UpToDateProjectCount, (int)actual["UpToDateProjectCount"]); Assert.Equal(expected.PackageReferenceProjectsCount, (int)actual["PackageReferenceProjectsCount"]); Assert.Equal(expected.ProjectJsonProjectsCount, (int)actual["ProjectJsonProjectsCount"]); Assert.Equal(expected.PackagesConfigProjectsCount, (int)actual["PackagesConfigProjectsCount"]); Assert.Equal(expected.DotnetCliToolProjectsCount, (int)actual["DotnetCliToolProjectsCount"]); Assert.Equal(expected.UnknownProjectsCount, (int)actual["UnknownProjectsCount"]); Assert.Equal(expected.LegacyPackageReferenceProjectsCount, (int)actual["LegacyPackageReferenceProjectsCount"]); Assert.Equal(expected.CpsPackageReferenceProjectsCount, (int)actual["CpsPackageReferenceProjectsCount"]); Assert.Equal(expected[RestoreTelemetryEvent.NumHTTPFeeds], (int)actual["NumHTTPFeeds"]); Assert.Equal(expected[RestoreTelemetryEvent.NumLocalFeeds], (int)actual["NumLocalFeeds"]); Assert.Equal(expected[RestoreTelemetryEvent.NuGetOrg], (bool)actual["NuGetOrg"]); Assert.Equal(expected[RestoreTelemetryEvent.VsOfflinePackages], (bool)actual["VsOfflinePackages"]); Assert.Equal(1, (int)actual["NumHTTPFeeds"]); Assert.Equal(2, (int)actual["NumLocalFeeds"]); Assert.Equal(true, (bool)actual["NuGetOrg"]); Assert.Equal(false, (bool)actual["VsOfflinePackages"]); Assert.Equal(expected["ExplicitRestoreReason"], actual["ExplicitRestoreReason"]); AssertProjectsCount(expected); TestTelemetryUtility.VerifyTelemetryEventData(operationId, expected, actual); }
public void RestoreTelemetryService_EmitRestoreEvent_OperationSucceed(bool forceRestore, RestoreOperationSource source, NuGetOperationStatus status, ExplicitRestoreReason explicitRestoreReason) { // Arrange var telemetrySession = new Mock <ITelemetrySession>(); TelemetryEvent lastTelemetryEvent = null; telemetrySession .Setup(x => x.PostEvent(It.IsAny <TelemetryEvent>())) .Callback <TelemetryEvent>(x => lastTelemetryEvent = x); var noopProjectsCount = 0; if (status == NuGetOperationStatus.NoOp) { noopProjectsCount = 1; } var operationId = Guid.NewGuid().ToString(); var restoreTelemetryData = new RestoreTelemetryEvent( operationId, projectIds: new[] { Guid.NewGuid().ToString() }, forceRestore: forceRestore, source: source, startTime: DateTimeOffset.Now.AddSeconds(-3), status: status, packageCount: 2, noOpProjectsCount: noopProjectsCount, upToDateProjectsCount: 5, unknownProjectsCount: 0, projectJsonProjectsCount: 0, packageReferenceProjectsCount: 0, legacyPackageReferenceProjectsCount: 0, cpsPackageReferenceProjectsCount: 0, dotnetCliToolProjectsCount: 0, packagesConfigProjectsCount: 1, endTime: DateTimeOffset.Now, duration: 2.10, additionalTrackingData: new Dictionary <string, object>() { { nameof(RestoreTelemetryEvent.IsSolutionLoadRestore), true }, { nameof(ExplicitRestoreReason), explicitRestoreReason } }, new IntervalTracker("Activity"), isPackageSourceMappingEnabled: false, httpFeedsCount: 1, localFeedsCount: 2, hasNuGetOrg: true, hasVSOfflineFeed: false); var service = new NuGetVSTelemetryService(telemetrySession.Object); // Act service.EmitTelemetryEvent(restoreTelemetryData); // Assert VerifyTelemetryEventData(operationId, restoreTelemetryData, lastTelemetryEvent); }
private void VerifyTelemetryEventData(RestoreTelemetryEvent expected, TelemetryEvent actual) { Assert.NotNull(actual); Assert.Equal(TelemetryConstants.RestoreActionEventName, actual.Name); Assert.Equal(8, actual.Properties.Count); Assert.Equal(expected.Source.ToString(), actual.Properties[TelemetryConstants.OperationSourcePropertyName].ToString()); TestTelemetryUtility.VerifyTelemetryEventData(expected, actual); }
public void RestoreTelemetryService_EmitRestoreEvent_IntervalsAreCaptured() { // Arrange var first = "first"; var second = "second"; var telemetrySession = new Mock <ITelemetrySession>(); TelemetryEvent lastTelemetryEvent = null; telemetrySession .Setup(x => x.PostEvent(It.IsAny <TelemetryEvent>())) .Callback <TelemetryEvent>(x => lastTelemetryEvent = x); var tracker = new IntervalTracker("Activity"); using (tracker.Start(first)) { } using (tracker.Start(second)) { } var operationId = Guid.NewGuid().ToString(); var restoreTelemetryData = new RestoreTelemetryEvent( operationId, projectIds: new[] { Guid.NewGuid().ToString() }, forceRestore: false, source: RestoreOperationSource.OnBuild, startTime: DateTimeOffset.Now.AddSeconds(-3), status: NuGetOperationStatus.Succeeded, packageCount: 1, noOpProjectsCount: 0, upToDateProjectsCount: 0, endTime: DateTimeOffset.Now, duration: 2.10, isSolutionLoadRestore: true, tracker ); var service = new NuGetVSTelemetryService(telemetrySession.Object); // Act service.EmitTelemetryEvent(restoreTelemetryData); // Assert Assert.NotNull(lastTelemetryEvent); Assert.Equal(RestoreTelemetryEvent.RestoreActionEventName, lastTelemetryEvent.Name); Assert.Equal(15, lastTelemetryEvent.Count); Assert.Equal(restoreTelemetryData.OperationSource.ToString(), lastTelemetryEvent["OperationSource"].ToString()); Assert.Equal(restoreTelemetryData.NoOpProjectsCount, (int)lastTelemetryEvent["NoOpProjectsCount"]); Assert.Equal(restoreTelemetryData[first], lastTelemetryEvent[first]); Assert.Equal(restoreTelemetryData[second], lastTelemetryEvent[second]); }
private void VerifyTelemetryEventData(string operationId, RestoreTelemetryEvent expected, TelemetryEvent actual) { Assert.NotNull(actual); Assert.Equal(RestoreTelemetryEvent.RestoreActionEventName, actual.Name); Assert.Equal(10, actual.Count); Assert.Equal(expected.OperationSource.ToString(), actual["OperationSource"].ToString()); Assert.Equal(expected.NoOpProjectsCount, (int)actual["NoOpProjectsCount"]); TestTelemetryUtility.VerifyTelemetryEventData(operationId, expected, actual); }
private void EmitRestoreTelemetryEvent(IEnumerable <NuGetProject> projects, bool forceRestore, RestoreOperationSource source, DateTimeOffset startTime, double duration, PackageSourceTelemetry.Totals protocolDiagnosticTotals, IntervalTracker intervalTimingTracker) { var sortedProjects = projects.OrderBy( project => project.GetMetadata <string>(NuGetProjectMetadataKeys.UniqueName)); var projectIds = sortedProjects.Select( project => project.GetMetadata <string>(NuGetProjectMetadataKeys.ProjectId)).ToArray(); var projectDictionary = sortedProjects .GroupBy(x => x.ProjectStyle) .ToDictionary(x => x.Key, y => y.Count()); var packageSourceMapping = PackageSourceMapping.GetPackageSourceMapping(_settings); bool isPackageSourceMappingEnabled = packageSourceMapping?.IsEnabled ?? false; var restoreTelemetryEvent = new RestoreTelemetryEvent( _nuGetProjectContext.OperationId.ToString(), projectIds, forceRestore, source, startTime, _status, packageCount: _packageCount, noOpProjectsCount: _noOpProjectsCount, upToDateProjectsCount: _upToDateProjectCount, unknownProjectsCount: projectDictionary.GetValueOrDefault(ProjectStyle.Unknown, 0), // appears in DependencyGraphRestoreUtility projectJsonProjectsCount: projectDictionary.GetValueOrDefault(ProjectStyle.ProjectJson, 0), packageReferenceProjectsCount: projectDictionary.GetValueOrDefault(ProjectStyle.PackageReference, 0), legacyPackageReferenceProjectsCount: sortedProjects.Where(x => x.ProjectStyle == ProjectStyle.PackageReference && x is LegacyPackageReferenceProject).Count(), cpsPackageReferenceProjectsCount: sortedProjects.Where(x => x.ProjectStyle == ProjectStyle.PackageReference && x is CpsPackageReferenceProject).Count(), dotnetCliToolProjectsCount: projectDictionary.GetValueOrDefault(ProjectStyle.DotnetCliTool, 0), // appears in DependencyGraphRestoreUtility packagesConfigProjectsCount: projectDictionary.GetValueOrDefault(ProjectStyle.PackagesConfig, 0), DateTimeOffset.Now, duration, _trackingData, intervalTimingTracker, isPackageSourceMappingEnabled); TelemetryActivity.EmitTelemetryEvent(restoreTelemetryEvent); var sources = _sourceRepositoryProvider.PackageSourceProvider.LoadPackageSources().ToList(); var sourceEvent = SourceTelemetry.GetRestoreSourceSummaryEvent(_nuGetProjectContext.OperationId, sources, protocolDiagnosticTotals); TelemetryActivity.EmitTelemetryEvent(sourceEvent); }
public void RestoreTelemetryService_EmitRestoreEvent_OperationSucceed(bool forceRestore, RestoreOperationSource source, NuGetOperationStatus status) { // Arrange var telemetrySession = new Mock <ITelemetrySession>(); TelemetryEvent lastTelemetryEvent = null; telemetrySession .Setup(x => x.PostEvent(It.IsAny <TelemetryEvent>())) .Callback <TelemetryEvent>(x => lastTelemetryEvent = x); var noopProjectsCount = 0; if (status == NuGetOperationStatus.NoOp) { noopProjectsCount = 1; } var operationId = Guid.NewGuid().ToString(); var restoreTelemetryData = new RestoreTelemetryEvent( operationId, projectIds: new[] { Guid.NewGuid().ToString() }, forceRestore: forceRestore, source: source, startTime: DateTimeOffset.Now.AddSeconds(-3), status: status, packageCount: 2, noOpProjectsCount: noopProjectsCount, upToDateProjectsCount: 5, unknownProjectsCount: 0, projectJsonProjectsCount: 0, packageReferenceProjectsCount: 0, legacyPackageReferenceProjectsCount: 0, cpsPackageReferenceProjectsCount: 0, dotnetCliToolProjectsCount: 0, packagesConfigProjectsCount: 1, endTime: DateTimeOffset.Now, duration: 2.10, isSolutionLoadRestore: true, new IntervalTracker("Activity")); var service = new NuGetVSTelemetryService(telemetrySession.Object); // Act service.EmitTelemetryEvent(restoreTelemetryData); // Assert VerifyTelemetryEventData(operationId, restoreTelemetryData, lastTelemetryEvent); }
private void EmitRestoreTelemetryEvent(IEnumerable <NuGetProject> projects, RestoreOperationSource source, DateTimeOffset startTime, double duration) { var sortedProjects = projects.OrderBy( project => project.GetMetadata <string>(NuGetProjectMetadataKeys.UniqueName)); var projectIds = sortedProjects.Select( project => project.GetMetadata <string>(NuGetProjectMetadataKeys.ProjectId)).ToArray(); var restoreTelemetryEvent = new RestoreTelemetryEvent( Guid.NewGuid().ToString(), projectIds, source, startTime, _status, _packageCount, _noOpProjectsCount, DateTimeOffset.Now, duration); RestoreTelemetryService.Instance.EmitRestoreEvent(restoreTelemetryEvent); }
private void VerifyTelemetryEventData(string operationId, RestoreTelemetryEvent expected, TelemetryEvent actual) { Assert.NotNull(actual); Assert.Equal(RestoreTelemetryEvent.RestoreActionEventName, actual.Name); Assert.Equal(21, actual.Count); Assert.Equal(expected.OperationSource.ToString(), actual["OperationSource"].ToString()); Assert.Equal(expected.NoOpProjectsCount, (int)actual["NoOpProjectsCount"]); Assert.Equal(expected.ForceRestore, (bool)actual["ForceRestore"]); Assert.Equal(expected.IsSolutionLoadRestore, (bool)actual["IsSolutionLoadRestore"]); Assert.Equal(expected.UpToDateProjectCount, (int)actual["UpToDateProjectCount"]); Assert.Equal(expected.PackageReferenceProjectsCount, (int)actual["PackageReferenceProjectsCount"]); Assert.Equal(expected.ProjectJsonProjectsCount, (int)actual["ProjectJsonProjectsCount"]); Assert.Equal(expected.PackagesConfigProjectsCount, (int)actual["PackagesConfigProjectsCount"]); Assert.Equal(expected.DotnetCliToolProjectsCount, (int)actual["DotnetCliToolProjectsCount"]); Assert.Equal(expected.UnknownProjectsCount, (int)actual["UnknownProjectsCount"]); Assert.Equal(expected.LegacyPackageReferenceProjectsCount, (int)actual["LegacyPackageReferenceProjectsCount"]); Assert.Equal(expected.CpsPackageReferenceProjectsCount, (int)actual["CpsPackageReferenceProjectsCount"]); AssertProjectsCount(expected); TestTelemetryUtility.VerifyTelemetryEventData(operationId, expected, actual); }
public void RestoreTelemetryService_EmitRestoreEvent_IntervalsAreCaptured(string _packageSourceMapping) { // Arrange var first = "first"; var second = "second"; var telemetrySession = new Mock <ITelemetrySession>(); TelemetryEvent lastTelemetryEvent = null; telemetrySession .Setup(x => x.PostEvent(It.IsAny <TelemetryEvent>())) .Callback <TelemetryEvent>(x => lastTelemetryEvent = x); var tracker = new IntervalTracker("Activity"); using (tracker.Start(first)) { } using (tracker.Start(second)) { } var operationId = Guid.NewGuid().ToString(); var packageSourceMapping = string.IsNullOrEmpty(_packageSourceMapping) ? null : PackageSourceMappingUtility.GetpackageSourceMapping(_packageSourceMapping); bool isPackageSourceMappingEnabled = packageSourceMapping?.IsEnabled ?? false; var restoreTelemetryData = new RestoreTelemetryEvent( operationId, projectIds: new[] { Guid.NewGuid().ToString() }, forceRestore: false, source: RestoreOperationSource.OnBuild, startTime: DateTimeOffset.Now.AddSeconds(-3), status: NuGetOperationStatus.Succeeded, packageCount: 1, noOpProjectsCount: 0, upToDateProjectsCount: 0, unknownProjectsCount: 0, projectJsonProjectsCount: 0, packageReferenceProjectsCount: 1, legacyPackageReferenceProjectsCount: 0, cpsPackageReferenceProjectsCount: 1, dotnetCliToolProjectsCount: 0, packagesConfigProjectsCount: 0, endTime: DateTimeOffset.Now, duration: 2.10, additionalTrackingData: new Dictionary <string, object>() { { nameof(RestoreTelemetryEvent.IsSolutionLoadRestore), true } }, tracker, isPackageSourceMappingEnabled: isPackageSourceMappingEnabled); var service = new NuGetVSTelemetryService(telemetrySession.Object); // Act service.EmitTelemetryEvent(restoreTelemetryData); // Assert Assert.NotNull(lastTelemetryEvent); Assert.Equal(RestoreTelemetryEvent.RestoreActionEventName, lastTelemetryEvent.Name); Assert.Equal(23, lastTelemetryEvent.Count); Assert.Equal(restoreTelemetryData.OperationSource.ToString(), lastTelemetryEvent["OperationSource"].ToString()); Assert.Equal(restoreTelemetryData.NoOpProjectsCount, (int)lastTelemetryEvent["NoOpProjectsCount"]); Assert.Equal(restoreTelemetryData[first], lastTelemetryEvent[first]); Assert.Equal(restoreTelemetryData[second], lastTelemetryEvent[second]); }
private void AssertProjectsCount(RestoreTelemetryEvent t) { Assert.True(t.ProjectsCount >= t.PackageReferenceProjectsCount + t.ProjectJsonProjectsCount + t.PackagesConfigProjectsCount + t.DotnetCliToolProjectsCount + t.UnknownProjectsCount); Assert.True(t.PackageReferenceProjectsCount >= t.LegacyPackageReferenceProjectsCount + t.CpsPackageReferenceProjectsCount); }