update to read from db

This commit is contained in:
2026-06-03 14:30:43 -04:00
parent 5511a717c6
commit 45e600612e
4 changed files with 176 additions and 59 deletions
+143
View File
@@ -1,5 +1,6 @@
import json
import os
import re
import sqlite3
import threading
from contextlib import contextmanager
@@ -150,6 +151,148 @@ def mark_completed(test_id, device, completed_at, duration_seconds, tput_results
)
def extract_measurement_metrics(db_file_path):
conn = sqlite3.connect(db_file_path)
conn.row_factory = sqlite3.Row
try:
tput_rows = conn.execute(
"""
SELECT CAST(ROUND(AVG(IXC_avg_tput),0)AS INT) AS avg_tput, COM_Dst_endpoint
FROM MEASUREMENT
WHERE IXC_avg_tput IS NOT NULL
GROUP BY COM_Dst_endpoint
"""
).fetchall()
rssi_rows = conn.execute(
"""
SELECT
COM_Dst_endpoint,
CAST(
AVG(
CASE
WHEN COM_Dst_endpoint = 'STA4' THEN
(
(CASE WHEN STA_rssi IS NOT NULL AND STA_rssi != 0 AND STA_rssi >= -199 THEN STA_rssi END) +
(CASE WHEN STA_all_rssi_0 IS NOT NULL AND STA_all_rssi_0 != 0 AND STA_all_rssi_0 >= -199 THEN STA_all_rssi_0 END) +
(CASE WHEN STA_all_rssi_1 IS NOT NULL AND STA_all_rssi_1 != 0 AND STA_all_rssi_1 >= -199 THEN STA_all_rssi_1 END) +
(CASE WHEN STA_all_rssi_2 IS NOT NULL AND STA_all_rssi_2 != 0 AND STA_all_rssi_2 >= -199 THEN STA_all_rssi_2 END)
) * 1.0 /
NULLIF(
(STA_rssi IS NOT NULL AND STA_rssi != 0 AND STA_rssi >= -199) +
(STA_all_rssi_0 IS NOT NULL AND STA_all_rssi_0 != 0 AND STA_all_rssi_0 >= -199) +
(STA_all_rssi_1 IS NOT NULL AND STA_all_rssi_1 != 0 AND STA_all_rssi_1 >= -199) +
(STA_all_rssi_2 IS NOT NULL AND STA_all_rssi_2 != 0 AND STA_all_rssi_2 >= -199),
0
)
WHEN COM_Dst_endpoint IN ('STA56', 'STA63') THEN
CASE
WHEN STA_rssi IS NOT NULL AND STA_rssi != 0 AND STA_rssi >= -199
THEN STA_rssi
END
END
) AS INTEGER
) AS dl_rssi,
CAST(
AVG(
(
(CASE WHEN AP_sta_rssi_0 IS NOT NULL AND AP_sta_rssi_0 != 0 AND AP_sta_rssi_0 >= -199 THEN AP_sta_rssi_0 END) +
(CASE WHEN AP_sta_rssi_1 IS NOT NULL AND AP_sta_rssi_1 != 0 AND AP_sta_rssi_1 >= -199 THEN AP_sta_rssi_1 END) +
(CASE WHEN AP_sta_rssi_2 IS NOT NULL AND AP_sta_rssi_2 != 0 AND AP_sta_rssi_2 >= -199 THEN AP_sta_rssi_2 END) +
(CASE WHEN AP_sta_rssi_3 IS NOT NULL AND AP_sta_rssi_3 != 0 AND AP_sta_rssi_3 >= -199 THEN AP_sta_rssi_3 END)
) * 1.0 /
NULLIF(
(AP_sta_rssi_0 IS NOT NULL AND AP_sta_rssi_0 != 0 AND AP_sta_rssi_0 >= -199) +
(AP_sta_rssi_1 IS NOT NULL AND AP_sta_rssi_1 != 0 AND AP_sta_rssi_1 >= -199) +
(AP_sta_rssi_2 IS NOT NULL AND AP_sta_rssi_2 != 0 AND AP_sta_rssi_2 >= -199) +
(AP_sta_rssi_3 IS NOT NULL AND AP_sta_rssi_3 != 0 AND AP_sta_rssi_3 >= -199),
0
)
) AS INTEGER
) AS ul_rssi
FROM MEASUREMENT
GROUP BY COM_Dst_endpoint
"""
).fetchall()
elapsed_row = conn.execute(
"""
WITH first_last AS (
SELECT
(SELECT COM_time FROM MEASUREMENT ORDER BY rowid ASC LIMIT 1) AS start_time,
(SELECT COM_time FROM MEASUREMENT ORDER BY rowid DESC LIMIT 1) AS end_time
)
SELECT
ROUND(
CASE
WHEN end_sec >= start_sec THEN
end_sec - start_sec
ELSE
(end_sec - start_sec) + 86400
END
) AS elapsed_seconds
FROM (
SELECT
(strftime('%H', start_time) * 3600 +
strftime('%M', start_time) * 60 +
strftime('%S', start_time)) AS start_sec,
(strftime('%H', end_time) * 3600 +
strftime('%M', end_time) * 60 +
strftime('%S', end_time)) AS end_sec
FROM first_last
);
"""
).fetchone()
finally:
conn.close()
result = {"duration_seconds": None, "tputResults": []}
if elapsed_row and elapsed_row["elapsed_seconds"] is not None:
result["duration_seconds"] = int(elapsed_row["elapsed_seconds"])
rssi_by_endpoint = {
row["COM_Dst_endpoint"]: {
"dl_rssi": row["dl_rssi"],
"ul_rssi": row["ul_rssi"],
}
for row in rssi_rows
if row["COM_Dst_endpoint"] not in (None, "")
}
tput_results = []
for row in tput_rows:
dst_endpoint = row["COM_Dst_endpoint"]
if dst_endpoint in (None, ""):
continue
match = re.search(r"STA\s*0*(\d+)", str(dst_endpoint), re.IGNORECASE)
if not match:
continue
avg_tput = row["avg_tput"]
if avg_tput is None:
continue
rssi_values = rssi_by_endpoint.get(dst_endpoint, {})
tput_results.append(
{
"station": int(match.group(1)),
"tput": int(avg_tput),
"dlRssi": rssi_values.get("dl_rssi"),
"ulRssi": rssi_values.get("ul_rssi"),
}
)
result["tputResults"] = sorted(tput_results, key=lambda item: item["station"])
return result
def set_coe_pair(test_row_id, coe_pair):
json_value = json.dumps(coe_pair or [])
with _tx():