From 3476f239e5e0b9fdd0fd2c86469f06cc343cd553 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sun, 31 Oct 2021 00:50:43 +0200 Subject: [PATCH] #9 - status route shows cleanup information --- src/logic/DatabaseCleanupService.py | 7 +++++-- src/logic/JobScheduler.py | 10 ++++++++-- src/logic/database/Schemas.py | 6 +++++- src/logic/routers/DatabaseRouter.py | 2 +- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/logic/DatabaseCleanupService.py b/src/logic/DatabaseCleanupService.py index cf654d1..611d553 100644 --- a/src/logic/DatabaseCleanupService.py +++ b/src/logic/DatabaseCleanupService.py @@ -13,7 +13,8 @@ class DatabaseCleanupService: self._cleanupSettings = cleanupSettings def cleanup(self, db: Session) -> Schemas.DatabaseCleanupInfo: - infoBefore = DatabaseInfoProvider.get_database_info(db) + infoBefore = DatabaseInfoProvider.get_database_info(db)# + startTime = datetime.now() retentionPolicies = self._cleanupSettings['retentionPolicies'] policies = [] @@ -24,10 +25,12 @@ class DatabaseCleanupService: DatabaseCleaner(policies, self._cleanupSettings['forceBackupAfterCleanup']).clean(db, datetime.now().date()) infoAfter = DatabaseInfoProvider.get_database_info(db) + endTime = datetime.now() 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(status=Schemas.DatabaseCleanupStatus.FINISHED, before=infoBefore, - after=infoAfter, difference=infoDifference) + after=infoAfter, difference=infoDifference, + startTime=startTime, endTime=endTime) diff --git a/src/logic/JobScheduler.py b/src/logic/JobScheduler.py index ade6378..bb590eb 100644 --- a/src/logic/JobScheduler.py +++ b/src/logic/JobScheduler.py @@ -9,6 +9,7 @@ from apscheduler.triggers.cron import CronTrigger from logic import Constants from logic.database import Schemas +from logic.database.Schemas import DatabaseCleanupInfo LOGGER = logging.getLogger(Constants.APP_NAME) TIMEZONE = pytz.timezone('Europe/Berlin') @@ -31,6 +32,8 @@ class JobScheduler: self.ID_MANUAL: self.STATE_IDLE } + self._jobResults = [] + self._scheduler.start(paused=True) self._jobAutomatic.pause() @@ -41,6 +44,9 @@ class JobScheduler: def job_event_listener(self, event: JobExecutionEvent): self._jobStatus[event.job_id] = self.STATE_IDLE + if isinstance(event.retval, DatabaseCleanupInfo): + self._jobResults.append(event.retval) + if event.exception: LOGGER.error(f'Error executing job "{event.job_id}"') else: @@ -60,7 +66,7 @@ class JobScheduler: id=self.ID_MANUAL, timezone=TIMEZONE) self._jobStatus[self.ID_MANUAL] = self.STATE_RUNNING - def get_scheduled_jobs(self) -> Schemas.ScheduledJobs: + def get_scheduled_jobs(self) -> Schemas.ScheduledJobStatus: jobs = [] for job in self._scheduler.get_jobs(): scheduledJob = Schemas.ScheduledJob(job_id=str(job.id), @@ -68,7 +74,7 @@ class JobScheduler: next_run=str(job.next_run_time)) jobs.append(scheduledJob) - return Schemas.ScheduledJobs(jobs=jobs) + return Schemas.ScheduledJobStatus(jobs=jobs, job_results=self._jobResults) def dummyFunc(): diff --git a/src/logic/database/Schemas.py b/src/logic/database/Schemas.py index 961c4a1..0a6bc2a 100644 --- a/src/logic/database/Schemas.py +++ b/src/logic/database/Schemas.py @@ -1,3 +1,4 @@ +from datetime import datetime from enum import Enum from typing import List @@ -50,6 +51,8 @@ class DatabaseCleanupInfo(BaseModel): before: DatabaseInfo = None after: DatabaseInfo = None difference: DatabaseInfo = None + startTime: datetime + endTime: datetime class MinMax(BaseModel): @@ -152,5 +155,6 @@ class ScheduledJob(BaseModel): } -class ScheduledJobs(BaseModel): +class ScheduledJobStatus(BaseModel): jobs: List[ScheduledJob] + job_results: List[DatabaseCleanupInfo] diff --git a/src/logic/routers/DatabaseRouter.py b/src/logic/routers/DatabaseRouter.py index c46fe10..1965f13 100644 --- a/src/logic/routers/DatabaseRouter.py +++ b/src/logic/routers/DatabaseRouter.py @@ -36,7 +36,7 @@ async def databaseCleanup(db: Session = Depends(get_database)): @router.get('/databaseCleanup', summary='Provides the status of the all scheduled database cleanup jobs', - response_model=Schemas.ScheduledJobs) + response_model=Schemas.ScheduledJobStatus) async def getStatus(): from logic import JobScheduler return JobScheduler.SCHEDULER.get_scheduled_jobs() -- GitLab