Ejemplo n.º 1
0
 def add_vm_states(self, vm_ids):
     try:
         transaction.begin()
         avail_states = DBSession.query(AvailState).filter(AvailState.entity_id.in_(vm_ids)).all()
         from stackone.model.VM import VM
         (vshs, avails) = ([], [])
         for avail in avail_states:
             vsh = DBSession.query(VMStateHistory).filter(VMStateHistory.node_id == self.node_id).filter(VMStateHistory.vm_id == avail.entity_id).first()
             if vsh is None:
                 vsh = VMStateHistory(self.node_id, avail.entity_id, avail.avail_state, avail.monit_state, avail.transient_state, avail.transient_state_time, avail.owner)
             else:
                 vsh.avail_state = avail.avail_state
                 vsh.monit_state = avail.monit_state
                 vsh.transient_state = avail.transient_state
                 vsh.transient_state_time = avail.transient_state_time
                 vsh.owner = avail.owner
                 vsh.timestamp = datetime.now()
             vshs.append(vsh)
             avails.append(avail)
         DBSession.add_all(vshs)
         DBSession.add_all(avails)
         transaction.commit()
     except Exception as e:
         LOGGER.error(to_str(e))
         DBSession.rollback()
         transaction.begin()
         traceback.print_exc()
         raise e
Ejemplo n.º 2
0
 def remove_vm_states(cls, node_id, vm_id, all=False):
     try:
         transaction.begin()
         query = DBSession.query(cls).filter(cls.vm_id == vm_id)
         if all == False:
             vsh = DBSession.query(cls).filter(cls.node_id == node_id).filter(cls.vm_id == vm_id).first()
             query = query.filter(cls.timestamp >= vsh.timestamp)
         deleted = query.delete()
         transaction.commit()
         return deleted
     except Exception as e:
         logger.error(to_str(e))
         DBSession.rollback()
         transaction.begin()
         traceback.print_exc()
         raise e
Ejemplo n.º 3
0
 def add_vm_states(cls, node_id):
     try:
         node_ent = DBSession.query(Entity).filter(Entity.entity_id == node_id).first()
         if node_ent is None:
             msg = 'Entity can not be found for ' + node_id
             logger.error(msg)
             raise Exception(msg)
         vm_ents = node_ent.children
         vm_ids = [vm.entity_id for vm in vm_ents]
         transaction.begin()
         avail_states = DBSession.query(AvailState).filter(AvailState.entity_id.in_(vm_ids)).all()
         from stackone.model.VM import VM
         vshs,avails = [],[]
         for avail in avail_states:
             vsh = DBSession.query(cls).filter(cls.node_id == node_id).filter(cls.vm_id == avail.entity_id).first()
             if vsh is None:
                 vsh = VMStateHistory(node_id,avail.entity_id,avail.avail_state,avail.monit_state,avail.transient_state,avail.transient_state_time,avail.owner)
             else:
                 vsh.avail_state = avail.avail_state  
                 vsh.monit_state = avail.monit_state
                 vsh.transient_state = avail.transient_state
                 vsh.transient_state_time = avail.transient_state_time
                 vsh.owner = avail.owner
                 vsh.timestamp = datetime.now()
             
             avail.avail_state = VM.SHUTDOWN
             vshs.append(vsh)
             avails.append(avail)
             
         DBSession.add_all(vshs)
         DBSession.add_all(avails)
         transaction.commit()
     except Exception as e:
         logger.error(to_str(e))
         DBSession.rollback()
         transaction.begin()
         traceback.print_exc()
         raise e