diff --git a/mem/__init__.py b/mem/__init__.py index 864ecdd..689249d 100644 --- a/mem/__init__.py +++ b/mem/__init__.py @@ -2,7 +2,7 @@ from typing import Any, Optional class service: - id = int + id: int url: str status: Optional[int] online: bool @@ -10,6 +10,7 @@ class service: error: Optional[str] ping: Optional[int] icon_filetype: str + ping_type: int def __init__( self, @@ -18,11 +19,13 @@ class service: label: str = "", public: bool = True, icon_filetype: str = "svg", + ping_type: int = 0, ): self.id = id self.url = url self.public = public self.label = label + self.ping_type = ping_type self.online = False self.status = None @@ -41,6 +44,7 @@ class service: "label": self.label, "icon_filetype": self.icon_filetype, "id": self.id, + "ping_type": self.ping_type, } def set_status(self, status: Optional[int]): @@ -64,7 +68,9 @@ services: list[service] = [ service(4, "https://request.ihatemen.uk/", "Overseerr"), service(5, "https://id.ihatemen.uk/", "PocketID"), service(6, "http://tautulli.local", "Tautulli", False), - service(7, "https://transmission.local", "Transmission", False), + service( + 7, "https://transmission.local", "Transmission", False, ping_type=1 + ), service(8, "https://vault.ihatemen.uk", "Vault Warden"), service(9, "https://nginx.local", "Nginx (NPM)", False), ] diff --git a/poll_services.py b/poll_services.py index 8e40d14..0e285e3 100644 --- a/poll_services.py +++ b/poll_services.py @@ -7,11 +7,22 @@ import time async def check_service(client: httpx.AsyncClient, s: service): try: before = time.perf_counter() - r = await client.get( - url=s.url, - follow_redirects=True, - timeout=1, - ) + match s.ping_type: + case 0: + r = await client.head( + url=s.url, + follow_redirects=True, + timeout=1, + ) + case 1: + r = await client.get( + url=s.url, + follow_redirects=True, + timeout=1, + ) + case _: + raise httpx.HTTPError("Unknown ping type") + after = time.perf_counter() s.set_error(None) s.set_online(r.status_code == 200) @@ -33,9 +44,10 @@ def start_async_loop(): async def update_services(loop: asyncio.AbstractEventLoop): print("Starting service updates...") - async with httpx.AsyncClient() as public_client, httpx.AsyncClient( - verify=False - ) as local_client: + async with ( + httpx.AsyncClient() as public_client, + httpx.AsyncClient(verify=False) as local_client, + ): while True: tasks = [ check_service(public_client if s.public else local_client, s)