Sort order and purging fix
This commit is contained in:
+68
-2
@@ -34,7 +34,7 @@ const nodeQueries = {
|
||||
hardware_model = COALESCE(excluded.hardware_model, hardware_model),
|
||||
role = COALESCE(excluded.role, role),
|
||||
firmware_version = COALESCE(excluded.firmware_version, firmware_version),
|
||||
last_heard = COALESCE(excluded.last_heard, CURRENT_TIMESTAMP),
|
||||
last_heard = CURRENT_TIMESTAMP,
|
||||
battery_level = COALESCE(excluded.battery_level, battery_level),
|
||||
voltage = COALESCE(excluded.voltage, voltage),
|
||||
channel_utilization = COALESCE(excluded.channel_utilization, channel_utilization),
|
||||
@@ -62,11 +62,77 @@ const nodeQueries = {
|
||||
(SELECT altitude FROM positions WHERE node_id = n.node_id ORDER BY timestamp DESC LIMIT 1) as altitude,
|
||||
(SELECT timestamp FROM positions WHERE node_id = n.node_id ORDER BY timestamp DESC LIMIT 1) as position_timestamp
|
||||
FROM nodes n
|
||||
ORDER BY n.last_heard DESC
|
||||
ORDER BY
|
||||
COALESCE(datetime(n.last_heard), datetime('1970-01-01')) DESC
|
||||
`),
|
||||
|
||||
updateNodeLastHeard: db.prepare(`
|
||||
UPDATE nodes SET last_heard = CURRENT_TIMESTAMP WHERE node_id = ?
|
||||
`),
|
||||
|
||||
updateNullLastHeard: db.prepare(`
|
||||
UPDATE nodes
|
||||
SET last_heard = (
|
||||
SELECT MAX(latest_time)
|
||||
FROM (
|
||||
SELECT MAX(created_at) as latest_time FROM messages WHERE from_node = nodes.node_id
|
||||
UNION ALL
|
||||
SELECT MAX(timestamp) as latest_time FROM positions WHERE node_id = nodes.node_id
|
||||
UNION ALL
|
||||
SELECT MAX(timestamp) as latest_time FROM telemetry WHERE node_id = nodes.node_id
|
||||
)
|
||||
)
|
||||
WHERE last_heard IS NULL
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM messages WHERE from_node = nodes.node_id
|
||||
UNION
|
||||
SELECT 1 FROM positions WHERE node_id = nodes.node_id
|
||||
UNION
|
||||
SELECT 1 FROM telemetry WHERE node_id = nodes.node_id
|
||||
)
|
||||
`),
|
||||
|
||||
getOldNodesWithData: db.prepare(`
|
||||
SELECT
|
||||
n.node_id,
|
||||
n.last_heard,
|
||||
(SELECT COUNT(*) FROM messages WHERE from_node = n.node_id) as message_count,
|
||||
(SELECT COUNT(*) FROM positions WHERE node_id = n.node_id) as position_count,
|
||||
(SELECT COUNT(*) FROM telemetry WHERE node_id = n.node_id) as telemetry_count
|
||||
FROM nodes n
|
||||
WHERE datetime(last_heard) < datetime('now', '-' || ? || ' hours') OR last_heard IS NULL
|
||||
`),
|
||||
|
||||
deleteOldNodes: db.prepare(`
|
||||
DELETE FROM nodes
|
||||
WHERE (
|
||||
datetime(last_heard) < datetime('now', '-' || ? || ' hours')
|
||||
OR (
|
||||
last_heard IS NULL
|
||||
AND node_id NOT IN (
|
||||
SELECT DISTINCT from_node FROM messages WHERE from_node IS NOT NULL
|
||||
UNION
|
||||
SELECT DISTINCT node_id FROM positions WHERE node_id IS NOT NULL
|
||||
UNION
|
||||
SELECT DISTINCT node_id FROM telemetry WHERE node_id IS NOT NULL
|
||||
)
|
||||
)
|
||||
)
|
||||
AND node_id NOT IN (
|
||||
SELECT DISTINCT from_node FROM messages
|
||||
WHERE from_node IS NOT NULL
|
||||
AND datetime(created_at) >= datetime('now', '-' || ? || ' hours')
|
||||
)
|
||||
AND node_id NOT IN (
|
||||
SELECT DISTINCT node_id FROM positions
|
||||
WHERE node_id IS NOT NULL
|
||||
AND datetime(timestamp) >= datetime('now', '-' || ? || ' hours')
|
||||
)
|
||||
AND node_id NOT IN (
|
||||
SELECT DISTINCT node_id FROM telemetry
|
||||
WHERE node_id IS NOT NULL
|
||||
AND datetime(timestamp) >= datetime('now', '-' || ? || ' hours')
|
||||
)
|
||||
`)
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user