Newer
Older
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from logic.Dependencies import get_database
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',
response_model=Schemas.DatabaseCleanupInfo)
async def databaseCleanup(db: Session = Depends(get_database)):
infoBefore = DatabaseInfoProvider.get_database_info(db)
retentionPolicies = SETTINGS['database']['retentionPolicies']
policies = []
for item in retentionPolicies:
policies.append(RetentionPolicy(resolutionInMinutes=item['resolutionInMinutes'], ageInDays=item['ageInDays']))
DatabaseCleaner(policies).clean(db)
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)