Example #1
0
    def updateInstrumentStatus(self,instrument,status,key=None):
        session = ioSession()
        iostatus = session.query(InstrumentOperationStatus).filter(InstrumentOperationStatus.instrument == instrument)[0]
        iostatus_keys = session.query(KeyList).filter(KeyList.key_id == iostatus.id)
        str_keys = [k.key for k in iostatus_keys]
        active_keys = [k.active for k in iostatus_keys]
        # session.commit()

        self.log.debug("Current instrument status is %s" % InstrumentOperationFlag[iostatus.status])
        if iostatus.status != InstrumentOperationFlag.LOCK.index: # Instrument currently unlocked
            iostatus.status = status.index # just flip status flag

            if key is not None and status == InstrumentOperationFlag.LOCK: # new status is a lock
                if key in str_keys: # Activating existing key
                    iostatus_keys[str_keys.index(key)].active = True
                    iostatus_keys[str_keys.index(key)].updatetime = self.controller.site().ut().replace(tzinfo=None)
                else: # Creating new key
                    newkey = KeyList(key_id=iostatus.id,
                                     key=key,
                                     updatetime=self.controller.site().ut().replace(tzinfo=None),
                                     active=True)
                    session.add(newkey)
        else: # Instrument is locked

            if status != InstrumentOperationFlag.LOCK: # it is an unlock operation
                if key in str_keys:# and key is in the list
                    active_keys[str_keys.index(key)] = False
                    iostatus_keys[str_keys.index(key)].active = False
                    iostatus_keys[str_keys.index(key)].updatetime = self.controller.site().ut().replace(tzinfo=None)
                if True not in active_keys: # able to unlock instrument
                    iostatus.status = status.index
                else:
                    # Could not unlock instrument
                    session.commit()
                    return False

            else: # it is a new lock operation
                if key in str_keys: # Activating existing key
                    iostatus_keys[str_keys.index(key)].active = True
                    iostatus_keys[str_keys.index(key)].updatetime = self.controller.site().ut().replace(tzinfo=None)
                else: # Creating new key
                    newkey = KeyList(key_id=iostatus.id,
                                     key=key,
                                     updatetime=self.controller.site().ut().replace(tzinfo=None),
                                     active=True)
                    session.add(newkey)

        session.commit()
        return True
Example #2
0
    def __start__(self):

        # configure items list
        from chimera_manager.controllers import model
        for name,obj in inspect.getmembers(model):
            if inspect.isclass(obj) and issubclass(obj,model.Check):
                self.itemsList[name.upper()] = obj

        # Configure handlers
        for handler in self.checkHandlers.values():
            self._injectInstrument(handler)

        # Configure base responses
        for name,obj in inspect.getmembers(baseresponse):
            if inspect.isclass(obj) and issubclass(obj,baseresponse.BaseResponse):
                self.responseList[name.upper()] = obj

        # Configure base responses handlers
        for handler in self.responseList.values():
            self._injectInstrument(handler)

        # Todo: Configure user-defined responses

        # Read instrument status flag from database
        session = ioSession()
        for inst_ in self.controller.getInstrumentList():
            status = session.query(InstrumentOperationStatus).filter(InstrumentOperationStatus.instrument == inst_)
            if status.count() == 0:
                self.log.warning("No %s intrument on database. Adding with status UNSET."%inst_)
                iostatus = InstrumentOperationStatus(instrument = inst_,
                                                     status = InstrumentOperationFlag.UNSET.index,
                                                     lastUpdate = self.controller.site().ut().replace(tzinfo=None),
                                                     lastChange = self.controller.site().ut().replace(tzinfo=None))
                session.add(iostatus)
                session.commit()
            else:
                self.controller.setFlag(inst_,
                                        InstrumentOperationFlag[status[0].status],
                                        False)


        return
Example #3
0
    def instrumentKey(self,instrument):
        session = ioSession()
        iostatus = session.query(InstrumentOperationStatus).filter(InstrumentOperationStatus.instrument == instrument)[0]
        iostatus_keys = session.query(KeyList).filter(KeyList.key_id == iostatus.id, KeyList.active == True)

        return [k.key for k in iostatus_keys]
Example #4
0
    def getInstrumentStatus(self,instrument):
        session = ioSession()
        iostatus = session.query(InstrumentOperationStatus).filter(InstrumentOperationStatus.instrument == instrument)

        return InstrumentOperationFlag[iostatus[0].status]