From c502f359e78bedf47994ee6b8973e161d04502f5 Mon Sep 17 00:00:00 2001 From: William Peebles Date: Sun, 19 Mar 2023 22:34:00 -0400 Subject: [PATCH] adjust worker for mysql, add more stable background process --- app/worker.py | 34 ++++++++++++++++++++-------------- docker-compose.yaml | 17 +++++++++++++++++ 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/app/worker.py b/app/worker.py index 3593008..34e292f 100644 --- a/app/worker.py +++ b/app/worker.py @@ -1,31 +1,37 @@ import os from flask import Flask -from misc import currDay +from misc import currDay, datetime, time, timedelta from db import db, Period, Event from create_events import createEvents -from apscheduler.schedulers.background import BlockingScheduler -from apscheduler.triggers.cron import CronTrigger +from apscheduler.schedulers.background import BackgroundScheduler basedir = os.path.abspath(os.path.dirname(__file__)) app = Flask(__name__) app.config['SECRET_KEY'] = os.environ['SECRET_KEY'] app.config['SQLALCHEMY_DATABASE_URI'] =\ - 'sqlite:///' + os.path.join(basedir, os.environ['SQLITE_DB']) + 'mysql://' + os.environ['MYSQL_USER'] + \ + ':' + os.environ['MYSQL_PASSWORD'] + \ + '@' + os.environ['MYSQL_HOST'] + \ + ':' + os.environ['MYSQL_PORT'] + \ + '/' + os.environ['MYSQL_DB'] app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db.init_app(app) -# declare BlockingScheduler -sched = BlockingScheduler() +# Calculate the next time the function should run (at the :59 mark of the next hour) +now = datetime.now() +next_hour = now.replace(hour=now.hour + 1, minute=0, second=0, microsecond=0) +next_run = next_hour - timedelta(minutes=1) -# run createEvents upon app launch +# Create scheduler and add job to call createEvents at the specified time +scheduler = BackgroundScheduler() +scheduler.add_job(createEvents, 'date', run_date=next_run, args=[db, currDay, Period, Event]) +scheduler.start() + +# Call createEvents on initial launch of the script with app.app_context(): createEvents(db, currDay, Period, Event) -def eventsTask(): - with app.app_context(): - createEvents(db, currDay, Period, Event) -sched.add_job(eventsTask, CronTrigger.from_crontab('00 * * * *')) -print("Background worker started") -sched.start() - +# Keep the program running indefinitely +while True: + time.sleep(60) \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index c0fc347..c811c2a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -17,6 +17,23 @@ services: - PYTHONUNBUFFERED=1 ports: - 127.0.0.1:80:80 + worker: + image: container-registry.infra.dubyatp.xyz/bellscheduler/app:latest-testing + restart: always + entrypoint: python3 + command: "-m worker" + environment: + - MYSQL_USER=root + - MYSQL_PASSWORD=notasecuresecretkeyonlyuseforlocaldevelopment + - MYSQL_HOST=db + - MYSQL_PORT=3306 + - MYSQL_DB=bellscheduler + - SECRET_KEY=notasecuresecretkeyonlyuseforlocaldevelopment + - NODE_NAME=local + - POD_NAME=local + - FLASK_ENV=development + - FLASK_DEBUG=1 + - PYTHONUNBUFFERED=1 db: image: mariadb:10.7.8-focal restart: always -- 2.49.1