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