Redis Messaging implementation #30
@@ -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()
|
|
@@ -9,31 +9,43 @@ services:
|
|||||||
- MYSQL_HOST=db
|
- MYSQL_HOST=db
|
||||||
- MYSQL_PORT=3306
|
- MYSQL_PORT=3306
|
||||||
- MYSQL_DB=bellscheduler
|
- MYSQL_DB=bellscheduler
|
||||||
|
- REDIS_HOST=redis
|
||||||
|
- REDIS_PORT=6379
|
||||||
|
- REDIS_DBNUM=0
|
||||||
- SECRET_KEY=notasecuresecretkeyonlyuseforlocaldevelopment
|
- SECRET_KEY=notasecuresecretkeyonlyuseforlocaldevelopment
|
||||||
- NODE_NAME=local
|
- NODE_NAME=local
|
||||||
- POD_NAME=local
|
- POD_NAME=local
|
||||||
- FLASK_ENV=development
|
- FLASK_ENV=development
|
||||||
- FLASK_DEBUG=1
|
- FLASK_DEBUG=1
|
||||||
- PYTHONUNBUFFERED=1
|
- PYTHONUNBUFFERED=1
|
||||||
|
- SIGNUP_ENABLED=YES
|
||||||
ports:
|
ports:
|
||||||
- 127.0.0.1:80:80
|
- 127.0.0.1:80:80
|
||||||
worker:
|
worker:
|
||||||
image: container-registry.infra.dubyatp.xyz/bellscheduler/app:latest-testing
|
image: container-registry.infra.dubyatp.xyz/bellscheduler/app:latest-testing
|
||||||
restart: always
|
restart: always
|
||||||
entrypoint: python3
|
entrypoint: celery
|
||||||
command: "-m worker"
|
command: "-A worker.celerymsg worker --loglevel=DEBUG -B"
|
||||||
environment:
|
environment:
|
||||||
- MYSQL_USER=root
|
- MYSQL_USER=root
|
||||||
- MYSQL_PASSWORD=notasecuresecretkeyonlyuseforlocaldevelopment
|
- MYSQL_PASSWORD=notasecuresecretkeyonlyuseforlocaldevelopment
|
||||||
- MYSQL_HOST=db
|
- MYSQL_HOST=db
|
||||||
- MYSQL_PORT=3306
|
- MYSQL_PORT=3306
|
||||||
- MYSQL_DB=bellscheduler
|
- MYSQL_DB=bellscheduler
|
||||||
|
- REDIS_HOST=redis
|
||||||
|
- REDIS_PORT=6379
|
||||||
|
- REDIS_DBNUM=0
|
||||||
- SECRET_KEY=notasecuresecretkeyonlyuseforlocaldevelopment
|
- SECRET_KEY=notasecuresecretkeyonlyuseforlocaldevelopment
|
||||||
- NODE_NAME=local
|
- NODE_NAME=local
|
||||||
- POD_NAME=local
|
- POD_NAME=local
|
||||||
- FLASK_ENV=development
|
- FLASK_ENV=development
|
||||||
- FLASK_DEBUG=1
|
- FLASK_DEBUG=1
|
||||||
- PYTHONUNBUFFERED=1
|
- PYTHONUNBUFFERED=1
|
||||||
|
redis:
|
||||||
|
image: redis:7.0.10-alpine3.17
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 127.0.0.1:6379:6379
|
||||||
db:
|
db:
|
||||||
image: mariadb:10.7.8-focal
|
image: mariadb:10.7.8-focal
|
||||||
restart: always
|
restart: always
|
||||||
|
Reference in New Issue
Block a user