changed speedtest service to ookla

This commit is contained in:
2026-03-10 03:37:02 +01:00
parent 90194076a6
commit 914f2ad2c9
7 changed files with 206 additions and 70 deletions

View File

@@ -1,7 +1,7 @@
import sqlite3
import time
from config import DB_PATH
def init_db(db_path=DB_PATH):
conn = sqlite3.connect(db_path)
c = conn.cursor()
@@ -17,73 +17,48 @@ def init_db(db_path=DB_PATH):
location_region TEXT,
latency REAL,
jitter REAL,
down_100kB REAL,
down_1MB REAL,
down_10MB REAL,
down_25MB REAL,
down_90th REAL,
up_100kB REAL,
up_1MB REAL,
up_10MB REAL,
up_90th REAL
down_100kB REAL, down_1MB REAL, down_10MB REAL, down_25MB REAL, down_90th REAL,
up_100kB REAL, up_1MB REAL, up_10MB REAL, up_90th REAL
)
''')
conn.commit()
conn.close()
def insert_result(results: dict|None, db_path=DB_PATH):
def insert_result(data: dict|None, db_path=DB_PATH):
conn = sqlite3.connect(db_path)
c = conn.cursor()
# If the test failed entirely, store it as a failure with timestamp now
if results is None or "tests" not in results:
from time import time
c.execute("INSERT INTO speed_tests (timestamp, failed) VALUES (?, ?)", (time(), True))
if data is None:
c.execute("INSERT INTO speed_tests (timestamp, failed) VALUES (?, ?)", (time.time(), True))
conn.commit()
conn.close()
return
tests = results.get("tests", {})
meta = results.get("meta", {})
# Convert bytes per second to Megabits per second (Mbps)
def to_mbps(bytes_per_sec):
return (bytes_per_sec * 8) / 1000000 if bytes_per_sec else None
# Get a consistent timestamp from any TestResult (or fallback to now)
from time import time as now
sample_test = next(iter(tests.values()), None)
timestamp = sample_test.time if sample_test else now()
print(tests)
print(meta)
def get(tests, key):
return tests[key].value if key in tests else None
# Ookla provides a UTC ISO timestamp, but we'll stick to local Unix time for consistency with your old data
current_time = time.time()
c.execute('''
INSERT INTO speed_tests (
timestamp, failed, isp, ip, location_code, location_city, location_region,
latency, jitter,
down_100kB, down_1MB, down_10MB, down_25MB, down_90th,
up_100kB, up_1MB, up_10MB, up_90th
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
latency, jitter, down_90th, up_90th
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
''', (
timestamp, False,
get(tests, "isp"),
get(meta, "ip"),
get(meta, "location_code"),
get(meta, "location_city"),
get(meta, "location_region"),
get(tests, "latency"),
get(tests, "jitter"),
get(tests, "100kB_down_mbps"),
get(tests, "1MB_down_mbps"),
get(tests, "10MB_down_mbps"),
get(tests, "25MB_down_mbps"),
get(tests, "90th_percentile_down_mbps"),
get(tests, "100kB_up_mbps"),
get(tests, "1MB_up_mbps"),
get(tests, "10MB_up_mbps"),
get(tests, "90th_percentile_up_mbps")
current_time,
False,
data.get("isp"),
data.get("interface", {}).get("externalIp"),
data.get("server", {}).get("name"), # Ookla Server Name
data.get("server", {}).get("location"), # Ookla Server City
data.get("server", {}).get("country"), # Ookla Server Country
data.get("ping", {}).get("latency"),
data.get("ping", {}).get("jitter"),
to_mbps(data.get("download", {}).get("bandwidth")),
to_mbps(data.get("upload", {}).get("bandwidth"))
))
conn.commit()
conn.close()