From 45701a6ecc90d80098e8dcbe7932e7357584a443 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Mon, 4 Jul 2022 14:26:33 +0200 Subject: [PATCH] feat(crons): run 24/7 feat(alerts): support env-file override --- ee/api/app_crons.py | 37 ++++++++++++++-------- ee/api/entrypoint_alerts.sh | 3 ++ ee/api/entrypoint_crons.sh | 2 +- ee/api/routers/crons/core_dynamic_crons.py | 10 +++--- 4 files changed, 34 insertions(+), 18 deletions(-) create mode 100755 ee/api/entrypoint_alerts.sh diff --git a/ee/api/app_crons.py b/ee/api/app_crons.py index 3dfea4fe4..ced170bd1 100644 --- a/ee/api/app_crons.py +++ b/ee/api/app_crons.py @@ -1,19 +1,30 @@ print("============= CRONS =============") -import sys -from routers.crons import core_dynamic_crons +import logging + +from apscheduler.schedulers.asyncio import AsyncIOScheduler +from decouple import config +from fastapi import FastAPI + +from routers.crons import core_crons, core_dynamic_crons + +app = FastAPI() -def process(action): - { - "TELEMETRY": core_dynamic_crons.telemetry_cron, - "JOB": core_dynamic_crons.run_scheduled_jobs, - "REPORT": core_dynamic_crons.weekly_report2 - }.get(action.upper(), lambda: print(f"{action} not found in crons-definitions"))() +@app.get("/") +async def root(): + return {"status": "Running"} -if __name__ == '__main__': - if len(sys.argv) < 2 or len(sys.argv[1]) < 1: - print("please provide actions as argument") - else: - process(sys.argv[1]) +app.schedule = AsyncIOScheduler() +app.schedule.start() + +if not config("LOCAL_CRONS", default=False, cast=bool): + for job in core_crons.cron_jobs + core_dynamic_crons.cron_jobs + core_dynamic_crons.SINGLE_CRONS: + app.schedule.add_job(id=job["func"].__name__, **job) + + logging.basicConfig(level=config("LOGLEVEL", default=logging.INFO)) + logging.getLogger('apscheduler').setLevel(config("LOGLEVEL", default=logging.INFO)) + +else: + print("Nothing to do because LOCAL_CRONS mode is enabled.") diff --git a/ee/api/entrypoint_alerts.sh b/ee/api/entrypoint_alerts.sh new file mode 100755 index 000000000..3165a88c7 --- /dev/null +++ b/ee/api/entrypoint_alerts.sh @@ -0,0 +1,3 @@ +#!/bin/bash +bash env_vars.sh +uvicorn app:app --host 0.0.0.0 --reload diff --git a/ee/api/entrypoint_crons.sh b/ee/api/entrypoint_crons.sh index da641e2f0..cf2c18394 100755 --- a/ee/api/entrypoint_crons.sh +++ b/ee/api/entrypoint_crons.sh @@ -1,3 +1,3 @@ #!/bin/bash bash env_vars.sh -python app_crons.py $ACTION +uvicorn app:app --host 0.0.0.0 --reload --proxy-headers diff --git a/ee/api/routers/crons/core_dynamic_crons.py b/ee/api/routers/crons/core_dynamic_crons.py index 35d92ebbe..504300759 100644 --- a/ee/api/routers/crons/core_dynamic_crons.py +++ b/ee/api/routers/crons/core_dynamic_crons.py @@ -26,8 +26,10 @@ cron_jobs = [ {"func": unlock_cron, "trigger": "cron", "hour": "*"} ] +SINGLE_CRONS = [{"func": telemetry_cron, "trigger": "cron", "day_of_week": "*"}, + {"func": run_scheduled_jobs, "trigger": "interval", "seconds": 60, "misfire_grace_time": 20}, + {"func": weekly_report2, "trigger": "cron", "day_of_week": "mon", "hour": 5, + "misfire_grace_time": 60 * 60}] + if config("LOCAL_CRONS", default=False, cast=bool): - cron_jobs += [{"func": telemetry_cron, "trigger": "cron", "day_of_week": "*"}, - {"func": run_scheduled_jobs, "trigger": "interval", "seconds": 60, "misfire_grace_time": 20}, - {"func": weekly_report2, "trigger": "cron", "day_of_week": "mon", "hour": 5, - "misfire_grace_time": 60 * 60}] + cron_jobs += SINGLE_CRONS