diff --git a/app.py b/app.py index 44b996d..57e5d50 100644 --- a/app.py +++ b/app.py @@ -9,10 +9,14 @@ from models import service, log from typing import Any, Optional, cast import json from datetime import timedelta +from config import timeout -def prepare_chart_data(logs: list[log]) -> tuple[list[str], list[Optional[int]]]: - if len(logs) <= 0: +# Prepares log data for chart.js chart +def prepare_chart_data( + logs: list[log], +) -> tuple[list[str], list[Optional[int]]]: + if len(logs) <= 0: # Return empty if there are no logs return ([], []) x = [logs[0].dateCreated.isoformat()] @@ -21,8 +25,11 @@ def prepare_chart_data(logs: list[log]) -> tuple[list[str], list[Optional[int]]] for i in range(1, len(logs)): log1 = logs[i] log2 = logs[i - 1] - if (abs(log1.dateCreated - log2.dateCreated)) > timedelta(seconds=6): + # Check if the gap in points exceeds a threshold + if (abs(log1.dateCreated - log2.dateCreated)) > timedelta( + milliseconds=1.5 * (timeout + 1000) + ): x.append(log2.dateCreated.isoformat()) y.append(None) diff --git a/config.py b/config.py new file mode 100644 index 0000000..adaa9b5 --- /dev/null +++ b/config.py @@ -0,0 +1 @@ +timeout: int = 4000 diff --git a/poll_services.py b/poll_services.py index e845004..e4aae3c 100644 --- a/poll_services.py +++ b/poll_services.py @@ -4,6 +4,7 @@ import asyncio import time from models import log, service from sqlalchemy.orm import sessionmaker +from config import timeout as timeout_ async def ping(client: aiohttp.ClientSession, s: service) -> int: @@ -53,11 +54,11 @@ async def update_services(loop: asyncio.AbstractEventLoop): # Create new session with app.app_context(): WorkerSession = sessionmaker(bind=db.engine) - timeout = aiohttp.client.ClientTimeout(total=4) + timeout = aiohttp.client.ClientTimeout(total=timeout_ / 1000) client = aiohttp.ClientSession(timeout=timeout, auto_decompress=False) while True: session = WorkerSession() - sleeptask = asyncio.create_task(asyncio.sleep(5)) + sleeptask = asyncio.create_task(asyncio.sleep(timeout_ / 1000 + 1)) tasks = [ check_service(client=client, s=s) for s in session.query(service).all()