refactor: centralize telemetry metadata formatting
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
package com.lingniu.ingest.api.event;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Stable string formatting for metadata values shared across protocol mappers.
|
||||
*/
|
||||
public final class TelemetryMetadataValues {
|
||||
|
||||
private TelemetryMetadataValues() {
|
||||
}
|
||||
|
||||
public static String doubleValue(double value) {
|
||||
if (!Double.isFinite(value)) {
|
||||
return "";
|
||||
}
|
||||
String formatted = String.format(Locale.ROOT, "%.6f", value);
|
||||
return formatted.indexOf('.') < 0
|
||||
? formatted
|
||||
: formatted.replaceAll("0+$", "").replaceAll("\\.$", "");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.lingniu.ingest.api.event;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class TelemetryMetadataValuesTest {
|
||||
|
||||
@Test
|
||||
void formatsDoubleWithoutFloatingPointNoise() {
|
||||
assertThat(TelemetryMetadataValues.doubleValue(123456.70000000001)).isEqualTo("123456.7");
|
||||
assertThat(TelemetryMetadataValues.doubleValue(1234.5)).isEqualTo("1234.5");
|
||||
assertThat(TelemetryMetadataValues.doubleValue(1234.0)).isEqualTo("1234");
|
||||
assertThat(TelemetryMetadataValues.doubleValue(1.23456789)).isEqualTo("1.234568");
|
||||
}
|
||||
|
||||
@Test
|
||||
void rejectsNonFiniteDoubleValuesAsBlankMetadata() {
|
||||
assertThat(TelemetryMetadataValues.doubleValue(Double.NaN)).isEmpty();
|
||||
assertThat(TelemetryMetadataValues.doubleValue(Double.POSITIVE_INFINITY)).isEmpty();
|
||||
assertThat(TelemetryMetadataValues.doubleValue(Double.NEGATIVE_INFINITY)).isEmpty();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user