| File: Latency\Internal\LatencyContextRegistrySet.cs | Web Access |
| Project: src\src\Libraries\Microsoft.Extensions.Telemetry\Microsoft.Extensions.Telemetry.csproj (Microsoft.Extensions.Telemetry) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.Options; using Microsoft.Shared.Diagnostics; namespace Microsoft.Extensions.Diagnostics.Latency.Internal; /// <summary> /// Class that holds registry of names used with <see cref="LatencyContext"/> APIs. /// </summary> internal sealed class LatencyContextRegistrySet { /// <summary> /// Gets the registry of checkpoint names. /// </summary> public Registry CheckpointNameRegistry { get; } /// <summary> /// Gets the registry of tag names. /// </summary> public Registry TagNameRegistry { get; } /// <summary> /// Gets the registry of counter names. /// </summary> public Registry MeasureNameRegistry { get; } public LatencyContextRegistrySet(IOptions<LatencyContextOptions> latencyContextOptions, IOptions<LatencyContextRegistrationOptions>? registrationOptions = null) { var latencyContextRegistrationOptions = registrationOptions != null ? registrationOptions.Value : new LatencyContextRegistrationOptions(); var throwOnUnregisteredNames = latencyContextOptions.Value.ThrowOnUnregisteredNames; CheckpointNameRegistry = CreateRegistry(latencyContextRegistrationOptions.CheckpointNames, throwOnUnregisteredNames); TagNameRegistry = CreateRegistry(latencyContextRegistrationOptions.TagNames, throwOnUnregisteredNames); MeasureNameRegistry = CreateRegistry(latencyContextRegistrationOptions.MeasureNames, throwOnUnregisteredNames); } private static Registry CreateRegistry(IEnumerable<string> names, bool throwOnUnregisteredNames) { var n = GetRegistryKeys(names); return new Registry(n, throwOnUnregisteredNames); } private static string[] GetRegistryKeys(IEnumerable<string> names) { _ = Throw.IfNull(names); foreach (var name in names) { if (string.IsNullOrWhiteSpace(name)) { Throw.ArgumentException(nameof(names), "Found null or whitespace name in supplied set"); } } HashSet<string> keys = new HashSet<string>(names); return keys.ToArray(); } }