Skip to content
Snippets Groups Projects
Commit 84a51725 authored by Robert Goldmann's avatar Robert Goldmann
Browse files

#9 - moved database routes to own router

parent 8563c586
No related branches found
No related tags found
No related merge requests found
...@@ -13,7 +13,7 @@ from logic import Constants ...@@ -13,7 +13,7 @@ from logic import Constants
from logic.DiscoveryService import DiscoveryService from logic.DiscoveryService import DiscoveryService
from logic.database import Models from logic.database import Models
from logic.database.Database import engine from logic.database.Database import engine
from logic.routers import DeviceRouter, GeneralRouter from logic.routers import DeviceRouter, GeneralRouter, DatabaseRouter
from logic.routers import SensorRouter, MeasurementRouter from logic.routers import SensorRouter, MeasurementRouter
LOGGER = DefaultLogger().create_logger_if_not_exists(Constants.APP_NAME) LOGGER = DefaultLogger().create_logger_if_not_exists(Constants.APP_NAME)
...@@ -63,6 +63,7 @@ def overridden_redoc(): ...@@ -63,6 +63,7 @@ def overridden_redoc():
app.include_router(GeneralRouter.router) app.include_router(GeneralRouter.router)
app.include_router(DatabaseRouter.router)
app.include_router(DeviceRouter.router) app.include_router(DeviceRouter.router)
app.include_router(SensorRouter.router) app.include_router(SensorRouter.router)
app.include_router(MeasurementRouter.router) app.include_router(MeasurementRouter.router)
......
from datetime import datetime
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from Settings import 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='/database',
tags=['database']
)
@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.post('/databaseCleanup',
summary='Initiates a database cleanup by enforcing the configured retention policies for each sensor',
response_model=Schemas.Status,
dependencies=[Depends(check_api_key)])
async def databaseCleanup(db: Session = Depends(get_database)):
infoBefore = DatabaseInfoProvider.get_database_info(db)
cleanupSettings = SETTINGS['database']['cleanup']
retentionPolicies = cleanupSettings['retentionPolicies']
policies = []
for item in retentionPolicies:
policies.append(RetentionPolicy(numberOfMeasurementsPerDay=item['numberOfMeasurementsPerDay'],
ageInDays=item['ageInDays']))
DatabaseCleaner(policies, cleanupSettings['forceBackupAfterCleanup']).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)
@router.get('/databaseCleanup',
summary='Provides the status of the current database cleanup',
response_model=Schemas.DatabaseCleanupInfo)
async def databaseCleanup():
return Schemas.DatabaseCleanupInfo(status=Schemas.DatabaseCleanupStatus.UNDEFINED)
from datetime import datetime from fastapi import APIRouter
from fastapi import APIRouter, Depends from Settings import VERSION
from sqlalchemy.orm import Session from logic.database import Schemas
from starlette.background import BackgroundTasks
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( router = APIRouter(
prefix='/general', prefix='/general',
...@@ -20,43 +14,3 @@ router = APIRouter( ...@@ -20,43 +14,3 @@ router = APIRouter(
response_model=Schemas.Version) response_model=Schemas.Version)
async def version(): async def version():
return Schemas.Version(**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.post('/databaseCleanup',
summary='Initiates a database cleanup by enforcing the configured retention policies for each sensor',
response_model=Schemas.Status,
dependencies=[Depends(check_api_key)])
async def databaseCleanup(db: Session = Depends(get_database)):
infoBefore = DatabaseInfoProvider.get_database_info(db)
cleanupSettings = SETTINGS['database']['cleanup']
retentionPolicies = cleanupSettings['retentionPolicies']
policies = []
for item in retentionPolicies:
policies.append(RetentionPolicy(numberOfMeasurementsPerDay=item['numberOfMeasurementsPerDay'],
ageInDays=item['ageInDays']))
DatabaseCleaner(policies, cleanupSettings['forceBackupAfterCleanup']).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)
@router.get('/databaseCleanup',
summary='Provides the status of the current database cleanup',
response_model=Schemas.DatabaseCleanupInfo)
async def databaseCleanup():
return Schemas.DatabaseCleanupInfo(status=Schemas.DatabaseCleanupStatus.UNDEFINED)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment