def update_history(self, status_name, size, task=None, tmp_status=None, fault=None, deploy_fault_message=None, deploy_fault_trace=None, first_update=False): """ Given the status name and size, look up the previous history object If nothing has changed: return (False, last_history) else: end date previous history object, start new history object. return (True, new_history) """ # FIXME: Move this call so that it happens inside InstanceStatusHistory to avoid circ.dep. from core.models import InstanceStatusHistory import traceback # 1. Get status name status_name = _get_status_name_for_provider(self.source.provider, status_name, task, tmp_status) activity = self.esh_activity() status = self.esh_status() extra = InstanceStatusHistory._build_extra( status_name=status_name, fault=fault, deploy_fault_message=deploy_fault_message, deploy_fault_trace=deploy_fault_trace) # 2. Get the last history (or Build a new one if no other exists) has_history = self.instancestatushistory_set.all().count() if not has_history: last_history = InstanceStatusHistory.create_history( status_name, self, size, start_date=self.start_date, activity=activity, extra=extra) last_history.save() logger.debug( "STATUSUPDATE - FIRST - Instance:%s Old Status: %s - %s New\ Status: %s Tmp Status: %s" % (self.provider_alias, status, activity, status_name, tmp_status)) logger.debug("STATUSUPDATE - Traceback: %s" % traceback.format_stack()) last_history = self.get_last_history() # 2. Size and name must match to continue using last history if last_history.status.name == status_name \ and last_history.size.id == size.id: # logger.info("status_name matches last history:%s " % # last_history.status.name) return (False, last_history) logger.debug( "STATUSUPDATE - Instance:%s Old Status: %s - %s New Status: %s\ Tmp Status: %s" % (self.provider_alias, status, activity, status_name, tmp_status)) logger.debug("STATUSUPDATE - Traceback: %s" % traceback.format_stack()) # 3. ASSERT: A new history item is required due to a State or Size # Change now_time = timezone.now() try: new_history = InstanceStatusHistory.transaction( status_name, activity, self, size, extra=extra, start_time=now_time, last_history=last_history) return (True, new_history) except ValueError: logger.exception("Bad transaction") return (False, last_history)
def update_history( self, status_name, size, task=None, tmp_status=None, fault=None, deploy_fault_message=None, deploy_fault_trace=None, first_update=False ): """ Given the status name and size, look up the previous history object If nothing has changed: return (False, last_history) else: end date previous history object, start new history object. return (True, new_history) """ # FIXME: Move this call so that it happens inside InstanceStatusHistory to avoid circ.dep. from core.models import InstanceStatusHistory import traceback # 1. Get status name status_name = _get_status_name_for_provider( self.source.provider, status_name, task, tmp_status ) activity = self.esh_activity() status = self.esh_status() extra = InstanceStatusHistory._build_extra( status_name=status_name, fault=fault, deploy_fault_message=deploy_fault_message, deploy_fault_trace=deploy_fault_trace ) # 2. Get the last history (or Build a new one if no other exists) has_history = self.instancestatushistory_set.all().count() if not has_history: last_history = InstanceStatusHistory.create_history( status_name, self, size, start_date=self.start_date, activity=activity, extra=extra ) last_history.save() logger.debug( "STATUSUPDATE - FIRST - Instance:%s Old Status: %s - %s New\ Status: %s Tmp Status: %s" % ( self.provider_alias, status, activity, status_name, tmp_status ) ) logger.debug( "STATUSUPDATE - Traceback: %s" % traceback.format_stack() ) last_history = self.get_last_history() # 2. Size and name must match to continue using last history if last_history.status.name == status_name \ and last_history.size.id == size.id: # logger.info("status_name matches last history:%s " % # last_history.status.name) return (False, last_history) logger.debug( "STATUSUPDATE - Instance:%s Old Status: %s - %s New Status: %s\ Tmp Status: %s" % (self.provider_alias, status, activity, status_name, tmp_status) ) logger.debug("STATUSUPDATE - Traceback: %s" % traceback.format_stack()) # 3. ASSERT: A new history item is required due to a State or Size # Change now_time = timezone.now() try: new_history = InstanceStatusHistory.transaction( status_name, activity, self, size, extra=extra, start_time=now_time, last_history=last_history ) return (True, new_history) except ValueError: logger.exception("Bad transaction") return (False, last_history)