add logging to apps
This commit is contained in:
31
app/app.py
31
app/app.py
@@ -7,6 +7,10 @@ from misc import datetime, date, time, currDay, prevDay, ZoneInfo, currVersion,
|
||||
from db import (db, Period, Task, Event, User)
|
||||
from forms import (TaskForm, EventForm, PeriodForm, SignupForm, LoginForm, SettingsForm)
|
||||
from create_events import createEvents
|
||||
from log import appLogger
|
||||
|
||||
# init logger
|
||||
logger = appLogger('app')
|
||||
|
||||
basedir = os.path.abspath(os.path.dirname(__file__))
|
||||
|
||||
@@ -25,10 +29,6 @@ db.init_app(app)
|
||||
migrate = Migrate()
|
||||
migrate.init_app(app, db)
|
||||
|
||||
# Schedule creation of events every hour
|
||||
#with app.app_context():
|
||||
# scheduleCreateEvents(app, db, currDay, Period, Event, createEvents)
|
||||
|
||||
# Authentication stuff
|
||||
|
||||
login_manager = LoginManager()
|
||||
@@ -78,6 +78,7 @@ def index():
|
||||
# Authentication routes
|
||||
@app.route('/login', methods=['GET', 'POST'])
|
||||
def login():
|
||||
sourceIP = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
|
||||
form = LoginForm()
|
||||
if form.validate_on_submit():
|
||||
userName = form.userName.data
|
||||
@@ -87,13 +88,16 @@ def login():
|
||||
user = User.query.filter_by(userName=userName).first()
|
||||
if not user or not check_password_hash(user.password, password):
|
||||
flash('Credentials incorrect! Please try again')
|
||||
logger.info(f'User \'{userName}\' logon FAILED (bad password) from {sourceIP}')
|
||||
return redirect(url_for('login'))
|
||||
login_user(user, remember=remember)
|
||||
logger.info(f'User \'{userName}\' logged in successfully from {sourceIP}')
|
||||
return redirect(url_for('events'))
|
||||
return render_template('login.html', form=form)
|
||||
|
||||
@app.route('/createaccount', methods=['GET', 'POST'])
|
||||
def createAccount():
|
||||
sourceIP = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
|
||||
if signup_enabled == True:
|
||||
form = SignupForm()
|
||||
if form.validate_on_submit():
|
||||
@@ -105,6 +109,7 @@ def createAccount():
|
||||
password=generate_password_hash(form.password.data, method='sha256'))
|
||||
db.session.add(new_user)
|
||||
db.session.commit()
|
||||
logger.info(f'New user \'{new_user.userName}\' created from {sourceIP}')
|
||||
|
||||
return redirect(url_for('login'))
|
||||
return render_template('createAccount.html', form=form)
|
||||
@@ -113,12 +118,15 @@ def createAccount():
|
||||
@app.route('/logout')
|
||||
@login_required
|
||||
def logout():
|
||||
sourceIP = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
|
||||
logger.info(f'User \'{current_user.userName}\' logged out from {sourceIP} ')
|
||||
logout_user()
|
||||
return redirect(url_for('index'))
|
||||
|
||||
@app.route('/settings', methods=('GET', 'POST'))
|
||||
@login_required
|
||||
def settings():
|
||||
sourceIP = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
|
||||
user = User.query.get_or_404(current_user.id)
|
||||
form = SettingsForm(obj=user)
|
||||
if form.validate_on_submit():
|
||||
@@ -127,6 +135,7 @@ def settings():
|
||||
if form.password.data != '':
|
||||
user.password = generate_password_hash(form.password.data, method='sha256')
|
||||
db.session.commit()
|
||||
logger.info(f'User \'{current_user.userName}\' settings changed from {sourceIP}')
|
||||
return render_template('settings.html', form=form)
|
||||
|
||||
# Periods routes
|
||||
@@ -139,6 +148,7 @@ def periods():
|
||||
@app.route('/period/new', methods=('GET', 'POST'))
|
||||
@login_required
|
||||
def newPeriod():
|
||||
sourceIP = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
|
||||
form = PeriodForm()
|
||||
if form.validate_on_submit():
|
||||
period = Period(periodTime=form.periodTime.data,
|
||||
@@ -146,6 +156,7 @@ def newPeriod():
|
||||
)
|
||||
db.session.add(period)
|
||||
db.session.commit()
|
||||
logger.info(f'New period added by \'{current_user.userName}\' from {sourceIP}')
|
||||
# Run createEvents upon adding new period
|
||||
createEvents(db, currDay, Period, Event)
|
||||
return redirect(f'/period/edit/{period.period}')
|
||||
@@ -155,21 +166,25 @@ def newPeriod():
|
||||
@app.route('/period/edit/<int:periodNum>', methods=('GET', 'POST'))
|
||||
@login_required
|
||||
def editPeriod(periodNum):
|
||||
sourceIP = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
|
||||
period = Period.query.get_or_404(periodNum)
|
||||
form = PeriodForm(obj=period)
|
||||
if form.validate_on_submit():
|
||||
period.periodTime = form.periodTime.data
|
||||
period.weekendSchedule = form.weekendSchedule.data
|
||||
db.session.commit()
|
||||
logger.info(f'Period {periodNum} edited by \'{current_user.userName}\' from {sourceIP}')
|
||||
return redirect(f'/period/edit/{periodNum}')
|
||||
return render_template('editPeriod.html', period=period, form=form, datetime=datetime)
|
||||
|
||||
@app.post('/period/delete/<int:periodNum>')
|
||||
@login_required
|
||||
def delete_period(periodNum):
|
||||
sourceIP = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
|
||||
period = Period.query.get_or_404(periodNum)
|
||||
db.session.delete(period)
|
||||
db.session.commit()
|
||||
logger.info(f'Period {periodNum} deleted by \'{current_user.userName}\' from {sourceIP}')
|
||||
return redirect('/periods')
|
||||
|
||||
|
||||
@@ -185,6 +200,7 @@ def events():
|
||||
@app.route('/event/edit/<int:event_id>/', methods=('GET', 'POST'))
|
||||
@login_required
|
||||
def editEvent(event_id):
|
||||
sourceIP = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
|
||||
event = Event.query.get_or_404(event_id)
|
||||
form = EventForm(obj=event)
|
||||
if form.validate_on_submit():
|
||||
@@ -193,6 +209,7 @@ def editEvent(event_id):
|
||||
else:
|
||||
event.task_id = None
|
||||
db.session.commit()
|
||||
logger.info(f'Event {event_id} edited by \'{current_user.userName}\' from {sourceIP}')
|
||||
return redirect('/events')
|
||||
return render_template('editEvent.html', event=event, form=form, datetime=datetime)
|
||||
|
||||
@@ -212,6 +229,7 @@ def task(task_id):
|
||||
@app.route('/task/new', methods=('GET', 'POST'))
|
||||
@login_required
|
||||
def newTask():
|
||||
sourceIP = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
|
||||
form = TaskForm()
|
||||
if form.validate_on_submit():
|
||||
task = Task(title=form.title.data,
|
||||
@@ -219,24 +237,29 @@ def newTask():
|
||||
created_timestamp=int(time.time()))
|
||||
db.session.add(task)
|
||||
db.session.commit()
|
||||
logger.info(f'New task added by \'{current_user.userName}\' from {sourceIP}')
|
||||
return redirect(f'/task/{task.id}')
|
||||
return render_template('newtask.html', form=form)
|
||||
|
||||
@app.route('/task/<int:task_id>/edit', methods=('GET', 'POST'))
|
||||
@login_required
|
||||
def editTask(task_id):
|
||||
sourceIP = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
|
||||
task = Task.query.get_or_404(task_id)
|
||||
form = TaskForm(obj=task)
|
||||
if form.validate_on_submit():
|
||||
task.title=form.title.data
|
||||
task.description=form.description.data
|
||||
db.session.commit()
|
||||
logger.info(f'Task {task_id} edited by \'{current_user.userName}\' from {sourceIP}')
|
||||
return redirect(f'/task/{task_id}')
|
||||
return render_template('edittask.html', task=task, form=form)
|
||||
@app.post('/task/<int:task_id>/delete')
|
||||
@login_required
|
||||
def delete_task(task_id):
|
||||
sourceIP = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
|
||||
task = Task.query.get_or_404(task_id)
|
||||
db.session.delete(task)
|
||||
db.session.commit()
|
||||
logger.info(f'Task {task_id} deleted by \'{current_user.userName}\' from {sourceIP}')
|
||||
return redirect('/tasks')
|
@@ -1,3 +1,6 @@
|
||||
from log import appLogger
|
||||
|
||||
logger = appLogger('app')
|
||||
def createEvents(db, currDay, Period, Event):
|
||||
periods = Period.query.all()
|
||||
for period in periods:
|
||||
@@ -10,4 +13,4 @@ def createEvents(db, currDay, Period, Event):
|
||||
db.session.add(event)
|
||||
db.session.commit()
|
||||
|
||||
print("createEvents script ran successfully")
|
||||
logger.info('createEvents script ran successfully')
|
12
app/log.py
12
app/log.py
@@ -0,0 +1,12 @@
|
||||
import logging
|
||||
import sys
|
||||
|
||||
def appLogger(name):
|
||||
formatter = logging.Formatter(fmt='%(asctime)s %(levelname)-8s %(message)s',
|
||||
datefmt='%Y-%m-%d %H:%M:%S')
|
||||
screen_handler = logging.StreamHandler(stream=sys.stdout)
|
||||
screen_handler.setFormatter(formatter)
|
||||
logger = logging.getLogger(name)
|
||||
logger.setLevel(logging.DEBUG)
|
||||
logger.addHandler(screen_handler)
|
||||
return logger
|
Reference in New Issue
Block a user