main
py 52 lines 1.98 KB
Raw
1 from datetime import datetime
2
3 from dotenv import load_dotenv
4 from loguru import logger
5 from sqlalchemy import select
6
7 from app.db.db_session import get_db_session
8 from app.db.db_session import get_sync_db_session
9 from app.integrations.models.customer_integration_settings import CustomerIntegrations
10 from app.integrations.modules.routes.duo import collect_duo_route
11 from app.integrations.modules.schema.duo import InvokeDuoRequest
12 from app.integrations.modules.schema.duo import InvokeDuoResponse
13 from app.schedulers.models.scheduler import JobMetadata
14
15 load_dotenv()
16
17
18 async def invoke_duo_integration_collect() -> InvokeDuoResponse:
19 """
20 Invokes the Duo integration collection.
21 """
22 logger.info("Invoking Duo integration collection.")
23 customer_codes = []
24 async with get_db_session() as session:
25 stmt = select(CustomerIntegrations).where(
26 CustomerIntegrations.integration_service_name == "DUO",
27 )
28 result = await session.execute(stmt)
29 customer_codes = [row.customer_code for row in result.scalars()]
30 logger.info(f"customer_codes: {customer_codes}")
31 for customer_code in customer_codes:
32 await collect_duo_route(
33 InvokeDuoRequest(
34 customer_code=customer_code,
35 integration_name="Duo",
36 ),
37 session,
38 )
39 # Close the session
40 await session.close()
41 with get_sync_db_session() as session:
42 # Synchronous ORM operations
43 job_metadata = session.query(JobMetadata).filter_by(job_id="invoke_duo_integration_collect").one_or_none()
44 if job_metadata:
45 job_metadata.last_success = datetime.utcnow()
46 session.add(job_metadata)
47 session.commit()
48 else:
49 # Handle the case where job_metadata does not exist
50 print("JobMetadata for 'invoke_duo_integration_collect' not found.")
51
52 return InvokeDuoResponse(success=True, message="Duo integration invoked.")