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