update to read from db
This commit is contained in:
+143
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user