[Tracer] Add Component Tag to Quartz Instrumentation#8315
Conversation
Snapshots difference summaryThe following differences have been observed in committed snapshots. It is meant to help the reviewer. 7 occurrences of : + component: quartz,
|
BenchmarksBenchmark execution time: 2026-03-16 22:16:57 Comparing candidate commit 5d2b243 in PR branch Found 10 performance improvements and 8 performance regressions! Performance is the same for 159 metrics, 15 unstable metrics. scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleSimpleBody net6.0
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.ObjectExtractorSimpleBody net6.0
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.ObjectExtractorSimpleBody netcoreapp3.1
scenario:Benchmarks.Trace.Asm.AppSecEncoderBenchmark.EncodeArgs net472
scenario:Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces net472
scenario:Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces net6.0
scenario:Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces netcoreapp3.1
scenario:Benchmarks.Trace.ILoggerBenchmark.EnrichedLog netcoreapp3.1
scenario:Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark netcoreapp3.1
scenario:Benchmarks.Trace.Log4netBenchmark.EnrichedLog netcoreapp3.1
scenario:Benchmarks.Trace.RedisBenchmark.SendReceive netcoreapp3.1
scenario:Benchmarks.Trace.SpanBenchmark.StartFinishScope netcoreapp3.1
scenario:Benchmarks.Trace.SpanBenchmark.StartFinishTwoScopes net6.0
scenario:Benchmarks.Trace.SpanBenchmark.StartFinishTwoScopes netcoreapp3.1
scenario:Benchmarks.Trace.TraceAnnotationsBenchmark.RunOnMethodBegin net6.0
|
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8315) and master. ✅ No regressions detected - check the details below Full Metrics ComparisonFakeDbCommand
HttpMessageHandler
Comparison explanationExecution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:
Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard. Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph). Duration chartsFakeDbCommand (.NET Framework 4.8)gantt
title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8315) - mean (77ms) : 74, 80
master - mean (75ms) : 72, 78
section Bailout
This PR (8315) - mean (81ms) : 78, 84
master - mean (79ms) : 77, 81
section CallTarget+Inlining+NGEN
This PR (8315) - mean (1,115ms) : 1070, 1159
master - mean (1,099ms) : 1063, 1135
FakeDbCommand (.NET Core 3.1)gantt
title Execution time (ms) FakeDbCommand (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8315) - mean (120ms) : 117, 124
master - mean (119ms) : 115, 122
section Bailout
This PR (8315) - mean (123ms) : 119, 127
master - mean (120ms) : 117, 123
section CallTarget+Inlining+NGEN
This PR (8315) - mean (775ms) : 753, 796
master - mean (769ms) : 746, 791
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8315) - mean (107ms) : 104, 110
master - mean (105ms) : 102, 107
section Bailout
This PR (8315) - mean (108ms) : 104, 112
master - mean (105ms) : 103, 108
section CallTarget+Inlining+NGEN
This PR (8315) - mean (760ms) : 717, 803
master - mean (750ms) : 703, 796
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8315) - mean (106ms) : 103, 109
master - mean (104ms) : 101, 108
section Bailout
This PR (8315) - mean (107ms) : 104, 109
master - mean (105ms) : 103, 108
section CallTarget+Inlining+NGEN
This PR (8315) - mean (700ms) : 676, 725
master - mean (694ms) : 670, 718
HttpMessageHandler (.NET Framework 4.8)gantt
title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8315) - mean (195ms) : 190, 201
master - mean (194ms) : 189, 199
section Bailout
This PR (8315) - mean (199ms) : 194, 204
master - mean (198ms) : 195, 202
section CallTarget+Inlining+NGEN
This PR (8315) - mean (1,170ms) : 1095, 1246
master - mean (1,156ms) : 1097, 1214
HttpMessageHandler (.NET Core 3.1)gantt
title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8315) - mean (281ms) : 273, 288
master - mean (278ms) : 272, 285
section Bailout
This PR (8315) - mean (280ms) : 274, 287
master - mean (278ms) : 273, 283
section CallTarget+Inlining+NGEN
This PR (8315) - mean (913ms) : 881, 945
master - mean (901ms) : 872, 931
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8315) - mean (277ms) : 268, 286
master - mean (271ms) : 265, 278
section Bailout
This PR (8315) - mean (277ms) : 272, 282
master - mean (271ms) : 266, 276
section CallTarget+Inlining+NGEN
This PR (8315) - mean (951ms) : 919, 983
master - mean (942ms) : 918, 965
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8315) - mean (284ms) : 271, 297
master - mean (269ms) : 264, 274
section Bailout
This PR (8315) - mean (275ms) : 266, 283
master - mean (270ms) : 264, 275
section CallTarget+Inlining+NGEN
This PR (8315) - mean (851ms) : 815, 888
master - mean (839ms) : 816, 862
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Summary of changes
Add
component: quartztag to all Quartz.NET spans.Reason for change
The Quartz integration was missing the
componenttag (Tags.InstrumentationName) that other integrations (RabbitMQ, Kafka, MSMQ, etc.) set on their spans. This tag allowsconsumers to identify which library produced a span.
Implementation details
There are two code paths that produce Quartz spans:
QuartzActivityHandler, which callsQuartzCommon.EnhanceActivityMetadata. The tag is added there.QuartzDiagnosticObserver(if branch,IActivity5), which also callsEnhanceActivityMetadata. Covered by the same change.QuartzDiagnosticObserver(else branch,IActivity), which cannot callEnhanceActivityMetadata. The tag is added manually in theelse branch.
Test coverage
Snapshot files updated to include
component: quartzin theTagsblock for all spans:QuartzTestsV3.verified.txt(v3 on .NET 5+)QuartzTestsV4.verified.txt(v4)QuartzTestsV3NETCOREAPP3X.verified.txt(v3 on .NET Core 3.x)SpanMetadataV0RulesandSpanMetadataV1Rulesalready requiredcomponent: quartzfor Quartz spans, so this change brings the implementation in line with the existing validationrules.
Other details
No breaking changes. The
componenttag is additive.