+ @property
+ def has_failure(self):
+ """
+ Returns True when the last update has failed and no retry
+ should be performed, yet.
+ """
+ last_status = self.db.last_update_status(self.hostname)
+
+ # Return False if the last update has not failed.
+ if not last_status == "failure":
+ return False
+
+ # Determine when the holdoff time ends
+ last_update = self.db.last_update(self.hostname, status=last_status)
+ holdoff_end = last_update + datetime.timedelta(days=self.holdoff_failure_days)
+
+ now = datetime.datetime.utcnow()
+ if now < holdoff_end:
+ failure_message = self.db.last_update_failure_message(self.hostname)
+
+ logger.warning(_("An update has not been performed because earlier updates failed for %s") \
+ % self.hostname)
+
+ if failure_message:
+ logger.warning(_("Last failure message:"))
+
+ for line in failure_message.splitlines():
+ logger.warning(" %s" % line)
+
+ logger.warning(_("Further updates will be withheld until %s") % holdoff_end)
+
+ return True
+
+ return False
+