Add conf `report_period` to control report time period
Config `report_period` allow us to set report result period.
As all our backup services are running periodically,
the period might have difference up to a backup cycle.
diff --git a/staffeln/conductor/manager.py b/staffeln/conductor/manager.py
index 6cd5bba..cd19a69 100755
--- a/staffeln/conductor/manager.py
+++ b/staffeln/conductor/manager.py
@@ -1,4 +1,4 @@
-from datetime import datetime, timezone
+from datetime import datetime, timezone, timedelta
import threading
import time
@@ -125,8 +125,19 @@
self.controller.create_queue(current_tasks)
def _report_backup_result(self):
- self.controller.publish_backup_result()
- self.controller.purge_backups()
+ report_period_mins = CONF.conductor.report_period
+ threshold_strtime = datetime.now(timezone.utc) - timedelta(minutes=report_period_mins)
+ filters={
+ "created_at__lt": threshold_strtime,
+ "backup_status": constants.BACKUP_COMPLETED
+ }
+ success_tasks = self.controller.get_queues(filters=filters)
+ filters['backup_status'] = constants.BACKUP_FAILED
+ failed_tasks = self.controller.get_queues(filters=filters)
+ if success_tasks or failed_tasks:
+ self.controller.publish_backup_result()
+ # Purge backup queue tasks
+ self.controller.purge_backups()
def backup_engine(self, backup_service_period):
LOG.info("Backup manager started %s" % str(time.time()))
diff --git a/staffeln/conductor/result.py b/staffeln/conductor/result.py
index a1587d8..df47a19 100644
--- a/staffeln/conductor/result.py
+++ b/staffeln/conductor/result.py
@@ -52,22 +52,22 @@
backup_mgt = backup.Backup()
project_success = {}
project_failed = {}
- success_queues = backup_mgt.get_queues(
+ success_tasks = backup_mgt.get_queues(
filters={"backup_status": constants.BACKUP_COMPLETED}
)
- for queue in success_queues:
- if queue.project_id in project_success:
- project_success[queue.project_id].append(queue)
+ for task in success_tasks:
+ if task.project_id in project_success:
+ project_success[task.project_id].append(task)
else:
- project_success[queue.project_id] = [queue]
- failed_queues = backup_mgt.get_queues(
+ project_success[task.project_id] = [task]
+ failed_tasks = backup_mgt.get_queues(
filters={"backup_status": constants.BACKUP_FAILED}
)
- for queue in failed_queues:
- if queue.project_id in project_failed:
- project_failed[queue.project_id].append(queue)
+ for task in failed_tasks:
+ if task.project_id in project_failed:
+ project_failed[task.project_id].append(task)
else:
- project_failed[queue.project_id] = [queue]
+ project_failed[task.project_id] = [task]
html = ""
for project_id, project_name in self.project_list:
diff --git a/staffeln/conf/conductor.py b/staffeln/conf/conductor.py
index 5ab8e4b..e8df557 100755
--- a/staffeln/conf/conductor.py
+++ b/staffeln/conf/conductor.py
@@ -23,6 +23,12 @@
min=10,
help=_("The time of bakup period, the unit is one minute."),
),
+ cfg.IntOpt(
+ "report_period",
+ default=1440,
+ min=10,
+ help=_("The time of report period, the unit is one minute."),
+ ),
cfg.StrOpt(
"backup_cycle_timout",
regex=(