diff --git a/surveillance/maintenance/check_activity.py b/surveillance/maintenance/check_activity.py new file mode 100755 index 00000000..1ef44824 --- /dev/null +++ b/surveillance/maintenance/check_activity.py @@ -0,0 +1,31 @@ +#!/bin/bash /usr/scripts/python.sh +# -*- encoding: utf-8 -*- + +import psycopg2 +import psycopg2.extras +import time + +PG_STAT_REQ = "SELECT * FROM pg_stat_activity;" + +def pg_stat_ended(curseur): + """Fetch stat_activity from postgresql and check if + all transactions active on first fetch is done before + returning True. + + """ + curseur.execute(PG_STAT_REQ) + data = curseur.fetchall() + seuil = max([donnee['xact_start'] for donnee in data]) + while True and seuil: + curseur.execute(PG_STAT_REQ) + data = curseur.fetchall() + front = min([donnee['xact_start'] for donnee in data]) + if front > seuil: + break + time.sleep(30) + +if __name__ == "__main__": + conn = psycopg2.connect(database='filtrage') + conn.set_session(autocommit=True) + curseur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) + pg_stat_ended(curseur) diff --git a/surveillance/maintenance.sql b/surveillance/maintenance/delete.sql similarity index 66% rename from surveillance/maintenance.sql rename to surveillance/maintenance/delete.sql index 20057388..379a9e2a 100644 --- a/surveillance/maintenance.sql +++ b/surveillance/maintenance/delete.sql @@ -1,9 +1,6 @@ ----------------------------------------------------------------- --- Maintenance de la base pgsql filtrade sur odlyd, lancé par cron +-- Maintenance de la base pgsql filtrage sur odlyd, lancé par cron ----------------------------------------------------------------- -- effacement des vieux enregistrements DELETE FROM upload where stamp_inserted < timestamp 'now' - interval '5 days'; - --- suppression complète des entrées -VACUUM (VERBOSE, ANALYZE); diff --git a/surveillance/maintenance/upload_maint.sh b/surveillance/maintenance/upload_maint.sh new file mode 100755 index 00000000..b1a033af --- /dev/null +++ b/surveillance/maintenance/upload_maint.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +psql -d filtrage -f /usr/scripts/surveillance/maintenance/delete.sql; +/usr/scripts/surveillance/maintenance/check_activity.py; +psql -d filtrage -f /usr/scripts/surveillance/maintenance/vacuum.sql 2>&1 > /dev/null diff --git a/surveillance/maintenance/vacuum.sql b/surveillance/maintenance/vacuum.sql new file mode 100644 index 00000000..f847f42f --- /dev/null +++ b/surveillance/maintenance/vacuum.sql @@ -0,0 +1,2 @@ +-- suppression complète des entrées +VACUUM (VERBOSE, ANALYZE);