collect device metrics
This commit is contained in:
@ -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;
|
@ -82,6 +82,24 @@ model NeighbourInfo {
|
|||||||
@@map("neighbour_infos")
|
@@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 {
|
model TraceRoute {
|
||||||
id BigInt @id @default(autoincrement())
|
id BigInt @id @default(autoincrement())
|
||||||
node_id BigInt
|
node_id BigInt
|
||||||
|
17
src/mqtt.js
17
src/mqtt.js
@ -215,10 +215,27 @@ client.on("message", async (topic, message) => {
|
|||||||
|
|
||||||
// handle device metrics
|
// handle device metrics
|
||||||
if(telemetry.deviceMetrics){
|
if(telemetry.deviceMetrics){
|
||||||
|
|
||||||
data.battery_level = telemetry.deviceMetrics.batteryLevel !== 0 ? telemetry.deviceMetrics.batteryLevel : null;
|
data.battery_level = telemetry.deviceMetrics.batteryLevel !== 0 ? telemetry.deviceMetrics.batteryLevel : null;
|
||||||
data.voltage = telemetry.deviceMetrics.voltage !== 0 ? telemetry.deviceMetrics.voltage : null;
|
data.voltage = telemetry.deviceMetrics.voltage !== 0 ? telemetry.deviceMetrics.voltage : null;
|
||||||
data.channel_utilization = telemetry.deviceMetrics.channelUtilization !== 0 ? telemetry.deviceMetrics.channelUtilization : null;
|
data.channel_utilization = telemetry.deviceMetrics.channelUtilization !== 0 ? telemetry.deviceMetrics.channelUtilization : null;
|
||||||
data.air_util_tx = telemetry.deviceMetrics.airUtilTx !== 0 ? telemetry.deviceMetrics.airUtilTx : 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
|
// update node telemetry in db
|
||||||
|
Reference in New Issue
Block a user