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

#9 - refactoring

parent e65e11d2
Branches
Tags
No related merge requests found
...@@ -29,36 +29,42 @@ class DatabaseCleaner: ...@@ -29,36 +29,42 @@ class DatabaseCleaner:
for sensor in allSensors: for sensor in allSensors:
LOGGER.debug(f'Cleaning measurements for sensor "{sensor.name}" ' LOGGER.debug(f'Cleaning measurements for sensor "{sensor.name}" '
f'(id: {sensor.id}, device_id: {sensor.device_id})') f'(id: {sensor.id}, device_id: {sensor.device_id})')
self._cleanup_measurements_for_sensor(sensor, db, policy, policyStart)
LOGGER.info('Database cleanup done')
# TODO: force backup?
@staticmethod
def _cleanup_measurements_for_sensor(sensor: Schemas.Sensor, db: Session,
policy: RetentionPolicy, policyStart: datetime.date):
firstMeasurement = Crud.get_first_measurement_for_sensor(db=db, sensorId=sensor.id) firstMeasurement = Crud.get_first_measurement_for_sensor(db=db, sensorId=sensor.id)
if firstMeasurement is None: if firstMeasurement is None:
continue return
minDate = datetime.strptime(firstMeasurement.timestamp, Crud.DATE_FORMAT).date() minDate = datetime.strptime(firstMeasurement.timestamp, Crud.DATE_FORMAT).date()
processedDate = policyStart processedDate = policyStart
while processedDate > minDate: while processedDate > minDate:
LOGGER.debug(f'Cleaning {processedDate.strftime("%Y-%m-%d")}...') LOGGER.debug(f'Cleaning {processedDate.strftime("%Y-%m-%d")}...')
DatabaseCleaner._cleanup_measurements_for_day(db, processedDate, policy, sensor.id)
processedDate = processedDate - timedelta(days=1)
@staticmethod
def _cleanup_measurements_for_day(db: Session, date: datetime.date,
policy: RetentionPolicy, sensor_id: int):
measurementIds, idsToDelete = DatabaseCleaner._categorize_measurements_for_day(db, measurementIds, idsToDelete = DatabaseCleaner._categorize_measurements_for_day(db,
date=processedDate, date=date,
policy=policy, policy=policy,
sensorId=sensor.id) sensorId=sensor_id)
processedDate = processedDate - timedelta(days=1)
if not idsToDelete: if not idsToDelete:
continue return
LOGGER.debug(
f'Scheduled {len(idsToDelete)} measurements for deletion (keeping: {len(measurementIds)}, '
f'max allowed: {policy.numberOfMeasurementsPerDay})')
LOGGER.debug(f'Scheduled {len(idsToDelete)} measurements for deletion '
f'(keeping: {len(measurementIds)}, max allowed: {policy.numberOfMeasurementsPerDay})')
Crud.delete_multiple_measurements(db, idsToDelete) Crud.delete_multiple_measurements(db, idsToDelete)
LOGGER.info('Database cleanup done')
# TODO: force backup?
@staticmethod @staticmethod
def _categorize_measurements_for_day(db: Session, date: datetime.date, def _categorize_measurements_for_day(db: Session, date: datetime.date,
policy: RetentionPolicy, sensorId: int) -> Tuple[List[int], Set[int]]: policy: RetentionPolicy, sensorId: int) -> Tuple[List[int], Set[int]]:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment