File: Telemetry\PackageExtractionTelemetryEvent.cs
Web Access
Project: src\src\nuget-client\src\NuGet.Core\NuGet.Packaging\NuGet.Packaging.csproj (NuGet.Packaging)
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using NuGet.Common;
using NuGet.Packaging.Core;

namespace NuGet.Packaging
{
    public class PackageExtractionTelemetryEvent : TelemetryEvent
    {
        public const string EventName = "PackageExtractionInformation";

        public PackageSaveMode PackageSaveMode => (PackageSaveMode)(base[nameof(PackageSaveMode)]!);

        public NuGetOperationStatus Status => (NuGetOperationStatus)(base[nameof(Status)]!);

        public ExtractionSource ExtractionSource => (ExtractionSource)(base[nameof(ExtractionSource)]!);

        public string? PackageId => base[nameof(PackageId)] as string;
        public string? PackageVersion => base[nameof(PackageVersion)] as string;

        public PackageExtractionTelemetryEvent(
            PackageSaveMode packageSaveMode,
            NuGetOperationStatus status,
            ExtractionSource extractionSource,
            PackageIdentity? packageId = null) :
            base(EventName, new Dictionary<string, object?>
                {
                    { nameof(Status), status },
                    { nameof(ExtractionSource), extractionSource },
                    { nameof(PackageSaveMode), packageSaveMode }
                })
        {
            if (packageId != null)
            {
                LogPackageIdentity(packageId);
            }
        }

        [SuppressMessage("Globalization", "CA1308:Normalize strings to uppercase", Justification = "Matching existing code and existing logged telemetry.")]
        public void LogPackageIdentity(PackageIdentity packageId)
        {
            AddPiiData(nameof(PackageId), packageId.Id.ToLowerInvariant());
            AddPiiData(nameof(PackageVersion), packageId.Version!.ToNormalizedString().ToLowerInvariant());
        }

        public void SetResult(NuGetOperationStatus status)
        {
            base[nameof(Status)] = status;
        }
    }
}