Commit 598ef8dd authored by Рудакова Ольга Сергеевна's avatar Рудакова Ольга Сергеевна
Browse files

add auto clean of db

parent db33fd52
No related merge requests found
Showing with 39 additions and 3 deletions
+39 -3
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)
......
config.py 0 → 100644
import datetime
DB_URL = 'postgresql://postgres:admin@localhost/statistic'
DB_TRACK_NODIFICATION = False
DB_AUTOCLEAN_INTERVAL = datetime.timedelta(days=30)
......@@ -5,6 +5,10 @@
Так же можно задать интервал времени, с которым будут посылаться проверочные сигналы.
Есть возможность приостановить и возобновить отправку сигналов.
Записи старше заданного значения из талицы статистики в базе днных удаляются (по умолчанию это значение равно 30 дням).
Чтобы поменять это значение надо в файле конфигурации config.py поменять значение DB_AUTOCLEAN_INTERVAL и перезапустить
приложение.
## Запуск
1. Для успешного старта приложения надо иметь запущенный постгрес с созданной в нем базой данных по имени statistic
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment