adsb-receiver/build/portal/python/maintenance.py

163 wiersze
7.1 KiB
Python

#!/usr/bin/python
#================================================================================#
# ADS-B FEEDER PORTAL #
# ------------------------------------------------------------------------------ #
# Copyright and Licensing Information: #
# #
# The MIT License (MIT) #
# #
# Copyright (c) 2015-2016 Joseph A. Prochazka #
# #
# Permission is hereby granted, free of charge, to any person obtaining a copy #
# of this software and associated documentation files (the "Software"), to deal #
# in the Software without restriction, including without limitation the rights #
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell #
# copies of the Software, and to permit persons to whom the Software is #
# furnished to do so, subject to the following conditions: #
# #
# The above copyright notice and this permission notice shall be included in all #
# copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE #
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, #
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE #
# SOFTWARE. #
#================================================================================#
import json
import os
import datetime
while true:
## Read the configuration file.
with open(os.path.dirname(os.path.realpath(__file__)) + '/config.json') as config_file:
config = json.load(config_file)
## Import the needed database library and set up database connection.
if config["database"]["type"] == "mysql":
import MySQLdb
db = MySQLdb.connect(host=config["database"]["host"], user=config["database"]["user"], passwd=config["database"]["passwd"], db=config["database"]["db"])
if config["database"]["type"] == "sqlite":
import sqlite3
db = sqlite3.connect(config["database"]["db"])
cursor = db.cursor()
## Get maintenance settings.
# MySQL
if config["database"]["type"] == "mysql":
cursor.execute("SELECT value FROM adsb_settings WHERE name = %s", "purgeAircraft")
# SQLite
if config["database"]["type"] == "sqlite":
params = ("purgeAircraft",)
cursor.execute("SELECT value FROM adsb_settings WHERE name = ?", params)
row = cursor.fetchone()
purge_aircraft = row[0]
# MySQL
if config["database"]["type"] == "mysql":
cursor.execute("SELECT value FROM adsb_settings WHERE name = %s", "purgeFlights")
# SQLite
if config["database"]["type"] == "sqlite":
params = ("purgeFlights",)
cursor.execute("SELECT value FROM adsb_settings WHERE name = ?", params)
row = cursor.fetchone()
purge_flights = row[0]
# MySQL
if config["database"]["type"] == "mysql":
cursor.execute("SELECT value FROM adsb_settings WHERE name = %s", "purgePositions")
# SQLite
if config["database"]["type"] == "sqlite":
params = ("purgePositions",)
cursor.execute("SELECT value FROM adsb_settings WHERE name = ?", params)
row = cursor.fetchone()
purge_positions = row[0]
# MySQL
if config["database"]["type"] == "mysql":
cursor.execute("SELECT value FROM adsb_settings WHERE name = %s", "purgeDaysOld")
# SQLite
if config["database"]["type"] == "sqlite":
params = ("purgeDaysOld",)
cursor.execute("SELECT value FROM adsb_settings WHERE name = ?", params)
row = cursor.fetchone()
purge_days_old = row[0]
## Create the purge date from the age specified.
purge_datetime = datetime.datetime.utcnow() - timedelta(days=purge_days_old)
purge_date = purge_datetime.strftime("%Y/%m/%d %H:%M:%S")
## Remove aircraft not seen since the specified date.
if purge_aircraft == true:
# MySQL
if config["database"]["type"] == "mysql":
cursor.execute("SELECT id FROM adsb_aircraft WHERE lastSeen < %s", purge_date)
rows = cursor.fetchall()
for row in rows:
cursor.execute("DELETE FROM adsb_positions WHERE aircraft = %s", row[0])
cursor.execute("DELETE FROM adsb_flights WHERE aircraft = %s", row[0])
cursor.execute("DELETE FROM adsb_aircraft WHERE id = %s", row[0])
# SQLite
if config["database"]["type"] == "sqlite":
params = (purge_date,)
cursor.execute("SELECT id FROM adsb_aircraft WHERE lastSeen < ?", params)
rows = cursor.fetchall()
for row in rows:
params = (row[0],)
cursor.execute("DELETE FROM adsb_positions WHERE aircraft = ?", params)
cursor.execute("DELETE FROM adsb_flights WHERE aircraft = ?", params)
cursor.execute("DELETE FROM adsb_aircraft WHERE id = ?", params)
## Remove flights not seen since the specified date.
if purge_flights == true:
# MySQL
if config["database"]["type"] == "mysql":
cursor.execute("SELECT id FROM adsb_flights WHERE lastSeen < %s", purge_date)
rows = cursor.fetchall()
for row in rows:
cursor.execute("DELETE FROM adsb_positions WHERE flight = %s", row[0])
cursor.execute("DELETE FROM adsb_flights WHERE id = %s", row[0])
#SQLite
if config["database"]["type"] == "sqlite":
params = (purge_date,)
cursor.execute("SELECT id FROM adsb_flights WHERE lastSeen < ?", params)
rows = cursor.fetchall()
for row in rows:
params = (row[0],)
cursor.execute("DELETE FROM adsb_positions WHERE flight = ?", params)
cursor.execute("DELETE FROM adsb_flights WHERE id = ?", params)
## Remove positions older than the specified date.
if purge_positions == true:
# MySQL
if config["database"]["type"] == "mysql":
cursor.execute("DELETE FROM adsb_positions WHERE time < %s", purge_date)
#SQLite
if config["database"]["type"] == "sqlite":
params = (purge_date,)
cursor.execute("DELETE FROM adsb_positions WHERE time < ?", params)
## Close the database connection.
db.commit()
db.close()
## Sleep until the next run.
time.sleep(3600)