Coverage for microservice_websocket/app/services/scheduler/__init__.py: 38%
26 statements
« prev ^ index » next coverage.py v7.0.0, created at 2022-12-20 14:31 +0000
« prev ^ index » next coverage.py v7.0.0, created at 2022-12-20 14:31 +0000
1from apscheduler.schedulers.asyncio import AsyncIOScheduler
3from ...config import config as Config
4from ...services.database import Node
5from ...utils.node import update_state
6from ...utils.sync_cache import sync_cached
9def init_scheduler():
10 scheduler = AsyncIOScheduler()
12 async def periodically_check_nodes():
13 from ... import socketManager
15 nodes: list[Node] = await Node.find_all().to_list()
17 update_frontend = False
19 for node in nodes:
20 new_state = update_state(node.state, node.lastSeenAt)
22 if node.state != new_state:
23 update_frontend = True
24 node.state = new_state
25 await node.save()
27 if update_frontend:
28 print("Detected node-state change(s), emitting 'change'")
29 await socketManager.emit("change-reading")
30 await socketManager.emit("change")
32 scheduler.add_job(
33 periodically_check_nodes,
34 "interval",
35 id="update_state",
36 seconds=Config.app.NODE_TIMEOUT_CHECK_INTERVAL,
37 )
39 async def periodically_sync_cache():
40 await sync_cached()
42 scheduler.add_job(
43 periodically_sync_cache,
44 "interval",
45 id="sync_cache",
46 seconds=Config.app.CHECK_SYNC_READY,
47 )
49 scheduler.start()