SeaCogs/speedtest/models.py

77 lines
1.5 KiB
Python
Raw Normal View History

2024-05-25 17:55:05 -04:00
from datetime import datetime
from pydantic import BaseModel
class Speedtest(BaseModel):
type: str
timestamp: datetime
ping: "Ping"
download: "Bandwidth"
upload: "Bandwidth"
isp: str
interface: "Interface"
server: "Server"
result: "Result"
@classmethod
def from_json(cls, data: dict) -> "Speedtest":
return cls(
type=data["type"],
timestamp=datetime.fromisoformat(data["timestamp"]),
ping=Ping(**data["ping"]),
download=Bandwidth(**data["download"]),
upload=Bandwidth(**data["upload"]),
isp=data["isp"],
interface=Interface(**data["interface"]),
server=Server(**data["server"]),
result=Result(**data["result"])
)
class Bandwidth(BaseModel):
bandwidth: float
bytes: int
elapsed: int
latency: "Latency"
2024-05-25 18:08:18 -04:00
@property
def mbps(self) -> float:
return self.bandwidth / 1_000_000
class Latency(BaseModel):
iqm: float
low: float
high: float
jitter: float
2024-05-25 17:55:05 -04:00
class Interface(BaseModel):
internalIp: str
name: str
macAddr: str
isVpn: bool
externalIp: str
class Ping(BaseModel):
jitter: float
latency: float
low: float
high: float
class Server(BaseModel):
id: int
2024-05-25 17:55:05 -04:00
name: str
location: str
country: str
host: str
port: int
ip: str
2024-05-25 17:58:22 -04:00
class Result(BaseModel):
2024-05-25 17:55:05 -04:00
id: str
url: str
persisted: bool
@property
2024-05-25 17:58:22 -04:00
def image(self) -> str:
2024-05-25 17:55:05 -04:00
return self.url + ".png"