Added script for cleaning the database
This commit is contained in:
parent
7c7ca47a87
commit
2f5bff40af
1 changed files with 69 additions and 0 deletions
69
backend/database_cleaning.py
Normal file
69
backend/database_cleaning.py
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
'''
|
||||
This program will clean the sqlite database every now and then to keep it from exploding.
|
||||
|
||||
'''
|
||||
|
||||
|
||||
import serial
|
||||
import time
|
||||
import threading
|
||||
import sqlite3
|
||||
import copy
|
||||
import datetime
|
||||
from serial import SerialException
|
||||
import configparser
|
||||
import random
|
||||
|
||||
import logging as log
|
||||
log.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', level=log.INFO)
|
||||
|
||||
|
||||
def _initilize_DB(_sqlite_location):
|
||||
_db_conn = sqlite3.connect(_sqlite_location, timeout=60.0)
|
||||
cursor = _db_conn.cursor()
|
||||
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='Events'")
|
||||
if cursor.fetchone() == None:
|
||||
cursor.execute('''CREATE TABLE Events
|
||||
(UTCUnixTime INTEGER, SubSeconds REAL, TemperatureC REAL, Humidity REAL, AccelX REAL,
|
||||
AccelY REAL, AccelZ REAL, MagX REAL, MagY REAL, MagZ REAL, Pressure REAL, Longitude REAL,
|
||||
Latitude REAL, DetectorName TEXT, DetectorVersion TEXT);''')
|
||||
_db_conn.commit()
|
||||
|
||||
|
||||
# settings files
|
||||
CONFIG_FILE = "../config/CosmicPi.config"
|
||||
|
||||
# read configuration
|
||||
# Todo: Put the config parser into a propper class
|
||||
# Todo: Implement proper error catching for configparser (e.g. non existent keys or file)
|
||||
# read configuration
|
||||
config = configparser.ConfigParser()
|
||||
config.read(CONFIG_FILE)
|
||||
sqlite_location = config.get("Storage", "sqlite_location")
|
||||
max_event_age = config.getint("Storage", "sqlite_max_event_age") * 60. * 60. # here used in seconds
|
||||
|
||||
# setup the program
|
||||
_initilize_DB(sqlite_location)
|
||||
|
||||
# start the cleaning loop
|
||||
while(True):
|
||||
# establish a connection
|
||||
db_conn = sqlite3.connect(sqlite_location, timeout=60.0)
|
||||
cursor = db_conn.cursor()
|
||||
|
||||
# delete old events
|
||||
# get the most recent time
|
||||
cursor.execute("SELECT * FROM Events ORDER BY UTCUnixTime DESC, SubSeconds DESC;")
|
||||
latest_time = cursor.fetchone()[0]
|
||||
limit_time = int(latest_time - max_event_age)
|
||||
|
||||
log.info("Deleting entries older than: {} [s]".format(limit_time))
|
||||
# delete old entries and close the connection
|
||||
cursor.execute("DELETE FROM Events WHERE UTCUnixTime < ?;", (limit_time,))
|
||||
db_conn.commit()
|
||||
db_conn.close()
|
||||
|
||||
# sleep for a semi random time
|
||||
time_to_wait = int(random.randrange(5*60, 10*60))
|
||||
log.info("Sleeping for: {} [s]".format(time_to_wait))
|
||||
time.sleep(time_to_wait)
|
||||
Loading…
Reference in a new issue