4 instantiations of OtlpSpan
Aspire.Dashboard (2)
Otlp\Model\OtlpSpan.cs (1)
83return new OtlpSpan(item.Source, trace, item.Scope)
Otlp\Storage\TelemetryRepository.cs (1)
1258var newSpan = new OtlpSpan(resourceView, trace, scope)
Aspire.Dashboard.Components.Tests (1)
tests\Shared\Telemetry\TelemetryTestHelpers.cs (1)
311return new OtlpSpan(resource.GetView([]), trace, scope)
Aspire.Dashboard.Tests (1)
tests\Shared\Telemetry\TelemetryTestHelpers.cs (1)
311return new OtlpSpan(resource.GetView([]), trace, scope)
175 references to OtlpSpan
Aspire.Dashboard (126)
Components\Controls\Chart\ChartBase.cs (6)
63private Dictionary<SpanKey, OtlpSpan> _currentCache = new Dictionary<SpanKey, OtlpSpan>(); 64private Dictionary<SpanKey, OtlpSpan> _newCache = new Dictionary<SpanKey, OtlpSpan>(); 313if (!_currentCache.TryGetValue(key, out var span)) 512_newCache = new Dictionary<SpanKey, OtlpSpan>();
Components\Controls\Chart\ChartExemplar.cs (1)
16public required OtlpSpan? Span { get; init; }
Components\Controls\PropertyValues\SpanKindValue.razor.cs (1)
22public required OtlpSpan Span { get; set; }
Components\Controls\PropertyValues\SpanStatusValue.razor.cs (1)
18public required OtlpSpan Span { get; set; }
Components\Controls\SpanDetails.razor.cs (1)
31public EventCallback<OtlpSpan> LaunchGenAICallback { get; set; }
Components\Dialogs\GenAIVisualizerDialog.razor.cs (8)
33private List<OtlpSpan> _contextSpans = default!; 110var span = newContextSpans.Find(s => s.SpanId == Content.Span.SpanId)!; 191if (TryGetContextSpanByIndex(_currentSpanContextIndex - 1, out var span)) 199if (TryGetContextSpanByIndex(_currentSpanContextIndex + 1, out var span)) 205private bool TryGetContextSpanByIndex(int index, [NotNullWhen(true)] out OtlpSpan? span) 211private bool TryUpdateViewedGenAISpan(OtlpSpan newSpan) 336IStringLocalizer<Resources.Dialogs> dialogsLoc, OtlpSpan span, long? selectedLogEntryId, 337TelemetryRepository telemetryRepository, ITelemetryErrorRecorder errorRecorder, List<OtlpResource> resources, Func<List<OtlpSpan>> getContextGenAISpans)
Components\Pages\StructuredLogs.razor.cs (3)
573var span = TelemetryRepository.GetSpan(logEntry.TraceId, logEntry.SpanId)!; 609var genAISpans = new List<OtlpSpan>(); 612var span = TelemetryRepository.GetSpan(l.TraceId, l.SpanId);
Components\Pages\TraceDetail.razor.cs (4)
223var headerSpan = _trace.RootOrFirstSpan; 326foreach (var span in _trace.Spans) 550private async Task OnGenAIClickedAsync(OtlpSpan span) 563var genAISpans = new List<OtlpSpan>();
Components_Pages_TraceDetail_razor.g.cs (2)
2836), global::Microsoft.AspNetCore.Components.CompilerServices.RuntimeHelpers.TypeCheck<global::Microsoft.AspNetCore.Components.EventCallback<global::Aspire.Dashboard.Otlp.Model.OtlpSpan>>(global::Microsoft.AspNetCore.Components.EventCallback.Factory.Create<global::Aspire.Dashboard.Otlp.Model.OtlpSpan>(this,
Model\Assistant\AIHelpers.cs (2)
141private static string? GetDestination(OtlpSpan s, IEnumerable<IOutgoingPeerResolver> outgoingPeerResolvers) 146private static string? ResolveUninstrumentedPeerName(OtlpSpan span, IEnumerable<IOutgoingPeerResolver> outgoingPeerResolvers)
Model\Assistant\Markdown\AspireEnrichmentParser.cs (1)
202var span = trace.Spans.FirstOrDefault(s => OtlpHelpers.MatchTelemetryId(text, s.SpanId));
Model\Assistant\Prompts\IceBreakersBuilder.cs (1)
305public void Span(BuildIceBreakersContext context, OtlpSpan span)
Model\Assistant\Prompts\KnownChatMessages.cs (1)
306public static ChatMessage CreateAnalyzeSpanMessage(OtlpSpan span, List<OtlpLogEntry> traceLogEntries, IEnumerable<IOutgoingPeerResolver> outgoingPeerResolvers, DashboardOptions options)
Model\Assistant\Prompts\PromptContextsBuilder.cs (1)
87public static Task AnalyzeSpan(InitializePromptContext context, string displayText, OtlpSpan span)
Model\GenAI\GenAIItemViewModel.cs (1)
27public required OtlpSpan Parent { get; init; }
Model\GenAI\GenAIVisualizerDialogViewModel.cs (4)
28public required OtlpSpan Span { get; init; } 32public required Func<List<OtlpSpan>> GetContextGenAISpans { get; init; } 57Func<List<OtlpSpan>> getContextGenAISpans) 609private static List<OtlpLogEntry> GetSpanLogEntries(TelemetryRepository telemetryRepository, OtlpSpan span)
Model\Otlp\SpanWaterfallViewModel.cs (5)
14public required OtlpSpan Span { get; init; } 123public static string GetTitle(OtlpSpan span, List<OtlpResource> allResources) 134TraceHelpers.VisitSpans(trace, (OtlpSpan span, SpanWaterfallViewModelState s) => 147static SpanWaterfallViewModel CreateViewModel(OtlpSpan span, int depth, bool hidden, TraceDetailState state, List<OtlpLogEntry>? spanLogs, ref int currentSpanLogIndex) 216private static string? ResolveUninstrumentedPeerName(OtlpSpan span, IOutgoingPeerResolver[] outgoingPeerResolvers, List<OtlpResource> allResources)
Model\Otlp\TelemetryFilter.cs (3)
20public abstract bool Apply(OtlpSpan span); 144public override bool Apply(OtlpSpan span) 146var fieldValue = OtlpSpan.GetFieldValue(span, Field);
Model\SpanDetailsViewModel.cs (3)
15public required OtlpSpan Span { get; init; } 22public static SpanDetailsViewModel Create(OtlpSpan span, TelemetryRepository telemetryRepository, List<OtlpResource> resources) 68var linkSpan = trace?.Spans.FirstOrDefault(s => s.SpanId == spanId);
Model\SpanLinkViewModel.cs (1)
13public required OtlpSpan? Span { get; init; }
Model\SpanType.cs (3)
94public override bool Apply(OtlpSpan span) 127public override bool Apply(OtlpSpan span) 160public override bool Apply(OtlpSpan span)
Model\StructuredLogsViewModel.cs (1)
49var span = _telemetryRepository.GetSpan(spanKey.TraceId, spanKey.SpanId);
Model\TraceHelpers.cs (17)
16public static void VisitSpans<TState>(OtlpTrace trace, Func<OtlpSpan, TState, TState> spanAction, TState state) 19var spanLookup = new Dictionary<OtlpSpan, List<OtlpSpan>>(); 20var unrootedSpans = new List<OtlpSpan>(); 21foreach (var item in trace.Spans) 23if (string.IsNullOrEmpty(item.ParentSpanId) || !trace.Spans.TryGetValue(item.ParentSpanId, out var parentSpan)) 35var orderByFunc = static (OtlpSpan s) => s.StartTime; 37foreach (var unrootedSpan in unrootedSpans.OrderBy(orderByFunc)) 44static void Visit(Dictionary<OtlpSpan, List<OtlpSpan>> spanLookup, OtlpSpan span, Func<OtlpSpan, TState, TState> spanAction, TState state, Func<OtlpSpan, DateTime> orderByFunc) 48foreach (var childSpan in childSpans.OrderBy(orderByFunc)) 69VisitSpans(trace, (OtlpSpan span, OrderedResourcesState state) => 89private static void ProcessSpanResource(OtlpSpan span, OtlpResource resource, Dictionary<OtlpResource, OrderedResource> resourceFirstTimes, DateTime currentMinDate) 128public static Icon? TryGetSpanIcon(OtlpSpan span, IconVariant iconVariant)
Model\TraceLinkHelpers.cs (1)
20Func<string, string, OtlpSpan?> getSpan,
Otlp\Model\OtlpHelpers.cs (5)
375var address = GetValue(values, OtlpSpan.PeerServiceAttributeKey); 382if (GetValue(values, OtlpSpan.ServerAddressAttributeKey) is { } server) 384if (GetValue(values, OtlpSpan.ServerPortAttributeKey) is { } serverPort) 392if (GetValue(values, OtlpSpan.NetPeerNameAttributeKey) is { } peer) 394if (GetValue(values, OtlpSpan.NetPeerPortAttributeKey) is { } peerPort)
Otlp\Model\OtlpSpan.cs (9)
48public IEnumerable<OtlpSpan> GetChildSpans() => GetChildSpans(this, Trace.Spans); 49public static IEnumerable<OtlpSpan> GetChildSpans(OtlpSpan parentSpan, OtlpSpanCollection spans) => spans.Where(s => s.ParentSpanId == parentSpan.SpanId); 59public OtlpSpan? GetParentSpan() 66if (Trace.Spans.TryGetValue(ParentSpanId, out var span)) 81public static OtlpSpan Clone(OtlpSpan item, OtlpTrace trace) 169static string BuildDisplaySummary(OtlpSpan span) 228public static FieldValues GetFieldValue(OtlpSpan span, string field)
Otlp\Model\OtlpSpanCollection.cs (4)
8public sealed class OtlpSpanCollection : KeyedCollection<string, OtlpSpan> 17protected override string GetKeyForItem(OtlpSpan item) 22public new List<OtlpSpan>.Enumerator GetEnumerator() 25return ((List<OtlpSpan>)this.Items).GetEnumerator();
Otlp\Model\OtlpSpanEvent.cs (1)
16public class OtlpSpanEvent(OtlpSpan span) : IPropertyGridItem
Otlp\Model\OtlpTrace.cs (19)
11private OtlpSpan? _rootSpan; 18public OtlpSpan FirstSpan => Spans[0]; // There should always be at least one span in a trace. 20public OtlpSpan? RootSpan => _rootSpan; 21public OtlpSpan RootOrFirstSpan => RootSpan ?? FirstSpan; 26public int CalculateDepth(OtlpSpan span) 29var currentSpan = span; 40public void AddSpan(OtlpSpan span, bool skipLastUpdatedDate = false) 72foreach (var existingSpan in Spans) 95static string BuildFullName(OtlpSpan existingSpan) 101private static bool HasCircularReference(OtlpSpan span) 111var currentSpan = span; 132var span = Spans[i]; 153foreach (var item in trace.Spans) 155newTrace.AddSpan(OtlpSpan.Clone(item, newTrace), skipLastUpdatedDate: true); 165foreach (var span in Spans) 180public void SetSpanUninstrumentedPeer(OtlpSpan span, OtlpResource? resource) 191private sealed class SpanStartDateComparer : IComparer<OtlpSpan> 195public int Compare(OtlpSpan? x, OtlpSpan? y)
Otlp\Storage\TelemetryRepository.cs (16)
89foreach (var span in trace.Spans) 554foreach (var span in t.Spans) 614foreach (var span in t.Spans) 737foreach (var span in trace.Spans) 739var values = OtlpSpan.GetFieldValue(span, attributeName); 849private OtlpSpan? GetSpanAndCloneUnsynchronized(string traceId, string spanId) 857foreach (var span in trace.Spans) 869public OtlpSpan? GetSpan(string traceId, string spanId) 999var newSpan = CreateSpan(resourceView, span, trace, scope, _otlpContext); 1017var linkedSpan = GetSpanAndCloneUnsynchronized(link.TraceId, link.SpanId); 1127public OtlpResource? GetPeerResource(OtlpSpan span) 1142foreach (var span in trace.Spans) 1168private static ResourceViewModel? ResolveUninstrumentedPeerResource(OtlpSpan span, IEnumerable<IOutgoingPeerResolver> outgoingPeerResolvers) 1208foreach (var span in trace.Spans) 1234private static OtlpSpan CreateSpan(OtlpResourceView resourceView, Span span, OtlpTrace trace, OtlpScope scope, OtlpContext context) 1258var newSpan = new OtlpSpan(resourceView, trace, scope)
Aspire.Dashboard.Components.Tests (5)
Controls\GenAIVisualizerDialogTests.cs (4)
99var span = CreateOtlpSpan(resource, trace, scope, spanId: "abc", parentSpanId: null, startDate: s_testTime, attributes: [ 163var span = trace.Spans[0]; 249var span = trace.Spans[0]; 252List<OtlpSpan> GetContextGenAISpans()
tests\Shared\Telemetry\TelemetryTestHelpers.cs (1)
307public static OtlpSpan CreateOtlpSpan(OtlpResource resource, OtlpTrace trace, OtlpScope scope, string spanId, string? parentSpanId, DateTime startDate,
Aspire.Dashboard.Tests (44)
Model\GenAIVisualizerDialogViewModelTests.cs (22)
50var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 100var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 184var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 275var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 344var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 422var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 471var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 551var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 667var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 747var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 831var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 884var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 960var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 1043var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 1150var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 1221var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 1263var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 1312var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 1392var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 1475var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 1557var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!; 1645var span = repository.GetSpan(GetHexId("1"), GetHexId("1-1"))!;
Model\ResourceMenuItemsTests.cs (2)
79TelemetryTestHelpers.CreateSpan(traceId: "1", spanId: "1-1", startTime: s_testTime.AddMinutes(1), endTime: s_testTime.AddMinutes(10), attributes: [KeyValuePair.Create(OtlpSpan.PeerServiceAttributeKey, "value-1")], kind: Span.Types.SpanKind.Client), 80TelemetryTestHelpers.CreateSpan(traceId: "1", spanId: "1-2", startTime: s_testTime.AddMinutes(5), endTime: s_testTime.AddMinutes(10), parentSpanId: "1-1", attributes: [KeyValuePair.Create(OtlpSpan.PeerServiceAttributeKey, "value-2")], kind: Span.Types.SpanKind.Client)
Model\SpanWaterfallViewModelTests.cs (6)
128var span = TelemetryTestHelpers.CreateOtlpSpan( 188var span = TelemetryTestHelpers.CreateOtlpSpan( 232var parentSpan = TelemetryTestHelpers.CreateOtlpSpan(app1, trace, scope, spanId: "parent", parentSpanId: null, startDate: new DateTime(2001, 1, 1, 1, 1, 2, DateTimeKind.Utc)); 233var childSpan = TelemetryTestHelpers.CreateOtlpSpan(app1, trace, scope, spanId: "child", parentSpanId: "parent", startDate: new DateTime(2001, 1, 1, 1, 1, 3, DateTimeKind.Utc)); 254var parentSpan = TelemetryTestHelpers.CreateOtlpSpan(app1, trace, scope, spanId: "parent", parentSpanId: null, startDate: new DateTime(2001, 1, 1, 1, 1, 2, DateTimeKind.Utc)); 255var childSpan = TelemetryTestHelpers.CreateOtlpSpan(app1, trace, scope, spanId: "child", parentSpanId: "parent", startDate: new DateTime(2001, 1, 1, 1, 1, 3, DateTimeKind.Utc));
TelemetryRepositoryTests\OtlpSpanTests.cs (6)
25var span = TelemetryTestHelpers.CreateOtlpSpan(app1, trace, scope, spanId: "abc", parentSpanId: null, startDate: s_testTime, 76var span = TelemetryTestHelpers.CreateOtlpSpan(app1, trace, scope, spanId: "abc", parentSpanId: null, startDate: s_testTime); 95var span = TelemetryTestHelpers.CreateOtlpSpan(app1, trace, scope, spanId: "abc", parentSpanId: null, startDate: s_testTime, 115var parentSpan = TelemetryTestHelpers.CreateOtlpSpan(app1, trace, scope, spanId: "abc", parentSpanId: null, startDate: s_testTime, 117var childSpan = TelemetryTestHelpers.CreateOtlpSpan(app2, trace, scope, spanId: "abc-2", parentSpanId: "abc", startDate: s_testTime, 178var span = TelemetryTestHelpers.CreateOtlpSpan(app, trace, scope, spanId: "abc", parentSpanId: null, startDate: s_testTime,
TelemetryRepositoryTests\TraceTests.cs (7)
1257Spans = { CreateSpan(traceId: "1", spanId: "1-1", startTime: s_testTime.AddMinutes(1), endTime: s_testTime.AddMinutes(10), attributes: [KeyValuePair.Create("key1", "value1"), KeyValuePair.Create(OtlpSpan.PeerServiceAttributeKey, "value-1")], kind: Span.Types.SpanKind.Client) } 1952CreateSpan(traceId: "1", spanId: "1-1", startTime: s_testTime.AddMinutes(1), endTime: s_testTime.AddMinutes(10), attributes: [KeyValuePair.Create(OtlpSpan.PeerServiceAttributeKey, "value-1")], kind: Span.Types.SpanKind.Client), 1953CreateSpan(traceId: "1", spanId: "1-2", startTime: s_testTime.AddMinutes(5), endTime: s_testTime.AddMinutes(10), parentSpanId: "1-1", attributes: [KeyValuePair.Create(OtlpSpan.PeerServiceAttributeKey, "value-2")], kind: Span.Types.SpanKind.Client) 2039CreateSpan(traceId: "1", spanId: "1-1", startTime: s_testTime.AddMinutes(1), endTime: s_testTime.AddMinutes(10), attributes: [KeyValuePair.Create(OtlpSpan.PeerServiceAttributeKey, "value-1")], kind: Span.Types.SpanKind.Client), 2040CreateSpan(traceId: "1", spanId: "1-2", startTime: s_testTime.AddMinutes(5), endTime: s_testTime.AddMinutes(10), parentSpanId: "1-1", attributes: [KeyValuePair.Create(OtlpSpan.PeerServiceAttributeKey, "value-2")], kind: Span.Types.SpanKind.Client) 2145CreateSpan(traceId: "1", spanId: "1-1", startTime: s_testTime.AddMinutes(1), endTime: s_testTime.AddMinutes(10), attributes: [KeyValuePair.Create(OtlpSpan.PeerServiceAttributeKey, "value-1")], kind: Span.Types.SpanKind.Client), 2146CreateSpan(traceId: "1", spanId: "1-2", startTime: s_testTime.AddMinutes(5), endTime: s_testTime.AddMinutes(10), parentSpanId: "1-1", attributes: [KeyValuePair.Create(OtlpSpan.PeerServiceAttributeKey, "value-2")], kind: Span.Types.SpanKind.Client)
tests\Shared\Telemetry\TelemetryTestHelpers.cs (1)
307public static OtlpSpan CreateOtlpSpan(OtlpResource resource, OtlpTrace trace, OtlpScope scope, string spanId, string? parentSpanId, DateTime startDate,