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=(