Add automatic entry deletion after a specified amount of time.
This commit is contained in:
parent
09a4bcb201
commit
a5acdc53a1
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue