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
|
# Remove or leave empty for temporary (/tmp/ftracker-db.json) storage
|
||||||
db_file = db.json
|
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)
|
# List of people to be allowed, in .csv format (comma, no delimiters)
|
||||||
# Col1: First Name(s), Col2: Last Name(s), Col3 (optional): EMail
|
# Col1: First Name(s), Col2: Last Name(s), Col3 (optional): EMail
|
||||||
# Remove or leave empty for no check
|
# Remove or leave empty for no check
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import atexit
|
||||||
import json
|
import json
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from slugify import slugify
|
from slugify import slugify
|
||||||
|
@ -21,6 +22,17 @@ from flask import Flask, request, redirect
|
||||||
app = Flask(__name__, static_folder='../web')
|
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')
|
@app.route('/guidelines')
|
||||||
def get_guidelines():
|
def get_guidelines():
|
||||||
dest = config['guideline_url'] or None
|
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 scrollbox = document.querySelector('.scroll')
|
||||||
var timehead = document.querySelector('#timeheader')
|
var timehead = document.querySelector('#timeheader')
|
||||||
|
|
Loading…
Reference in New Issue