Compare commits

..

2 Commits

Author SHA1 Message Date
38e16f92e8 device receives a timestamp at creation
no new devices are ever without a lastConnection timestamp
2020-07-17 10:42:27 +02:00
0284eb2fa8 adds cleanup functionality for old devices
- device now last field 'last connection' which gets updated
  at every server connection from the respective device
- manual cleanup script in database deletes all devices which
  have never been updated, or have a timestamp older than 30 days
2020-07-17 10:39:16 +02:00
4 changed files with 46 additions and 0 deletions

14
database/__init__.py Normal file
View File

@ -0,0 +1,14 @@
from server import db
import time
from database.models import Device
def cleanDevices():
allDevs = db.session.query(Device)
devices = allDevs.filter(Device.lastConnection <= int(round(time.time())) - 60*60*24*30).all()
devices += allDevs.filter(Device.lastConnection == None)
for device in devices:
print(device.deviceName)
db.session.delete(device)
db.session.commit()

View File

@ -0,0 +1,28 @@
"""empty message
Revision ID: 121eab3835ee
Revises: e5ef5e4a807b
Create Date: 2020-07-17 08:03:36.947158
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '121eab3835ee'
down_revision = 'e5ef5e4a807b'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('device', sa.Column('lastConnection', sa.BigInteger(), nullable=True))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('device', 'lastConnection')
# ### end Alembic commands ###

View File

@ -61,6 +61,7 @@ class Device(db.Model):
user_id = db.Column(db.Integer, db.ForeignKey('user.id')) user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
deviceName = db.Column(db.String(64), unique=True) deviceName = db.Column(db.String(64), unique=True)
connection = db.Column(db.Boolean) connection = db.Column(db.Boolean)
lastConnection = db.Column(db.BigInteger)
class Calendar(db.Model): class Calendar(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True) id = db.Column(db.Integer, primary_key=True, autoincrement=True)

View File

@ -1,6 +1,7 @@
# Python standard libraries # Python standard libraries
import json import json
import os import os
import time
# Third-party libraries # Third-party libraries
import flask import flask
@ -204,6 +205,7 @@ def downloader(device):
if request_device.user_id == None: if request_device.user_id == None:
return jsonify(kind="unregistered") return jsonify(kind="unregistered")
request_device.lastConnection=int(round(time.time()))
request_device.connection=True request_device.connection=True
db.session.commit() db.session.commit()
request_user = db.session.query(User).filter(User.id==request_device.user_id).first() request_user = db.session.query(User).filter(User.id==request_device.user_id).first()
@ -233,6 +235,7 @@ def generateDeviceFingerprint():
if not db.session.query(Device).filter(Device.deviceName==fingerprint).first(): if not db.session.query(Device).filter(Device.deviceName==fingerprint).first():
# Save as new Device # Save as new Device
device = Device(deviceName=fingerprint, connection=False) device = Device(deviceName=fingerprint, connection=False)
device.lastConnection = int(round(time.time()))
db.session.add(device) db.session.add(device)
db.session.commit() db.session.commit()
break; break;