File: Model\TelemetryExportHelpers.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 Aspire.Dashboard.Extensions;
using Aspire.Dashboard.Otlp.Model;
using Aspire.Dashboard.Otlp.Storage;
using Microsoft.JSInterop;
 
namespace Aspire.Dashboard.Model;
 
/// <summary>
/// Helper methods for exporting telemetry data.
/// </summary>
internal static class TelemetryExportHelpers
{
    /// <summary>
    /// Downloads a span as a JSON file, including associated log entries.
    /// </summary>
    /// <param name="js">The JS runtime.</param>
    /// <param name="span">The span to download.</param>
    /// <param name="telemetryRepository">The telemetry repository to fetch logs from.</param>
    public static Task DownloadSpanAsJsonAsync(IJSRuntime js, OtlpSpan span, TelemetryRepository telemetryRepository)
    {
        var logs = telemetryRepository.GetLogsForSpan(span.TraceId, span.SpanId);
        var spanJson = TelemetryExportService.ConvertSpanToJson(span, logs);
        var fileName = $"span-{OtlpHelpers.ToShortenedId(span.SpanId)}.json";
        return js.DownloadFileAsync(fileName, spanJson);
    }
 
    /// <summary>
    /// Downloads a log entry as a JSON file.
    /// </summary>
    /// <param name="js">The JS runtime.</param>
    /// <param name="logEntry">The log entry to download.</param>
    public static Task DownloadLogEntryAsJsonAsync(IJSRuntime js, OtlpLogEntry logEntry)
    {
        var logJson = TelemetryExportService.ConvertLogEntryToJson(logEntry);
        var fileName = $"log-{logEntry.InternalId}.json";
        return js.DownloadFileAsync(fileName, logJson);
    }
 
    /// <summary>
    /// Downloads all spans in a trace as a JSON file, including associated log entries.
    /// </summary>
    /// <param name="js">The JS runtime.</param>
    /// <param name="trace">The trace to download.</param>
    /// <param name="telemetryRepository">The telemetry repository to fetch logs from.</param>
    public static Task DownloadTraceAsJsonAsync(IJSRuntime js, OtlpTrace trace, TelemetryRepository telemetryRepository)
    {
        var logs = telemetryRepository.GetLogsForTrace(trace.TraceId);
        var traceJson = TelemetryExportService.ConvertTraceToJson(trace, logs);
        var fileName = $"trace-{OtlpHelpers.ToShortenedId(trace.TraceId)}.json";
        return js.DownloadFileAsync(fileName, traceJson);
    }
}