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

1from apscheduler.schedulers.asyncio import AsyncIOScheduler 

2 

3from ...config import config as Config 

4from ...services.database import Node 

5from ...utils.node import update_state 

6from ...utils.sync_cache import sync_cached 

7 

8 

9def init_scheduler(): 

10 scheduler = AsyncIOScheduler() 

11 

12 async def periodically_check_nodes(): 

13 from ... import socketManager 

14 

15 nodes: list[Node] = await Node.find_all().to_list() 

16 

17 update_frontend = False 

18 

19 for node in nodes: 

20 new_state = update_state(node.state, node.lastSeenAt) 

21 

22 if node.state != new_state: 

23 update_frontend = True 

24 node.state = new_state 

25 await node.save() 

26 

27 if update_frontend: 

28 print("Detected node-state change(s), emitting 'change'") 

29 await socketManager.emit("change-reading") 

30 await socketManager.emit("change") 

31 

32 scheduler.add_job( 

33 periodically_check_nodes, 

34 "interval", 

35 id="update_state", 

36 seconds=Config.app.NODE_TIMEOUT_CHECK_INTERVAL, 

37 ) 

38 

39 async def periodically_sync_cache(): 

40 await sync_cached() 

41 

42 scheduler.add_job( 

43 periodically_sync_cache, 

44 "interval", 

45 id="sync_cache", 

46 seconds=Config.app.CHECK_SYNC_READY, 

47 ) 

48 

49 scheduler.start()