feat: productionize raw history ingestion
This commit is contained in:
@@ -41,6 +41,30 @@
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-all</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-common</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-buffer</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-transport</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-resolver</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-codec</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-handler</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.gps31.push.netty.PushClient;
|
||||
import com.gps31.push.netty.PushMsg;
|
||||
import com.gps31.push.netty.client.TcpClient;
|
||||
import com.lingniu.ingest.api.ProtocolId;
|
||||
import com.lingniu.ingest.api.event.RawArchiveKeys;
|
||||
import com.lingniu.ingest.api.pipeline.RawFrame;
|
||||
import com.lingniu.ingest.core.dispatcher.Dispatcher;
|
||||
import com.lingniu.ingest.identity.InMemoryVehicleIdentityService;
|
||||
@@ -220,6 +221,7 @@ public class XindaPushClient extends PushClient {
|
||||
meta.put("parseError", "true");
|
||||
meta.put("parseErrorMessage", parsed.errorMessage());
|
||||
}
|
||||
meta.put(RawArchiveKeys.META_PARSED_JSON, parsedJson(payload.command(), json, parsed));
|
||||
dispatcher.dispatch(new RawFrame(
|
||||
ProtocolId.XINDA_PUSH,
|
||||
payload.commandCode(),
|
||||
@@ -247,6 +249,8 @@ public class XindaPushClient extends PushClient {
|
||||
meta.put("operationalError", "true");
|
||||
meta.put("phase", phase == null ? "" : phase);
|
||||
meta.put("reason", reason == null ? "" : reason);
|
||||
meta.put(RawArchiveKeys.META_PARSED_JSON,
|
||||
parsedJson(payload.command(), payload.json(), new JsonParseResult(json, false, "")));
|
||||
dispatcher.dispatch(new RawFrame(
|
||||
ProtocolId.XINDA_PUSH,
|
||||
payload.commandCode(),
|
||||
@@ -271,6 +275,8 @@ public class XindaPushClient extends PushClient {
|
||||
meta.put("operationalError", "true");
|
||||
meta.put("phase", "message");
|
||||
meta.put("reason", reason == null ? "" : reason);
|
||||
JsonParseResult parsed = parseForMetadata(json);
|
||||
meta.put(RawArchiveKeys.META_PARSED_JSON, parsedJson(cmd, json, parsed));
|
||||
dispatcher.dispatch(new RawFrame(
|
||||
ProtocolId.XINDA_PUSH,
|
||||
0,
|
||||
@@ -388,6 +394,19 @@ public class XindaPushClient extends PushClient {
|
||||
}
|
||||
}
|
||||
|
||||
private static String parsedJson(String command, String rawJson, JsonParseResult parsed) {
|
||||
JSONObject root = new JSONObject(true);
|
||||
root.put("command", command == null ? "" : command);
|
||||
root.put("parseError", parsed != null && parsed.parseError());
|
||||
if (parsed != null && parsed.parseError()) {
|
||||
root.put("parseErrorMessage", parsed.errorMessage() == null ? "" : parsed.errorMessage());
|
||||
root.put("rawJson", rawJson == null ? "" : rawJson);
|
||||
} else {
|
||||
root.put("body", parsed == null || parsed.json() == null ? new JSONObject() : parsed.json());
|
||||
}
|
||||
return root.toJSONString();
|
||||
}
|
||||
|
||||
private record JsonParseResult(JSONObject json, boolean parseError, String errorMessage) {}
|
||||
|
||||
private record IdentityResolution(VehicleIdentity identity, String errorMessage) {}
|
||||
|
||||
@@ -185,7 +185,6 @@ public final class XindaPushEventMapper implements EventMapper<XindaPushMessage>
|
||||
Map<String, String> out = new java.util.LinkedHashMap<>();
|
||||
out.put("source", "xinda-push");
|
||||
out.put("cmd", message.command());
|
||||
out.put("rawJson", message.json());
|
||||
out.put("vin", normalizedVin(identity));
|
||||
out.put("externalVin", firstNonBlank(json, "vin"));
|
||||
out.put("phone", phone(json));
|
||||
|
||||
@@ -37,7 +37,8 @@ class XindaPushEventMapperTest {
|
||||
.containsEntry("externalVin", "LNVIN000000000101")
|
||||
.containsEntry("phone", "13800138000")
|
||||
.containsEntry("deviceId", "XD-101")
|
||||
.containsEntry("plateNo", "粤B10101");
|
||||
.containsEntry("plateNo", "粤B10101")
|
||||
.doesNotContainKey("rawJson");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user