Add script for daily database housekeeping.

The script bin/daily_tasks.py is intended to be run shortly after
midnight every day (e.g., via cron).

At the moment it inserts any missing LDSP / FDSP events. It can
be extended with other tasks as needed either by expanding
Datastore.run_daily_tasks() or by adding to bin/daily_tasks.py.

Fixes #223.
This commit is contained in:
D. Berge
2022-05-13 19:04:39 +02:00
parent fdb5e0cbab
commit 04df9f41cc
2 changed files with 45 additions and 0 deletions

28
bin/daily_tasks.py Executable file
View File

@@ -0,0 +1,28 @@
#!/usr/bin/python3
"""
Do daily housekeeping on the database.
This is meant to run shortly after midnight every day.
"""
import configuration
from datastore import Datastore
if __name__ == '__main__':
print("Reading configuration")
surveys = configuration.surveys()
print("Connecting to database")
db = Datastore()
print("Reading surveys")
for survey in surveys:
print(f'Survey: {survey["id"]} ({survey["schema"]})')
db.set_survey(survey["schema"])
print("Daily tasks")
db.run_daily_tasks()
print("Done")

View File

@@ -720,3 +720,20 @@ class Datastore:
self.maybe_commit() self.maybe_commit()
# We do not commit if we've been passed a cursor, instead # We do not commit if we've been passed a cursor, instead
# we assume that we are in the middle of a transaction # we assume that we are in the middle of a transaction
def run_daily_tasks(self, cursor = None):
"""
Run once-a-day tasks
"""
if cursor is None:
cur = self.conn.cursor()
else:
cur = cursor
qry = "CALL log_midnight_shots();"
cur.execute(qry)
if cursor is None:
self.maybe_commit()
# We do not commit if we've been passed a cursor, instead
# we assume that we are in the middle of a transaction