Skip to content
Snippets Groups Projects
GeneralRouter.py 2 KiB
Newer Older
  • Learn to ignore specific revisions
  • from datetime import datetime
    
    
    from fastapi import APIRouter, Depends
    from sqlalchemy.orm import Session
    
    
    from Settings import VERSION, SETTINGS
    
    from logic.Dependencies import get_database, check_api_key
    
    from logic.database import Schemas, DatabaseInfoProvider
    
    from logic.database.DatabaseCleaner import DatabaseCleaner, RetentionPolicy
    
    
    router = APIRouter(
        prefix='/general',
        tags=['general']
    )
    
    
    @router.get('/version',
                summary='Gets information about the server version',
                response_model=Schemas.Version)
    async def version():
        return Schemas.Version(**VERSION)
    
    
    @router.get('/databaseInfo',
                summary='Gets information about the database',
                response_model=Schemas.DatabaseInfo)
    async def databaseInfo(db: Session = Depends(get_database)):
        return DatabaseInfoProvider.get_database_info(db)
    
    
    
    @router.get('/databaseCleanup',
    
                summary='Cleans up the database by enforcing the configured retention policies for each sensor',
    
                response_model=Schemas.DatabaseCleanupInfo,
                dependencies=[Depends(check_api_key)])
    
    async def databaseCleanup(db: Session = Depends(get_database)):
        infoBefore = DatabaseInfoProvider.get_database_info(db)
    
    
        retentionPolicies = SETTINGS['database']['cleanup']['retentionPolicies']
    
        policies = []
        for item in retentionPolicies:
    
            policies.append(RetentionPolicy(numberOfMeasurementsPerDay=item['numberOfMeasurementsPerDay'],
                                            ageInDays=item['ageInDays']))
    
        DatabaseCleaner(policies).clean(db, datetime.now().date())
    
    
        infoAfter = DatabaseInfoProvider.get_database_info(db)
    
        deletedMeasurements = infoBefore.number_of_measurements - infoAfter.number_of_measurements
        sizeFreed = infoBefore.size_on_disk_in_mb - infoAfter.size_on_disk_in_mb
        infoDifference = Schemas.DatabaseInfo(number_of_measurements=deletedMeasurements, size_on_disk_in_mb=sizeFreed)
    
        return Schemas.DatabaseCleanupInfo(before=infoBefore,  after=infoAfter,  difference=infoDifference)