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
This commit is contained in:
		
							
								
								
									
										14
									
								
								database/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								database/__init__.py
									
									
									
									
									
										Normal 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()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										28
									
								
								database/migrations/versions/121eab3835ee_.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								database/migrations/versions/121eab3835ee_.py
									
									
									
									
									
										Normal 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 ###
 | 
				
			||||||
@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user