fix: prevent tdengine raw frame overwrite
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
@@ -30,7 +30,7 @@ public final class TdengineEnvelopeRows {
|
||||
metadata.putAll(envelope.getMetadataMap());
|
||||
metadata.putAll(raw.getMetadataMap());
|
||||
return Optional.of(new TdengineRawFrameRow(
|
||||
instant(envelope.getEventTimeMs()),
|
||||
rawFrameTs(envelope, metadata),
|
||||
raw.getFrameId(),
|
||||
instant(envelope.getIngestTimeMs()),
|
||||
raw.getMessageId(),
|
||||
@@ -142,6 +142,24 @@ public final class TdengineEnvelopeRows {
|
||||
return Instant.ofEpochMilli(epochMillis);
|
||||
}
|
||||
|
||||
private static Instant rawFrameTs(VehicleEnvelope envelope, Map<String, String> metadata) {
|
||||
String rawArchiveEventId = firstNonBlank(metadata.get("rawArchiveEventId"), envelope.getEventId());
|
||||
if (rawArchiveEventId == null || rawArchiveEventId.isBlank()) {
|
||||
return instant(envelope.getEventTimeMs());
|
||||
}
|
||||
try {
|
||||
long sequenceId = Long.parseLong(rawArchiveEventId);
|
||||
long baseMillis = sequenceId / 1000L;
|
||||
long sameMillisecondOffset = sequenceId % 1000L;
|
||||
if (Math.abs(baseMillis - envelope.getEventTimeMs()) > 60_000L) {
|
||||
return instant(envelope.getEventTimeMs());
|
||||
}
|
||||
return Instant.ofEpochMilli(baseMillis + sameMillisecondOffset);
|
||||
} catch (NumberFormatException ignored) {
|
||||
return instant(envelope.getEventTimeMs());
|
||||
}
|
||||
}
|
||||
|
||||
private static String protocol(VehicleEnvelope envelope) {
|
||||
return firstNonBlank(envelope.getSource(), "UNKNOWN");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user