static TelemetryEvent ToTelemetryPackage(Tuple <string, string> package) { var subEvent = new TelemetryEvent(eventName: null); subEvent.AddPiiData("id", VSTelemetryServiceUtility.NormalizePackageId(package.Item1)); subEvent["version"] = package.Item2; return(subEvent); }
static TelemetryEvent ToTelemetryPackage(Tuple <string, string> package) { var subEvent = new TelemetryEvent(eventName: null); subEvent.AddPiiData("id", package.Item1?.ToLowerInvariant() ?? "(empty package id)"); subEvent["version"] = package.Item2; return(subEvent); }
public void EmitTelemetryEvent(Guid parentId) { var telemetryEvent = new TelemetryEvent(PackagePreFetcherInformation); telemetryEvent["DownloadStartTime"] = _downloadStartTime; telemetryEvent["PackageFetchTime"] = _packageFetchTime; telemetryEvent["TaskReturnTime"] = _taskReturnTime; var packageId = CryptoHashUtility.GenerateUniqueToken(Package.ToString()); telemetryEvent.AddPiiData("PackageId", Package.ToString()); if (parentId != Guid.Empty) { telemetryEvent["ParentId"] = parentId.ToString(); } TelemetryActivity.EmitTelemetryEvent(telemetryEvent); }
private static void AddUiActionEngineTelemetryProperties( VSActionsTelemetryEvent actionTelemetryEvent, bool continueAfterPreview, bool acceptedLicense, UserAction userAction, HashSet <Tuple <string, string> > existingPackages, List <Tuple <string, string> > addedPackages, List <string> removedPackages, List <Tuple <string, string> > updatedPackagesOld, List <Tuple <string, string> > updatedPackagesNew) { TelemetryEvent ToTelemetryPackage(Tuple <string, string> package) { var subEvent = new TelemetryEvent(eventName: null); subEvent.AddPiiData("id", package.Item1?.ToLowerInvariant() ?? "(empty package id)"); subEvent["version"] = package.Item2; return(subEvent); } List <TelemetryEvent> ToTelemetryPackageList(List <Tuple <string, string> > packages) { var list = new List <TelemetryEvent>(packages.Count); list.AddRange(packages.Select(ToTelemetryPackage)); return(list); } // log possible cancel reasons if (!continueAfterPreview) { actionTelemetryEvent["CancelAfterPreview"] = "True"; } if (!acceptedLicense) { actionTelemetryEvent["AcceptedLicense"] = "False"; } // log the single top level package the user is installing or removing if (userAction != null) { // userAction.Version can be null for deleted packages. actionTelemetryEvent.ComplexData["SelectedPackage"] = ToTelemetryPackage(new Tuple <string, string>(userAction.PackageId, userAction.Version?.ToNormalizedString() ?? string.Empty)); } // log the installed package state if (existingPackages != null && existingPackages.Count > 0) { var packages = new List <TelemetryEvent>(); foreach (var package in existingPackages) { packages.Add(ToTelemetryPackage(package)); } actionTelemetryEvent.ComplexData["ExistingPackages"] = packages; } // other packages can be added, removed, or upgraded as part of bulk upgrade or as part of satisfying package dependencies, so log that also if (addedPackages != null && addedPackages.Count > 0) { var packages = new List <TelemetryEvent>(); foreach (var package in addedPackages) { packages.Add(ToTelemetryPackage(package)); } actionTelemetryEvent.ComplexData["AddedPackages"] = packages; } if (removedPackages != null && removedPackages.Count > 0) { var packages = new List <TelemetryPiiProperty>(); foreach (var package in removedPackages) { packages.Add(new TelemetryPiiProperty(package?.ToLowerInvariant() ?? "(empty package id)")); } actionTelemetryEvent.ComplexData["RemovedPackages"] = packages; } // two collections for updated packages: pre and post upgrade if (updatedPackagesNew != null && updatedPackagesNew.Count > 0) { actionTelemetryEvent.ComplexData["UpdatedPackagesNew"] = ToTelemetryPackageList(updatedPackagesNew); } if (updatedPackagesOld != null && updatedPackagesOld.Count > 0) { actionTelemetryEvent.ComplexData["UpdatedPackagesOld"] = ToTelemetryPackageList(updatedPackagesOld); } }
public void HyperlinkClicked_CorrelatesSearchSelectionAndAction_Succeeds() { // Arrange var telemetrySession = new Mock <ITelemetrySession>(); TelemetryEvent lastTelemetryEvent = null; _ = telemetrySession .Setup(x => x.PostEvent(It.IsAny <TelemetryEvent>())) .Callback <TelemetryEvent>(x => lastTelemetryEvent = x); var service = new NuGetVSTelemetryService(telemetrySession.Object); var testPackageId = "testPackage.id"; var testPackageVersion = new NuGetVersion(1, 0, 0); var evtHyperlink = new HyperlinkClickedTelemetryEvent( HyperlinkType.DeprecationAlternativeDetails, ContractsItemFilter.All, isSolutionView: false, testPackageId); var evtSearch = new SearchSelectionTelemetryEvent( parentId: It.IsAny <Guid>(), recommendedCount: It.IsAny <int>(), itemIndex: It.IsAny <int>(), packageId: testPackageId, packageVersion: testPackageVersion, isPackageVulnerable: It.IsAny <bool>(), isPackageDeprecated: true, hasDeprecationAlternativePackage: true); var evtActions = new VSActionsTelemetryEvent( operationId: It.IsAny <string>(), projectIds: new[] { Guid.NewGuid().ToString() }, operationType: NuGetOperationType.Install, source: OperationSource.PMC, startTime: DateTimeOffset.Now.AddSeconds(-1), status: NuGetOperationStatus.NoOp, packageCount: 1, endTime: DateTimeOffset.Now, duration: .40, isPackageSourceMappingEnabled: false); // Simulate UIActionEngine.AddUiActionEngineTelemetryProperties() var pkgAdded = new TelemetryEvent(eventName: null); pkgAdded.AddPiiData("id", VSTelemetryServiceUtility.NormalizePackageId(testPackageId)); pkgAdded.AddPiiData("version", testPackageVersion.ToNormalizedString()); var packages = new List <TelemetryEvent> { pkgAdded }; evtActions.ComplexData["AddedPackages"] = packages; // Act service.EmitTelemetryEvent(evtHyperlink); var hyperlinkEmitted = lastTelemetryEvent; service.EmitTelemetryEvent(evtSearch); var searchEmitted = lastTelemetryEvent; service.EmitTelemetryEvent(evtActions); var actionEmitted = lastTelemetryEvent; // Assert var packageIdHyperlink = hyperlinkEmitted.GetPiiData().First(x => x.Key == HyperlinkClickedTelemetryEvent.AlternativePackageIdPropertyName).Value; var packageIdSearch = searchEmitted.GetPiiData().First(x => x.Key == "PackageId").Value; var packageIdsAction = (IEnumerable <TelemetryEvent>)actionEmitted.ComplexData["AddedPackages"]; var packageIds = packageIdsAction.Select(x => x.GetPiiData().First(x => x.Key == "id").Value); Assert.Equal(packageIdHyperlink, packageIdSearch); Assert.Contains(packageIdHyperlink, packageIds); }