Skip to content

Commit a21f062

Browse files
committed
[OpenTelemetry] Metrics - beter handling for double.NaN v2
1 parent 1f3582a commit a21f062

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

src/OpenTelemetry/Metrics/MeterProviderSdk.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,12 @@ internal static void MeasurementRecordedDouble(Instrument instrument, double val
219219
return;
220220
}
221221

222+
if (!MathHelper.IsFinite(value))
223+
{
224+
OpenTelemetrySdkEventSource.Log.MeasurementDropped(instrument?.Name ?? "UnknownInstrument", "Measurement value was invalid.", "Use a finite value for measurements (not NaN or Infinity).");
225+
return;
226+
}
227+
222228
metricState.RecordMeasurementDouble(value, tags);
223229
}
224230

test/OpenTelemetry.Tests/Metrics/MeterProviderSdkTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,30 @@ void RunTest()
104104
}
105105
}
106106
}
107+
108+
[Fact]
109+
public void NonFiniteDoubleMeasurementsAreDropped()
110+
{
111+
var meterName = Utils.GetCurrentMethodName();
112+
var exportedItems = new List<Metric>();
113+
114+
using var meterProvider = Sdk.CreateMeterProviderBuilder()
115+
.AddMeter(meterName)
116+
.AddInMemoryExporter(exportedItems)
117+
.Build();
118+
119+
using var meter = new Meter(meterName);
120+
var counter = meter.CreateCounter<double>("counter");
121+
122+
counter.Add(double.NaN);
123+
counter.Add(double.PositiveInfinity);
124+
counter.Add(double.NegativeInfinity);
125+
counter.Add(2.5);
126+
127+
Assert.True(meterProvider.ForceFlush());
128+
var exportedMetric = Assert.Single(exportedItems);
129+
var metric = new MetricSnapshot(exportedMetric);
130+
var metricPoint = Assert.Single(metric.MetricPoints);
131+
Assert.Equal(2.5, metricPoint.GetSumDouble());
132+
}
107133
}

0 commit comments

Comments
 (0)