Skip to content

Implement app-extended-heartbeat telemetry event#8227

Merged
andrewlock merged 11 commits into
masterfrom
andrew/telemetry/extended-heartbeat-v2
Mar 4, 2026
Merged

Implement app-extended-heartbeat telemetry event#8227
andrewlock merged 11 commits into
masterfrom
andrew/telemetry/extended-heartbeat-v2

Conversation

@andrewlock

@andrewlock andrewlock commented Feb 20, 2026

Copy link
Copy Markdown
Member

Summary of changes

Implements the telemetry v2 extended heartbeat spec

Reason for change

We've been asked to implement the extended heartbeat as the backend needs it for data consistency reasons.

Implementation details

Today, after reporting config keys to the telemetry backend we drop them. After this PR, we keep each poll's List<T> in a List<List<T>>, and use that to send all the data in the extended heartbeat. We already keep the product and dependency data by design, so it's only configs that needed to change.

In addition, having the configs available means that we can now also include this in the telemetry flare data, which should be very useful for support cases.

Unfortunately, the fact that the tracer flare can happen concurrently with the extended heartbeat complicates things slightly, and means we have to add some synchronization around the GetData()/GetFullData() calls. I don't expect any contention there in practice though, so it shouldn't be a big issue.

Test coverage

Existing tests pass, and added some additional unit tests for both the tracer flare and the extended heartbeat. System tests will also be added, which will use the configuration key DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL to control the interval.

Other details

Initially had 🤖 look at it, but I didn't like what it did at all, so went rogue and hand coded instead (ok it wrote one of the tests)

@pr-commenter

pr-commenter Bot commented Feb 20, 2026

Copy link
Copy Markdown

Benchmarks

Benchmark execution time: 2026-03-04 11:15:09

Comparing candidate commit a504db6 in PR branch andrew/telemetry/extended-heartbeat-v2 with baseline commit 12c3626 in branch master.

Found 7 performance improvements and 13 performance regressions! Performance is the same for 159 metrics, 13 unstable metrics.

scenario:Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces net6.0

  • 🟩 execution_time [-101.851ms; -101.672ms] or [-50.104%; -50.016%]

scenario:Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces netcoreapp3.1

  • 🟩 execution_time [-89.589ms; -87.911ms] or [-44.451%; -43.619%]

scenario:Benchmarks.Trace.Asm.AppSecEncoderBenchmark.EncodeArgs netcoreapp3.1

  • 🟥 execution_time [+10.256ms; +13.375ms] or [+5.497%; +7.168%]

scenario:Benchmarks.Trace.Asm.AppSecEncoderBenchmark.EncodeLegacyArgs net6.0

  • 🟥 execution_time [+29.286ms; +29.784ms] or [+16.852%; +17.138%]

scenario:Benchmarks.Trace.Asm.AppSecEncoderBenchmark.EncodeLegacyArgs netcoreapp3.1

  • 🟥 execution_time [+16.453ms; +17.748ms] or [+8.972%; +9.677%]

scenario:Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces net472

  • 🟥 execution_time [+11.863ms; +18.276ms] or [+6.247%; +9.624%]
  • 🟩 throughput [+64.742op/s; +98.340op/s] or [+6.399%; +9.720%]

scenario:Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces netcoreapp3.1

  • 🟥 execution_time [+10.874ms; +14.608ms] or [+6.701%; +9.003%]
  • 🟥 throughput [-216.374op/s; -183.342op/s] or [-14.622%; -12.390%]

scenario:Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool net6.0

  • 🟥 execution_time [+100.385µs; +103.669µs] or [+9.614%; +9.929%]
  • 🟥 throughput [-86.703op/s; -83.813op/s] or [-9.053%; -8.751%]

scenario:Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearch net472

  • 🟥 throughput [-19261.483op/s; -16538.573op/s] or [-5.960%; -5.118%]

scenario:Benchmarks.Trace.GraphQLBenchmark.ExecuteAsync net6.0

  • 🟥 throughput [-42537.989op/s; -31222.100op/s] or [-7.969%; -5.849%]

scenario:Benchmarks.Trace.ILoggerBenchmark.EnrichedLog net6.0

  • 🟩 execution_time [-14.348ms; -11.093ms] or [-6.731%; -5.205%]

scenario:Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark net6.0

  • 🟩 execution_time [-13.733µs; -8.806µs] or [-25.389%; -16.281%]
  • 🟩 throughput [+3766.471op/s; +5486.388op/s] or [+20.013%; +29.152%]

scenario:Benchmarks.Trace.Log4netBenchmark.EnrichedLog net472

  • 🟥 execution_time [+11.405ms; +11.561ms] or [+6.066%; +6.149%]

scenario:Benchmarks.Trace.RedisBenchmark.SendReceive net6.0

  • 🟥 execution_time [+12.466ms; +16.461ms] or [+6.283%; +8.297%]

scenario:Benchmarks.Trace.SpanBenchmark.StartFinishSpan netcoreapp3.1

  • 🟥 execution_time [+14.941ms; +20.631ms] or [+7.621%; +10.523%]

scenario:Benchmarks.Trace.SpanBenchmark.StartFinishTwoScopes netcoreapp3.1

  • 🟩 execution_time [-16.128ms; -10.906ms] or [-7.584%; -5.128%]

@dd-trace-dotnet-ci-bot

dd-trace-dotnet-ci-bot Bot commented Feb 20, 2026

Copy link
Copy Markdown

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (8227) and master.

✅ No regressions detected - check the details below

Full Metrics Comparison

FakeDbCommand

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration69.23 ± (69.26 - 69.50) ms69.12 ± (69.13 - 69.36) ms-0.1%
.NET Framework 4.8 - Bailout
duration73.35 ± (73.16 - 73.41) ms73.37 ± (73.39 - 73.71) ms+0.0%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1035.89 ± (1041.20 - 1049.81) ms1041.43 ± (1042.64 - 1049.63) ms+0.5%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms21.86 ± (21.84 - 21.89) ms21.92 ± (21.88 - 21.95) ms+0.2%✅⬆️
process.time_to_main_ms80.29 ± (80.10 - 80.48) ms80.01 ± (79.86 - 80.16) ms-0.4%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.92 ± (10.92 - 10.93) MB10.94 ± (10.93 - 10.94) MB+0.1%✅⬆️
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms21.79 ± (21.76 - 21.81) ms21.78 ± (21.75 - 21.81) ms-0.0%
process.time_to_main_ms81.17 ± (81.04 - 81.30) ms81.39 ± (81.23 - 81.55) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.96 ± (10.95 - 10.96) MB10.97 ± (10.96 - 10.97) MB+0.1%✅⬆️
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms255.62 ± (253.50 - 257.74) ms256.03 ± (253.76 - 258.30) ms+0.2%✅⬆️
process.time_to_main_ms468.80 ± (468.29 - 469.32) ms469.84 ± (469.36 - 470.33) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed47.69 ± (47.67 - 47.72) MB47.77 ± (47.75 - 47.80) MB+0.2%✅⬆️
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.1%✅⬆️
.NET 6 - Baseline
process.internal_duration_ms20.63 ± (20.60 - 20.65) ms20.57 ± (20.54 - 20.60) ms-0.3%
process.time_to_main_ms69.40 ± (69.27 - 69.54) ms69.24 ± (69.12 - 69.36) ms-0.2%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.63 ± (10.62 - 10.63) MB10.65 ± (10.65 - 10.65) MB+0.2%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms20.66 ± (20.63 - 20.69) ms20.61 ± (20.59 - 20.64) ms-0.2%
process.time_to_main_ms70.60 ± (70.48 - 70.72) ms70.67 ± (70.56 - 70.78) ms+0.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.67 ± (10.67 - 10.68) MB10.75 ± (10.74 - 10.75) MB+0.7%✅⬆️
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms253.67 ± (252.77 - 254.57) ms252.61 ± (251.66 - 253.57) ms-0.4%
process.time_to_main_ms450.03 ± (449.52 - 450.55) ms450.65 ± (450.19 - 451.10) ms+0.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed48.43 ± (48.41 - 48.46) MB48.52 ± (48.49 - 48.55) MB+0.2%✅⬆️
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.0%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms18.90 ± (18.87 - 18.93) ms18.96 ± (18.93 - 18.99) ms+0.3%✅⬆️
process.time_to_main_ms68.36 ± (68.24 - 68.49) ms68.63 ± (68.50 - 68.75) ms+0.4%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.67 ± (7.66 - 7.67) MB7.73 ± (7.72 - 7.74) MB+0.8%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms18.95 ± (18.92 - 18.97) ms19.00 ± (18.96 - 19.03) ms+0.3%✅⬆️
process.time_to_main_ms70.02 ± (69.89 - 70.15) ms69.78 ± (69.66 - 69.91) ms-0.3%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.73 ± (7.72 - 7.74) MB7.73 ± (7.72 - 7.74) MB-0.0%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms180.44 ± (179.43 - 181.45) ms180.58 ± (179.91 - 181.24) ms+0.1%✅⬆️
process.time_to_main_ms429.81 ± (429.21 - 430.41) ms432.40 ± (431.89 - 432.91) ms+0.6%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed36.01 ± (35.98 - 36.05) MB36.05 ± (36.03 - 36.07) MB+0.1%✅⬆️
runtime.dotnet.threads.count27 ± (27 - 27)27 ± (26 - 27)-0.6%

HttpMessageHandler

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration195.24 ± (194.92 - 195.89) ms194.46 ± (194.29 - 195.20) ms-0.4%
.NET Framework 4.8 - Bailout
duration198.12 ± (198.01 - 198.54) ms197.94 ± (197.97 - 198.67) ms-0.1%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1147.32 ± (1148.51 - 1156.62) ms1151.44 ± (1151.31 - 1159.37) ms+0.4%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms188.52 ± (188.14 - 188.91) ms188.05 ± (187.69 - 188.41) ms-0.3%
process.time_to_main_ms81.34 ± (81.13 - 81.54) ms81.75 ± (81.52 - 81.99) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.13 ± (16.11 - 16.15) MB16.14 ± (16.12 - 16.17) MB+0.1%✅⬆️
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (19 - 20)-0.1%
.NET Core 3.1 - Bailout
process.internal_duration_ms188.25 ± (187.95 - 188.55) ms188.32 ± (187.89 - 188.76) ms+0.0%✅⬆️
process.time_to_main_ms82.94 ± (82.76 - 83.12) ms83.49 ± (83.24 - 83.75) ms+0.7%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.21 ± (16.18 - 16.24) MB16.24 ± (16.20 - 16.27) MB+0.2%✅⬆️
runtime.dotnet.threads.count21 ± (21 - 21)21 ± (20 - 21)-0.3%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms427.20 ± (424.12 - 430.27) ms441.51 ± (439.58 - 443.43) ms+3.3%✅⬆️
process.time_to_main_ms473.35 ± (472.76 - 473.94) ms477.29 ± (476.63 - 477.95) ms+0.8%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed58.07 ± (57.96 - 58.19) MB58.00 ± (57.88 - 58.11) MB-0.1%
runtime.dotnet.threads.count29 ± (29 - 30)29 ± (29 - 29)-0.1%
.NET 6 - Baseline
process.internal_duration_ms191.07 ± (190.73 - 191.41) ms192.97 ± (192.62 - 193.32) ms+1.0%✅⬆️
process.time_to_main_ms70.43 ± (70.26 - 70.60) ms71.04 ± (70.86 - 71.23) ms+0.9%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.09 ± (15.93 - 16.24) MB16.40 ± (16.35 - 16.46) MB+2.0%✅⬆️
runtime.dotnet.threads.count18 ± (18 - 19)19 ± (19 - 19)+3.4%✅⬆️
.NET 6 - Bailout
process.internal_duration_ms191.08 ± (190.78 - 191.37) ms191.00 ± (190.68 - 191.31) ms-0.0%
process.time_to_main_ms71.19 ± (71.07 - 71.31) ms71.76 ± (71.64 - 71.88) ms+0.8%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.05 ± (15.89 - 16.21) MB16.34 ± (16.22 - 16.45) MB+1.8%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)20 ± (19 - 20)+3.6%✅⬆️
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms453.07 ± (451.28 - 454.86) ms455.16 ± (453.43 - 456.88) ms+0.5%✅⬆️
process.time_to_main_ms452.71 ± (452.13 - 453.28) ms453.55 ± (452.98 - 454.11) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed58.18 ± (58.07 - 58.30) MB58.02 ± (57.90 - 58.13) MB-0.3%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)-0.0%
.NET 8 - Baseline
process.internal_duration_ms190.23 ± (189.86 - 190.61) ms190.18 ± (189.82 - 190.54) ms-0.0%
process.time_to_main_ms69.88 ± (69.72 - 70.05) ms70.31 ± (70.07 - 70.54) ms+0.6%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.76 ± (11.73 - 11.79) MB11.73 ± (11.70 - 11.75) MB-0.3%
runtime.dotnet.threads.count18 ± (18 - 18)18 ± (18 - 18)-0.0%
.NET 8 - Bailout
process.internal_duration_ms189.93 ± (189.56 - 190.31) ms189.20 ± (188.88 - 189.51) ms-0.4%
process.time_to_main_ms71.04 ± (70.90 - 71.18) ms71.16 ± (71.04 - 71.29) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.84 ± (11.81 - 11.87) MB11.71 ± (11.65 - 11.78) MB-1.1%
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (18 - 19)-2.7%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms364.45 ± (363.11 - 365.79) ms365.88 ± (364.63 - 367.12) ms+0.4%✅⬆️
process.time_to_main_ms434.33 ± (433.58 - 435.08) ms436.35 ± (435.69 - 437.01) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed47.74 ± (47.70 - 47.78) MB47.67 ± (47.63 - 47.70) MB-0.2%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)+0.3%✅⬆️
Comparison explanation

Execution-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:

  • Welch test with statistical test for significance of 5%
  • Only results indicating a difference greater than 5% and 5 ms are considered.

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 charts
FakeDbCommand (.NET Framework 4.8)
gantt
    title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8227) - mean (69ms)  : 68, 71
    master - mean (69ms)  : 68, 71

    section Bailout
    This PR (8227) - mean (74ms)  : 72, 75
    master - mean (73ms)  : 72, 74

    section CallTarget+Inlining+NGEN
    This PR (8227) - mean (1,046ms)  : 996, 1096
    master - mean (1,046ms)  : 981, 1110

Loading
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 (8227) - mean (108ms)  : 105, 111
    master - mean (108ms)  : 105, 111

    section Bailout
    This PR (8227) - mean (109ms)  : 107, 111
    master - mean (108ms)  : 107, 110

    section CallTarget+Inlining+NGEN
    This PR (8227) - mean (750ms)  : 710, 790
    master - mean (750ms)  : 716, 784

Loading
FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8227) - mean (95ms)  : 93, 97
    master - mean (95ms)  : 93, 98

    section Bailout
    This PR (8227) - mean (96ms)  : 95, 98
    master - mean (96ms)  : 95, 98

    section CallTarget+Inlining+NGEN
    This PR (8227) - mean (736ms)  : 704, 767
    master - mean (730ms)  : 696, 765

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8227) - mean (94ms)  : 92, 96
    master - mean (94ms)  : 91, 96

    section Bailout
    This PR (8227) - mean (95ms)  : 94, 97
    master - mean (96ms)  : 94, 97

    section CallTarget+Inlining+NGEN
    This PR (8227) - mean (647ms)  : 623, 671
    master - mean (638ms)  : 625, 651

Loading
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 (8227) - mean (195ms)  : 189, 200
    master - mean (195ms)  : 190, 200

    section Bailout
    This PR (8227) - mean (198ms)  : 195, 202
    master - mean (198ms)  : 196, 201

    section CallTarget+Inlining+NGEN
    This PR (8227) - mean (1,155ms)  : 1096, 1215
    master - mean (1,153ms)  : 1094, 1211

Loading
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 (8227) - mean (278ms)  : 274, 283
    master - mean (279ms)  : 273, 284

    section Bailout
    This PR (8227) - mean (281ms)  : 275, 286
    master - mean (280ms)  : 275, 285

    section CallTarget+Inlining+NGEN
    This PR (8227) - mean (950ms)  : 920, 981
    master - mean (934ms)  : 891, 977

Loading
HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8227) - mean (273ms)  : 268, 278
    master - mean (270ms)  : 264, 277

    section Bailout
    This PR (8227) - mean (271ms)  : 267, 275
    master - mean (270ms)  : 267, 274

    section CallTarget+Inlining+NGEN
    This PR (8227) - mean (938ms)  : 906, 971
    master - mean (935ms)  : 904, 965

Loading
HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8227) - mean (271ms)  : 265, 276
    master - mean (270ms)  : 265, 275

    section Bailout
    This PR (8227) - mean (270ms)  : 266, 274
    master - mean (270ms)  : 265, 276

    section CallTarget+Inlining+NGEN
    This PR (8227) - mean (833ms)  : 814, 853
    master - mean (831ms)  : 814, 848

Loading

@andrewlock andrewlock force-pushed the andrew/telemetry/extended-heartbeat-v2 branch from a3f275f to 75b6415 Compare February 25, 2026 13:06
@andrewlock andrewlock marked this pull request as ready for review February 25, 2026 13:16
@andrewlock andrewlock requested review from a team as code owners February 25, 2026 13:16

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 75b6415c27

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread tracer/src/Datadog.Trace/Telemetry/Collectors/ConfigurationTelemetry.Collector.cs Outdated
@lucaspimentel

lucaspimentel commented Feb 25, 2026

Copy link
Copy Markdown
Member

In the PR description:

the tracer flare can happen concurrently with the tracer flare

one of those was meant to be "heartbeat"?

@andrewlock andrewlock force-pushed the andrew/telemetry/extended-heartbeat-v2 branch from d668c5f to f74e019 Compare February 26, 2026 17:24
Comment on lines +77 to +78
}

GetData(config, data);
public ICollection<ConfigurationKeyValue>? GetFullData()

@anna-git anna-git Mar 3, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: seems like return type can never be null?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct, but in the interface it implements it can be currently

Comment thread tracer/src/Datadog.Trace/Telemetry/Collectors/ConfigurationTelemetry.Collector.cs Outdated
@@ -43,31 +47,48 @@ public void CopyTo(IConfigurationTelemetry destination)
/// <returns>Null if there are no changes, or the collector is not yet initialized</returns>
public ICollection<ConfigurationKeyValue>? GetData()

@anna-git anna-git Mar 3, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this be renamed, as it took me🐢 some time to understand one is the diff one is a full snapshot? maybe GetDataDiff or GetIncrementalData?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GetIncrementalData makes sense 👍 We use this same naming across all the collectors though, so I'll do a follow up PR to rename all those if that's ok?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh didn't realize that, sounds good for a follow up PR!

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done here: #8269

@andrewlock andrewlock force-pushed the andrew/telemetry/extended-heartbeat-v2 branch from a5f7e67 to a504db6 Compare March 4, 2026 10:32
@andrewlock andrewlock merged commit f2220c0 into master Mar 4, 2026
139 checks passed
@andrewlock andrewlock deleted the andrew/telemetry/extended-heartbeat-v2 branch March 4, 2026 13:18
@github-actions github-actions Bot added this to the vNext-v3 milestone Mar 4, 2026
andrewlock added a commit that referenced this pull request Mar 12, 2026
## Summary of changes

Renames `GetData` to `GetIncrementalData` to differentiate from
`GetFullData()`

## Reason for change

In #8227 it was flagged that `GetData()` and `GetFullData()` are easy to
confuse. Renaming `GetData` to `GetIncrementalData` should solve it.

## Implementation details

Deterministic rename (thank you IDEs, take that AI)

## Test coverage

All covered by existing
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants