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

#9 - status route shows cleanup information

parent 01b3a6a2
No related branches found
No related tags found
No related merge requests found
...@@ -13,7 +13,8 @@ class DatabaseCleanupService: ...@@ -13,7 +13,8 @@ class DatabaseCleanupService:
self._cleanupSettings = cleanupSettings self._cleanupSettings = cleanupSettings
def cleanup(self, db: Session) -> Schemas.DatabaseCleanupInfo: 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'] retentionPolicies = self._cleanupSettings['retentionPolicies']
policies = [] policies = []
...@@ -24,10 +25,12 @@ class DatabaseCleanupService: ...@@ -24,10 +25,12 @@ class DatabaseCleanupService:
DatabaseCleaner(policies, self._cleanupSettings['forceBackupAfterCleanup']).clean(db, datetime.now().date()) DatabaseCleaner(policies, self._cleanupSettings['forceBackupAfterCleanup']).clean(db, datetime.now().date())
infoAfter = DatabaseInfoProvider.get_database_info(db) infoAfter = DatabaseInfoProvider.get_database_info(db)
endTime = datetime.now()
deletedMeasurements = infoBefore.number_of_measurements - infoAfter.number_of_measurements deletedMeasurements = infoBefore.number_of_measurements - infoAfter.number_of_measurements
sizeFreed = infoBefore.size_on_disk_in_mb - infoAfter.size_on_disk_in_mb 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) infoDifference = Schemas.DatabaseInfo(number_of_measurements=deletedMeasurements, size_on_disk_in_mb=sizeFreed)
return Schemas.DatabaseCleanupInfo(status=Schemas.DatabaseCleanupStatus.FINISHED, before=infoBefore, return Schemas.DatabaseCleanupInfo(status=Schemas.DatabaseCleanupStatus.FINISHED, before=infoBefore,
after=infoAfter, difference=infoDifference) after=infoAfter, difference=infoDifference,
startTime=startTime, endTime=endTime)
...@@ -9,6 +9,7 @@ from apscheduler.triggers.cron import CronTrigger ...@@ -9,6 +9,7 @@ from apscheduler.triggers.cron import CronTrigger
from logic import Constants from logic import Constants
from logic.database import Schemas from logic.database import Schemas
from logic.database.Schemas import DatabaseCleanupInfo
LOGGER = logging.getLogger(Constants.APP_NAME) LOGGER = logging.getLogger(Constants.APP_NAME)
TIMEZONE = pytz.timezone('Europe/Berlin') TIMEZONE = pytz.timezone('Europe/Berlin')
...@@ -31,6 +32,8 @@ class JobScheduler: ...@@ -31,6 +32,8 @@ class JobScheduler:
self.ID_MANUAL: self.STATE_IDLE self.ID_MANUAL: self.STATE_IDLE
} }
self._jobResults = []
self._scheduler.start(paused=True) self._scheduler.start(paused=True)
self._jobAutomatic.pause() self._jobAutomatic.pause()
...@@ -41,6 +44,9 @@ class JobScheduler: ...@@ -41,6 +44,9 @@ class JobScheduler:
def job_event_listener(self, event: JobExecutionEvent): def job_event_listener(self, event: JobExecutionEvent):
self._jobStatus[event.job_id] = self.STATE_IDLE self._jobStatus[event.job_id] = self.STATE_IDLE
if isinstance(event.retval, DatabaseCleanupInfo):
self._jobResults.append(event.retval)
if event.exception: if event.exception:
LOGGER.error(f'Error executing job "{event.job_id}"') LOGGER.error(f'Error executing job "{event.job_id}"')
else: else:
...@@ -60,7 +66,7 @@ class JobScheduler: ...@@ -60,7 +66,7 @@ class JobScheduler:
id=self.ID_MANUAL, timezone=TIMEZONE) id=self.ID_MANUAL, timezone=TIMEZONE)
self._jobStatus[self.ID_MANUAL] = self.STATE_RUNNING self._jobStatus[self.ID_MANUAL] = self.STATE_RUNNING
def get_scheduled_jobs(self) -> Schemas.ScheduledJobs: def get_scheduled_jobs(self) -> Schemas.ScheduledJobStatus:
jobs = [] jobs = []
for job in self._scheduler.get_jobs(): for job in self._scheduler.get_jobs():
scheduledJob = Schemas.ScheduledJob(job_id=str(job.id), scheduledJob = Schemas.ScheduledJob(job_id=str(job.id),
...@@ -68,7 +74,7 @@ class JobScheduler: ...@@ -68,7 +74,7 @@ class JobScheduler:
next_run=str(job.next_run_time)) next_run=str(job.next_run_time))
jobs.append(scheduledJob) jobs.append(scheduledJob)
return Schemas.ScheduledJobs(jobs=jobs) return Schemas.ScheduledJobStatus(jobs=jobs, job_results=self._jobResults)
def dummyFunc(): def dummyFunc():
......
from datetime import datetime
from enum import Enum from enum import Enum
from typing import List from typing import List
...@@ -50,6 +51,8 @@ class DatabaseCleanupInfo(BaseModel): ...@@ -50,6 +51,8 @@ class DatabaseCleanupInfo(BaseModel):
before: DatabaseInfo = None before: DatabaseInfo = None
after: DatabaseInfo = None after: DatabaseInfo = None
difference: DatabaseInfo = None difference: DatabaseInfo = None
startTime: datetime
endTime: datetime
class MinMax(BaseModel): class MinMax(BaseModel):
...@@ -152,5 +155,6 @@ class ScheduledJob(BaseModel): ...@@ -152,5 +155,6 @@ class ScheduledJob(BaseModel):
} }
class ScheduledJobs(BaseModel): class ScheduledJobStatus(BaseModel):
jobs: List[ScheduledJob] jobs: List[ScheduledJob]
job_results: List[DatabaseCleanupInfo]
...@@ -36,7 +36,7 @@ async def databaseCleanup(db: Session = Depends(get_database)): ...@@ -36,7 +36,7 @@ async def databaseCleanup(db: Session = Depends(get_database)):
@router.get('/databaseCleanup', @router.get('/databaseCleanup',
summary='Provides the status of the all scheduled database cleanup jobs', summary='Provides the status of the all scheduled database cleanup jobs',
response_model=Schemas.ScheduledJobs) response_model=Schemas.ScheduledJobStatus)
async def getStatus(): async def getStatus():
from logic import JobScheduler from logic import JobScheduler
return JobScheduler.SCHEDULER.get_scheduled_jobs() return JobScheduler.SCHEDULER.get_scheduled_jobs()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment