From 020b4be72c5b1b15a81604d698a3e52e759b5417 Mon Sep 17 00:00:00 2001 From: liamcottle Date: Wed, 13 Mar 2024 14:18:47 +1300 Subject: [PATCH] collect traceroutes --- .../migration.sql | 13 ++++++++ prisma/schema.prisma | 14 ++++++++ src/mqtt.js | 33 +++++++++++++++++-- 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 prisma/migrations/20240313011413_create_traceroutes_table/migration.sql diff --git a/prisma/migrations/20240313011413_create_traceroutes_table/migration.sql b/prisma/migrations/20240313011413_create_traceroutes_table/migration.sql new file mode 100644 index 0000000..3ff2176 --- /dev/null +++ b/prisma/migrations/20240313011413_create_traceroutes_table/migration.sql @@ -0,0 +1,13 @@ +-- CreateTable +CREATE TABLE `traceroutes` ( + `id` BIGINT NOT NULL AUTO_INCREMENT, + `node_id` BIGINT NOT NULL, + `route` JSON NOT NULL, + `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + + INDEX `traceroutes_created_at_idx`(`created_at`), + INDEX `traceroutes_updated_at_idx`(`updated_at`), + INDEX `traceroutes_node_id_idx`(`node_id`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 6a88dfc..d6ac5b1 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -52,3 +52,17 @@ model NeighbourInfo { @@index(updated_at) @@map("neighbour_infos") } + +model TraceRoute { + id BigInt @id @default(autoincrement()) + node_id BigInt + route Json + + created_at DateTime @default(now()) + updated_at DateTime @default(now()) @updatedAt + + @@index(created_at) + @@index(updated_at) + @@index(node_id) + @@map("traceroutes") +} diff --git a/src/mqtt.js b/src/mqtt.js index 49b55d3..dfd47b0 100644 --- a/src/mqtt.js +++ b/src/mqtt.js @@ -21,6 +21,7 @@ const Data = root.lookupType("Data"); const ServiceEnvelope = root.lookupType("ServiceEnvelope"); const NeighborInfo = root.lookupType("NeighborInfo"); const Position = root.lookupType("Position"); +const RouteDiscovery = root.lookupType("RouteDiscovery"); const Telemetry = root.lookupType("Telemetry"); const User = root.lookupType("User"); @@ -124,7 +125,7 @@ client.on("message", async (topic, message) => { } - if(portnum === 4) { + else if(portnum === 4) { const user = User.decode(envelope.packet.decoded.payload); @@ -161,7 +162,7 @@ client.on("message", async (topic, message) => { } - if(portnum === 71) { + else if(portnum === 71) { const neighbourInfo = NeighborInfo.decode(envelope.packet.decoded.payload); @@ -189,7 +190,7 @@ client.on("message", async (topic, message) => { } - if(portnum === 67) { + else if(portnum === 67) { const telemetry = Telemetry.decode(envelope.packet.decoded.payload); @@ -225,6 +226,32 @@ client.on("message", async (topic, message) => { } + else if(portnum === 70) { + + const routeDiscovery = RouteDiscovery.decode(envelope.packet.decoded.payload); + + console.log("TRACEROUTE_APP", { + from: envelope.packet.from.toString(16), + route_discovery: routeDiscovery, + }); + + try { + await prisma.traceRoute.create({ + data: { + node_id: envelope.packet.from, + route: routeDiscovery.route, + }, + }); + } catch (e) { + console.error(e); + } + + } + + else { + // console.log(portnum, envelope); + } + } catch(e) { // ignore errors }