From 8563c5862b3830a776e9f8856addd4514ad5f2cf Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Wed, 25 Aug 2021 21:50:28 +0200 Subject: [PATCH] #9 - added new (dummy) route to retrieve database cleanup status + changed database cleanup trigger from GET to POST --- src/logic/database/Schemas.py | 14 +++++++++++--- src/logic/routers/GeneralRouter.py | 17 ++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/logic/database/Schemas.py b/src/logic/database/Schemas.py index 5137f72..c92ad06 100644 --- a/src/logic/database/Schemas.py +++ b/src/logic/database/Schemas.py @@ -1,3 +1,4 @@ +from enum import Enum from typing import List from pydantic import BaseModel, Field @@ -38,10 +39,17 @@ class DatabaseInfo(BaseModel): } +class DatabaseCleanupStatus(str, Enum): + UNDEFINED = 'UNDEFINED' + RUNNING = 'RUNNING' + FINISHED = 'FINISHED' + + class DatabaseCleanupInfo(BaseModel): - before: DatabaseInfo - after: DatabaseInfo - difference: DatabaseInfo + status: DatabaseCleanupStatus + before: DatabaseInfo = None + after: DatabaseInfo = None + difference: DatabaseInfo = None class MinMax(BaseModel): diff --git a/src/logic/routers/GeneralRouter.py b/src/logic/routers/GeneralRouter.py index 8bf908f..7106ce3 100644 --- a/src/logic/routers/GeneralRouter.py +++ b/src/logic/routers/GeneralRouter.py @@ -2,6 +2,7 @@ from datetime import datetime from fastapi import APIRouter, Depends from sqlalchemy.orm import Session +from starlette.background import BackgroundTasks from Settings import VERSION, SETTINGS from logic.Dependencies import get_database, check_api_key @@ -28,10 +29,10 @@ 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)]) +@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) @@ -51,5 +52,11 @@ async def databaseCleanup(db: Session = Depends(get_database)): 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) + 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) -- GitLab