diff --git a/app.py b/app.py index f0dda4f0d72fce2cf89a30496f846fe0dca039fd..0ba5e78d6c020dc85d7e9d993e2e728eff1a081f 100644 --- a/app.py +++ b/app.py @@ -1,15 +1,20 @@ import atexit +import datetime +from datetime import date + import flask from pythonping import ping from flask import Flask, jsonify, request from flask_migrate import Migrate from flask_sqlalchemy import SQLAlchemy from apscheduler.schedulers.background import BackgroundScheduler -from sqlalchemy import desc +from sqlalchemy import desc, column + +from config import * app = Flask(__name__) -app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:admin@localhost/statistic' -app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False +app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL +app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = DB_TRACK_NODIFICATION db = SQLAlchemy(app) migrate = Migrate(app, db) @@ -123,6 +128,13 @@ def start_scheduler(): return status_code +@app.route('/api/v1/db/auto-clean-time', methods=['POST']) +def update_auto_clean_db(): + scheduler.resume() + status_code = flask.Response(status=200) + return status_code + + def ip_ping(): for camera in Camera.query.all(): response_list = ping(camera.camera_ip, size=40, count=3) @@ -132,6 +144,14 @@ def ip_ping(): db.session.commit() +def auto_clean_db(): + clean_date = datetime.datetime.now() - DB_AUTOCLEAN_INTERVAL + old_stats = Stat.query.filter(Stat.date < clean_date).all() + for old_stat in old_stats: + db.session.delete(old_stat) + db.session.commit() + + scheduler = BackgroundScheduler() scheduler.add_job(id="scheduler", func=ip_ping, trigger="interval", seconds=time) scheduler.start() @@ -139,6 +159,13 @@ scheduler.start() # Shut down the scheduler when exiting the app atexit.register(lambda: scheduler.shutdown()) +scheduler2 = BackgroundScheduler() +scheduler2.add_job(id="dbclean", func=auto_clean_db, trigger="interval", seconds=DB_AUTOCLEAN_INTERVAL.total_seconds()) +scheduler2.start() + +# Shut down the scheduler when exiting the app +atexit.register(lambda: scheduler2.shutdown()) + if __name__ == '__main__': app.run(debug=True) diff --git a/config.py b/config.py new file mode 100644 index 0000000000000000000000000000000000000000..81dee01da89905d03f95f561cf5083ce20f62337 --- /dev/null +++ b/config.py @@ -0,0 +1,5 @@ +import datetime + +DB_URL = 'postgresql://postgres:admin@localhost/statistic' +DB_TRACK_NODIFICATION = False +DB_AUTOCLEAN_INTERVAL = datetime.timedelta(days=30) diff --git a/readme.md b/readme.md index 2bb5b8433cc9ba71b23b9368b8f1a7ea349c9538..55b51505e0282adddc74de1bc6c3f2212a86e2dd 100644 --- a/readme.md +++ b/readme.md @@ -5,6 +5,10 @@ Так же можно задать интервал времени, с которым будут посылаться проверочные сигналы. Есть возможность приостановить и возобновить отправку сигналов. +Записи старше заданного значения из талицы статистики в базе днных удаляются (по умолчанию это значение равно 30 дням). +Чтобы поменять это значение надо в файле конфигурации config.py поменять значение DB_AUTOCLEAN_INTERVAL и перезапустить +приложение. + ## Запуск 1. Для успешного старта приложения надо иметь запущенный постгрес с созданной в нем базой данных по имени statistic