Coverage for rfpy/jobs/offload.py: 100%
29 statements
« prev ^ index » next coverage.py v7.0.1, created at 2022-12-31 16:00 +0000
« prev ^ index » next coverage.py v7.0.1, created at 2022-12-31 16:00 +0000
1import logging
3from sqlalchemy.orm import sessionmaker
5from rfpy.jobs.events.action import handle_event
6from rfpy.model.audit.event import AuditEvent
7from rfpy.utils import configure_rfpy, build_engine
8from rfpy.mail import stub
9from rfpy import conf
11IS_UWSGI = False
13try: # pragma: no cover
14 import uwsgi # type: ignore # noqa: F401
15 import uwsgidecorators
16 IS_UWSGI = True
17 print('\nRunning UWSGI')
18except ImportError:
19 print('\nNot Running UWSGI')
20 from rfpy.jobs import uwsgi_stubs as uwsgidecorators
23log = logging.getLogger(__name__)
26@uwsgidecorators.spool
27def spool_event_handler(arg_dict: dict):
28 if conf.CONF is None: # pragma: no cover
29 configure_rfpy()
30 event_id = arg_dict.get('event_id', None)
31 if event_id is None:
32 log.error('spool_event_handler called without event_id')
33 return
34 engine = build_engine()
35 Session = sessionmaker(engine)
36 session = Session()
37 evt = session.query(AuditEvent).get(event_id)
39 if evt is None:
40 log.error('Unable to handle event, ID %s not found', event_id)
41 return
42 try:
43 handle_event(evt, session, stub)
44 except Exception:
45 # Ensure function returns so UWSGI doesn't re-spool
46 log.exception('Failure processing Event #%s', event_id)