Made polling services async

This commit is contained in:
2025-08-29 22:36:35 +02:00
parent d7a118931b
commit d8dd7c2c5e
3 changed files with 43 additions and 21 deletions

View File

@@ -1,6 +1,6 @@
# import requests as r # import requests as r
from flask import jsonify, Flask from flask import jsonify, Flask
from poll_services import update_services from poll_services import start_async_loop
from mem import services from mem import services
import threading import threading
@@ -16,7 +16,9 @@ def status():
# Only run if directly running file # Only run if directly running file
if __name__ == "__main__": if __name__ == "__main__":
threading.Thread(target=update_services, daemon=True).start()
t = threading.Thread(target=start_async_loop, daemon=True)
t.start()
# Run flask app # Run flask app
app.run(debug=True, use_reloader=False) app.run(debug=True, use_reloader=False)

View File

@@ -25,6 +25,9 @@ class service:
def set_status(self, status: int): def set_status(self, status: int):
self.status = status self.status = status
def set_online(self, b: bool):
self.online = b
services: list[service] = [ services: list[service] = [
service("https://git.ihatemen.uk"), service("https://git.ihatemen.uk"),

View File

@@ -1,24 +1,41 @@
from mem import services from mem import services, service
import requests import httpx
import urllib3 import urllib3
import time import asyncio
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def update_services() -> None: async def check_service(client: httpx.AsyncClient, s: service):
print("Updating Service Status")
while True:
for s in services:
try: try:
r = requests.head( r = await client.head(
url=s.url, url=s.url,
verify=s.public, follow_redirects=True,
allow_redirects=True,
timeout=1, timeout=1,
) )
s.set_status(r.ok) print(r.status_code)
except requests.exceptions.RequestException as e: s.set_online(r.status_code == 200)
except httpx.RequestError as e:
print(e) print(e)
s.set_status(False) s.set_online(False)
time.sleep(3)
def start_async_loop():
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
asyncio.run_coroutine_threadsafe(update_services(loop=loop), loop=loop)
loop.run_forever()
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:
while True:
tasks = [
check_service(public_client if s.public else local_client, s)
for s in services
]
await asyncio.gather(*tasks)
await asyncio.sleep(2)