Redis Messaging implementation #30

Merged
williamp merged 2 commits from redis-messaging into testing 2023-04-16 14:44:42 +00:00
3 changed files with 28 additions and 16 deletions
Showing only changes of commit 85753c5afe - Show all commits

View File

@@ -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)

View File

@@ -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

View File

@@ -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()