feat: persist telemetry fields to tdengine

This commit is contained in:
lingniu
2026-06-29 13:48:04 +08:00
parent ab9c669e76
commit 3904dcf869
12 changed files with 350 additions and 3 deletions

View File

@@ -96,5 +96,9 @@ public final class EventHistoryEnvelopeIngestor implements EnvelopeIngestor {
if (location.isPresent()) {
tdengineWriter.appendLocations(List.of(location.get()));
}
var telemetryFields = TdengineEnvelopeRows.telemetryFields(envelope);
if (!telemetryFields.isEmpty()) {
tdengineWriter.appendTelemetryFields(telemetryFields);
}
}
}

View File

@@ -19,6 +19,7 @@ import com.lingniu.ingest.sink.mq.proto.ParseStatusProto;
import com.lingniu.ingest.tdenginehistory.TdengineHistoryWriter;
import com.lingniu.ingest.tdenginehistory.TdengineLocationRow;
import com.lingniu.ingest.tdenginehistory.TdengineRawFrameRow;
import com.lingniu.ingest.tdenginehistory.TdengineTelemetryFieldRow;
import org.junit.jupiter.api.Test;
import java.io.IOException;
@@ -125,7 +126,7 @@ class EventHistoryEnvelopeIngestorTest {
}
@Test
void tryIngestWritesRawAndLocationFactsToTdengineWhenWriterExists() throws Exception {
void tryIngestWritesRawLocationAndTelemetryFactsToTdengineWhenWriterExists() throws Exception {
CapturingStore store = new CapturingStore();
CapturingTdengineWriter tdengineWriter = new CapturingTdengineWriter();
EventHistoryEnvelopeIngestor ingestor = new EventHistoryEnvelopeIngestor(
@@ -156,6 +157,16 @@ class EventHistoryEnvelopeIngestorTest {
.setLongitude(113.12)
.setLatitude(23.45)
.setSpeedKmh(42.5))
.setTelemetrySnapshot(TelemetrySnapshot.newBuilder()
.setEventType("LOCATION")
.setRawArchiveUri("archive://jt808/2026/06/29/frame-jt808-1.bin")
.addFields(TelemetryField.newBuilder()
.setKey("location.speedKmh")
.setValueType("DOUBLE")
.setValue("42.5")
.setUnit("km/h")
.setQuality("GOOD")
.setSourcePath("JT808.0x0200.speed")))
.build();
EnvelopeIngestResult result = ingestor.tryIngest(envelope.toByteArray());
@@ -169,6 +180,10 @@ class EventHistoryEnvelopeIngestorTest {
.extracting(TdengineLocationRow::factId)
.containsExactly("jt808-location-1");
assertThat(tdengineWriter.locations.getFirst().longitude()).isEqualTo(113.12);
assertThat(tdengineWriter.telemetryFields)
.extracting(TdengineTelemetryFieldRow::fieldKey)
.containsExactly("location.speedKmh");
assertThat(tdengineWriter.telemetryFields.getFirst().valueDouble()).isEqualTo(42.5);
}
private static VehicleEnvelope envelope(String eventId) {
@@ -206,6 +221,7 @@ class EventHistoryEnvelopeIngestorTest {
private static final class CapturingTdengineWriter implements TdengineHistoryWriter {
private final List<TdengineRawFrameRow> rawFrames = new ArrayList<>();
private final List<TdengineLocationRow> locations = new ArrayList<>();
private final List<TdengineTelemetryFieldRow> telemetryFields = new ArrayList<>();
@Override
public void appendRawFrames(List<TdengineRawFrameRow> rows) {
@@ -216,5 +232,10 @@ class EventHistoryEnvelopeIngestorTest {
public void appendLocations(List<TdengineLocationRow> rows) {
locations.addAll(rows);
}
@Override
public void appendTelemetryFields(List<TdengineTelemetryFieldRow> rows) {
telemetryFields.addAll(rows);
}
}
}