11from datetime import datetime
22
3+ from sqlalchemy import text
34from starlette .types import ASGIApp , Receive , Scope , Send
4-
55from apscheduler import AsyncScheduler
66from apscheduler .triggers .interval import IntervalTrigger
77
8+ from app .database import AsyncSessionFactory
89from app .utils .logging import AppLogger
910
1011logger = AppLogger ().get_logger ()
1112
1213
13- def tick ():
14-
15- logger .info (f">>>> Be or not to be...{ datetime .now ()} " )
14+ async def tick ():
15+ async with AsyncSessionFactory () as session :
16+ stmt = text ("select 1;" )
17+ logger .info (f">>>> Be or not to be...{ datetime .now ()} " )
18+ result = await session .execute (stmt )
19+ logger .info (f">>>> Result: { result .scalar ()} " )
20+ return True
1621
1722
1823class SchedulerMiddleware :
19- # TODO: need access to request to be able to get db conn pool
20-
2124 def __init__ (
2225 self ,
2326 app : ASGIApp ,
@@ -30,7 +33,7 @@ async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
3033 if scope ["type" ] == "lifespan" :
3134 async with self .scheduler :
3235 await self .scheduler .add_schedule (
33- tick , IntervalTrigger (seconds = 25 ), id = "tick"
36+ tick , IntervalTrigger (seconds = 25 ), id = "tick-sql-25 "
3437 )
3538 await self .scheduler .start_in_background ()
3639 await self .app (scope , receive , send )
0 commit comments