rewrite worker to run on celery and redis
This commit is contained in:
@@ -8,9 +8,10 @@ from misc import datetime, date, time, currDay, prevDay, ZoneInfo, currVersion,
|
|||||||
from db import (db, Period, Task, Event, User)
|
from db import (db, Period, Task, Event, User)
|
||||||
from sqlalchemy import inspect
|
from sqlalchemy import inspect
|
||||||
from forms import (TaskForm, EventForm, PeriodForm, SignupForm, LoginForm, SettingsForm)
|
from forms import (TaskForm, EventForm, PeriodForm, SignupForm, LoginForm, SettingsForm)
|
||||||
from create_events import createEvents
|
|
||||||
from log import appLogger
|
from log import appLogger
|
||||||
|
|
||||||
|
from worker import runCreateEvents
|
||||||
|
|
||||||
# init logger
|
# init logger
|
||||||
logger = appLogger('app')
|
logger = appLogger('app')
|
||||||
|
|
||||||
@@ -183,7 +184,7 @@ def newPeriod():
|
|||||||
db.session.commit()
|
db.session.commit()
|
||||||
logger.info(f'New period added by \'{current_user.userName}\' from {sourceIP}')
|
logger.info(f'New period added by \'{current_user.userName}\' from {sourceIP}')
|
||||||
# Run createEvents upon adding new period
|
# Run createEvents upon adding new period
|
||||||
createEvents(db, currDay, Period, Event)
|
runCreateEvents()
|
||||||
return redirect(f'/period/edit/{period.period}')
|
return redirect(f'/period/edit/{period.period}')
|
||||||
return render_template('newPeriod.html', form=form)
|
return render_template('newPeriod.html', form=form)
|
||||||
|
|
||||||
|
@@ -26,6 +26,10 @@ WTForms-SQLAlchemy==0.3.0
|
|||||||
# APScheduler automated scheduler
|
# APScheduler automated scheduler
|
||||||
APScheduler==3.10.1
|
APScheduler==3.10.1
|
||||||
|
|
||||||
|
# Celery Task Queue
|
||||||
|
celery[redis]==5.2.7
|
||||||
|
redis==4.5.4
|
||||||
|
|
||||||
# Python Time packages
|
# Python Time packages
|
||||||
pytz==2022.7.1
|
pytz==2022.7.1
|
||||||
|
|
||||||
|
@@ -1,9 +1,10 @@
|
|||||||
|
from celery import Celery
|
||||||
|
from celery.schedules import crontab
|
||||||
|
from create_events import createEvents
|
||||||
import os
|
import os
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from misc import currDay, datetime, time, timedelta
|
from misc import currDay, datetime, time, timedelta
|
||||||
from db import db, Period, Event
|
from db import db, Period, Event
|
||||||
from create_events import createEvents
|
|
||||||
from apscheduler.schedulers.background import BlockingScheduler
|
|
||||||
|
|
||||||
basedir = os.path.abspath(os.path.dirname(__file__))
|
basedir = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
@@ -18,18 +19,24 @@ app.config['SQLALCHEMY_DATABASE_URI'] =\
|
|||||||
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
||||||
db.init_app(app)
|
db.init_app(app)
|
||||||
|
|
||||||
# Define function to run create_events with app context
|
redis_url = 'redis://' + \
|
||||||
def run_create_events():
|
os.environ['REDIS_HOST'] + \
|
||||||
|
':' + os.environ['REDIS_PORT'] + \
|
||||||
|
'/' + os.environ['REDIS_DBNUM']
|
||||||
|
|
||||||
|
celerymsg = Celery('tasks', backend=redis_url, broker=redis_url)
|
||||||
|
|
||||||
|
# Task definitions
|
||||||
|
@celerymsg.task
|
||||||
|
def runCreateEvents():
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
createEvents(db, currDay, Period, Event)
|
createEvents(db, currDay, Period, Event)
|
||||||
|
|
||||||
# Call createEvents on initial launch of the script
|
# Scheduled tasks
|
||||||
run_create_events()
|
celerymsg.conf.beat_schedule = {
|
||||||
|
'hourly-createevents': {
|
||||||
|
'task': 'worker.runCreateEvents',
|
||||||
# Set up scheduler to run function at 59th minute of every hour
|
# Run hourly
|
||||||
scheduler = BlockingScheduler()
|
'schedule': crontab(hour="*"),
|
||||||
scheduler.add_job(run_create_events, 'cron', minute=59)
|
}
|
||||||
|
}
|
||||||
# Start scheduler
|
|
||||||
scheduler.start()
|
|
Reference in New Issue
Block a user