File: Otlp\Model\Serialization\OtlpCommonJson.cs
Web Access
Project: src\src\Aspire.Dashboard\Aspire.Dashboard.csproj (Aspire.Dashboard)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Text.Json.Serialization;
 
namespace Aspire.Dashboard.Otlp.Model.Serialization;
 
/// <summary>
/// Represents any type of attribute value following the OTLP protojson format.
/// Only one value property should be set at a time (oneof semantics).
/// </summary>
internal sealed class OtlpAnyValueJson
{
    /// <summary>
    /// String value.
    /// </summary>
    [JsonPropertyName("stringValue")]
    public string? StringValue { get; set; }
 
    /// <summary>
    /// Boolean value.
    /// </summary>
    [JsonPropertyName("boolValue")]
    public bool? BoolValue { get; set; }
 
    /// <summary>
    /// Integer value. Serialized as string per protojson spec for int64.
    /// </summary>
    [JsonPropertyName("intValue")]
    [JsonNumberHandling(JsonNumberHandling.WriteAsString | JsonNumberHandling.AllowReadingFromString)]
    public long? IntValue { get; set; }
 
    /// <summary>
    /// Double value.
    /// </summary>
    [JsonPropertyName("doubleValue")]
    public double? DoubleValue { get; set; }
 
    /// <summary>
    /// Array value.
    /// </summary>
    [JsonPropertyName("arrayValue")]
    public OtlpArrayValueJson? ArrayValue { get; set; }
 
    /// <summary>
    /// Key-value list value.
    /// </summary>
    [JsonPropertyName("kvlistValue")]
    public OtlpKeyValueListJson? KvlistValue { get; set; }
 
    /// <summary>
    /// Bytes value. Serialized as base64 per protojson spec.
    /// </summary>
    [JsonPropertyName("bytesValue")]
    public string? BytesValue { get; set; }
}
 
/// <summary>
/// Represents an array of AnyValue messages.
/// </summary>
internal sealed class OtlpArrayValueJson
{
    /// <summary>
    /// Array of values.
    /// </summary>
    [JsonPropertyName("values")]
    public OtlpAnyValueJson[]? Values { get; set; }
}
 
/// <summary>
/// Represents a list of KeyValue messages.
/// </summary>
internal sealed class OtlpKeyValueListJson
{
    /// <summary>
    /// Collection of key/value pairs.
    /// </summary>
    [JsonPropertyName("values")]
    public OtlpKeyValueJson[]? Values { get; set; }
}
 
/// <summary>
/// Represents a key-value pair used to store attributes.
/// </summary>
internal sealed class OtlpKeyValueJson
{
    /// <summary>
    /// The key name of the pair.
    /// </summary>
    [JsonPropertyName("key")]
    public string? Key { get; set; }
 
    /// <summary>
    /// The value of the pair.
    /// </summary>
    [JsonPropertyName("value")]
    public OtlpAnyValueJson? Value { get; set; }
}
 
/// <summary>
/// Represents instrumentation scope information.
/// </summary>
internal sealed class OtlpInstrumentationScopeJson
{
    /// <summary>
    /// A name denoting the instrumentation scope.
    /// </summary>
    [JsonPropertyName("name")]
    public string? Name { get; set; }
 
    /// <summary>
    /// The version of the instrumentation scope.
    /// </summary>
    [JsonPropertyName("version")]
    public string? Version { get; set; }
 
    /// <summary>
    /// Additional attributes that describe the scope.
    /// </summary>
    [JsonPropertyName("attributes")]
    public OtlpKeyValueJson[]? Attributes { get; set; }
 
    /// <summary>
    /// The number of attributes that were discarded.
    /// </summary>
    [JsonPropertyName("droppedAttributesCount")]
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
    public uint DroppedAttributesCount { get; set; }
}
 
/// <summary>
/// Represents a reference to an entity.
/// </summary>
internal sealed class OtlpEntityRefJson
{
    /// <summary>
    /// The Schema URL, if known.
    /// </summary>
    [JsonPropertyName("schemaUrl")]
    public string? SchemaUrl { get; set; }
 
    /// <summary>
    /// Defines the type of the entity.
    /// </summary>
    [JsonPropertyName("type")]
    public string? Type { get; set; }
 
    /// <summary>
    /// Attribute keys that identify the entity.
    /// </summary>
    [JsonPropertyName("idKeys")]
    public string[]? IdKeys { get; set; }
 
    /// <summary>
    /// Descriptive (non-identifying) attribute keys of the entity.
    /// </summary>
    [JsonPropertyName("descriptionKeys")]
    public string[]? DescriptionKeys { get; set; }
}