Add automatic entry deletion after a specified amount of time.

This commit is contained in:
Oskar Winkels 2021-01-13 00:05:43 +01:00
parent 09a4bcb201
commit a5acdc53a1
4 changed files with 62 additions and 1 deletions

View File

@ -4,6 +4,9 @@
# Remove or leave empty for temporary (/tmp/ftracker-db.json) storage
db_file = db.json
# Delete all information after X days (e.g. for GDPR compliance)
delete_after_days = 28
# List of people to be allowed, in .csv format (comma, no delimiters)
# Col1: First Name(s), Col2: Last Name(s), Col3 (optional): EMail
# Remove or leave empty for no check

View File

@ -1,3 +1,4 @@
import atexit
import json
from datetime import datetime
from slugify import slugify
@ -21,6 +22,17 @@ from flask import Flask, request, redirect
app = Flask(__name__, static_folder='../web')
if config['delete_after_days']:
from .deleter import Deleter
deleter = Deleter(db, int(config['delete_after_days']))
def shutdown():
print('\rReceived stop signal, stopping threads...')
deleter.stop()
db.close()
atexit.register(shutdown)
@app.route('/guidelines')
def get_guidelines():
dest = config['guideline_url'] or None

42
ftracker/deleter.py Normal file
View File

@ -0,0 +1,42 @@
from threading import Thread, Event
from datetime import datetime, timedelta
from tinydb import Query
ONE_DAY_IN_S = 24 * 60 * 60
class Deleter(Thread):
def delete_old_entries(self):
print('Clearing database of old entries...')
td = timedelta(days=self.days)
threshold = datetime.utcnow() - td
iso = threshold.isoformat() + 'Z'
Entry = Query()
self.db.remove((Entry.arrival < iso))
print('Deleted everything until UTC', iso)
def __init__(self, db, days):
self.db = db
self.days = days
self.delete_old_entries()
Thread.__init__(self, daemon=True)
self.stopped = Event()
self.start()
def run(self):
while not self.stopped.wait(ONE_DAY_IN_S):
self.delete_old_entries()
def stop(self):
self.stopped.set()

View File

@ -322,7 +322,11 @@
}
document.querySelector('input#end').value = localISOTimeMinutes(new Date())
var now = new Date()
var startDate = new Date()
startDate.setDate(now.getDate() - (4*7))
document.querySelector('input#start').value = localISOTimeMinutes(startDate)
document.querySelector('input#end').value = localISOTimeMinutes(now)
var scrollbox = document.querySelector('.scroll')
var timehead = document.querySelector('#timeheader')