From b812d730dce21abd1b1d897b0ef5263bc68ae300 Mon Sep 17 00:00:00 2001 From: liamcottle Date: Thu, 14 Mar 2024 00:55:27 +1300 Subject: [PATCH] collect device metrics --- .../migration.sql | 16 ++++++++++++++++ prisma/schema.prisma | 18 ++++++++++++++++++ src/mqtt.js | 17 +++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 prisma/migrations/20240313115208_create_device_metrics_table/migration.sql diff --git a/prisma/migrations/20240313115208_create_device_metrics_table/migration.sql b/prisma/migrations/20240313115208_create_device_metrics_table/migration.sql new file mode 100644 index 0000000..0549291 --- /dev/null +++ b/prisma/migrations/20240313115208_create_device_metrics_table/migration.sql @@ -0,0 +1,16 @@ +-- CreateTable +CREATE TABLE `device_metrics` ( + `id` BIGINT NOT NULL AUTO_INCREMENT, + `node_id` BIGINT NOT NULL, + `battery_level` INTEGER NULL, + `voltage` DECIMAL(65, 30) NULL, + `channel_utilization` DECIMAL(65, 30) NULL, + `air_util_tx` DECIMAL(65, 30) NULL, + `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + + INDEX `device_metrics_created_at_idx`(`created_at`), + INDEX `device_metrics_updated_at_idx`(`updated_at`), + INDEX `device_metrics_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 58dddb4..944edc3 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -82,6 +82,24 @@ model NeighbourInfo { @@map("neighbour_infos") } +model DeviceMetric { + id BigInt @id @default(autoincrement()) + node_id BigInt + + battery_level Int? + voltage Decimal? + channel_utilization Decimal? + air_util_tx Decimal? + + created_at DateTime @default(now()) + updated_at DateTime @default(now()) @updatedAt + + @@index(created_at) + @@index(updated_at) + @@index(node_id) + @@map("device_metrics") +} + model TraceRoute { id BigInt @id @default(autoincrement()) node_id BigInt diff --git a/src/mqtt.js b/src/mqtt.js index a3a5a20..f0c48bb 100644 --- a/src/mqtt.js +++ b/src/mqtt.js @@ -215,10 +215,27 @@ client.on("message", async (topic, message) => { // handle device metrics if(telemetry.deviceMetrics){ + data.battery_level = telemetry.deviceMetrics.batteryLevel !== 0 ? telemetry.deviceMetrics.batteryLevel : null; data.voltage = telemetry.deviceMetrics.voltage !== 0 ? telemetry.deviceMetrics.voltage : null; data.channel_utilization = telemetry.deviceMetrics.channelUtilization !== 0 ? telemetry.deviceMetrics.channelUtilization : null; data.air_util_tx = telemetry.deviceMetrics.airUtilTx !== 0 ? telemetry.deviceMetrics.airUtilTx : null; + + // create device metric + try { + await prisma.deviceMetric.create({ + data: { + node_id: envelope.packet.from, + battery_level: data.battery_level, + voltage: data.voltage, + channel_utilization: data.channel_utilization, + air_util_tx: data.air_util_tx, + }, + }); + } catch (e) { + console.error(e); + } + } // update node telemetry in db