diff --git a/settings-example.json b/settings-example.json index 9b584d27acd90de3d0fa6c31171f27e8e6c0b472..5f0d733237dbfacbb1eb44195b6695520bd9cd43 100644 --- a/settings-example.json +++ b/settings-example.json @@ -20,7 +20,17 @@ "owncloudUser": "myUser", "owncloudPassword": "", "owncloudDestinationPath": "MyFolder" - } + }, + "retentionPolicies": [ + { + "resolutionInMinutes": 60, + "ageInDays": 30 + }, + { + "resolutionInMinutes": 3600, + "ageInDays": 60 + } + ] }, "api": { "url": "http://localhost:10003", diff --git a/src/logic/database/DatabaseCleaner.py b/src/logic/database/DatabaseCleaner.py new file mode 100644 index 0000000000000000000000000000000000000000..1ea90764d2d1b3379b4a2de40aae2654c7c05142 --- /dev/null +++ b/src/logic/database/DatabaseCleaner.py @@ -0,0 +1,28 @@ +import logging +from dataclasses import dataclass +from typing import List + +from sqlalchemy.orm import Session + +from logic import Constants + +LOGGER = logging.getLogger(Constants.APP_NAME) + + +@dataclass +class RetentionPolicy: + resolutionInMinutes: int + ageInDays: int + + +class DatabaseCleaner: + def __init__(self, retentionPolicies: List[RetentionPolicy]): + self._policies = retentionPolicies + + def clean(self, db: Session): + LOGGER.info('Performing database cleanup...') + + for policy in self._policies: + LOGGER.debug(f'Enforcing retention policy: {policy}') + + LOGGER.info('Database cleanup done') diff --git a/src/logic/routers/GeneralRouter.py b/src/logic/routers/GeneralRouter.py index 43b7478c0f462476b54464509ebb5e774accbbb1..3987764ba46ed545831154949187be1b69388f99 100644 --- a/src/logic/routers/GeneralRouter.py +++ b/src/logic/routers/GeneralRouter.py @@ -1,9 +1,10 @@ from fastapi import APIRouter, Depends from sqlalchemy.orm import Session -from Settings import VERSION +from Settings import VERSION, SETTINGS from logic.Dependencies import get_database from logic.database import Schemas, DatabaseInfoProvider +from logic.database.DatabaseCleaner import DatabaseCleaner, RetentionPolicy router = APIRouter( prefix='/general', @@ -31,7 +32,12 @@ async def databaseInfo(db: Session = Depends(get_database)): async def databaseCleanup(db: Session = Depends(get_database)): infoBefore = DatabaseInfoProvider.get_database_info(db) - # TODO + 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)