示例#1
0
 def run(self):
     while True:
         #print "[  R:Run  C:Run Over  P:Pause  S:Step  O:Step over  K:Skip  G:Goto  A:Abort  E:Script]\n"
         try:
             opt = raw_input()
             opt = opt.strip("\n\r").upper()
             if opt == "P":
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_PAUSE)
             elif opt == "R":
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_RUN)
                 cmd[ExcMessages.FIELD_SO] = False
             elif opt == "C":
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_RUN)
                 cmd[ExcMessages.FIELD_SO] = True
             elif opt == "S":
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_STEP)
             elif opt == "O":
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_STEP_OVER)
             elif opt == "K":
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_SKIP)
             elif opt == "A":
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_ABORT)
             elif opt == "L":
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_RELOAD)
             elif opt == "G":
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_GOTO)
                 try:
                     line = raw_input("line:")
                     cmd[ExcMessages.FIELD_GOTO_LINE] = line
                 except:
                     raise BaseException()
             elif opt == "E":
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_SCRIPT)
                 try:
                     sc = raw_input("script: ")
                     cmd[ExcMessages.FIELD_SCRIPT] = sc
                 except:
                     raise BaseException()
             else:
                 if REGISTRY['EXEC'].getStatus() in \
                     [server.executor.status.FINISHED,server.executor.status.ABORTED]:
                     print "CLEANUP"
                     REGISTRY['EXEC'].cleanup()
                     return
                 print "Unknown command:", opt
                 cmd = None
             if cmd:
                 REGISTRY['EXEC'].processMessage(cmd)
         except SystemExit:
             return
         except:
             traceback.print_exc()
             REGISTRY['EXEC'].cleanup()
             return
示例#2
0
 def run(self):
     while True:
         #print "[  R:Run  C:Run Over  P:Pause  S:Step  O:Step over  K:Skip  G:Goto  A:Abort  E:Script]\n"
         try:
             opt = raw_input()
             opt = opt.strip("\n\r").upper()
             if   opt == "P": 
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_PAUSE)
             elif opt == "R": 
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_RUN)
                 cmd[ExcMessages.FIELD_SO] = False
             elif opt == "C": 
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_RUN)
                 cmd[ExcMessages.FIELD_SO] = True
             elif opt == "S": 
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_STEP)
             elif opt == "O": 
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_STEP_OVER)
             elif opt == "K": 
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_SKIP)
             elif opt == "A": 
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_ABORT)
             elif opt == "L": 
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_RELOAD)
             elif opt == "G":
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_GOTO)
                 try:
                     line = raw_input("line:")
                     cmd[ExcMessages.FIELD_GOTO_LINE] = line
                 except:
                     raise BaseException()
             elif opt == "E":
                 cmd = MsgHelper.createMessage(ExcMessages.CMD_SCRIPT)
                 try:
                     sc = raw_input("script: ")
                     cmd[ExcMessages.FIELD_SCRIPT] = sc
                 except:
                     raise BaseException()
             else:
                 if REGISTRY['EXEC'].getStatus() in \
                     [server.executor.status.FINISHED,server.executor.status.ABORTED]:
                     print "CLEANUP"
                     REGISTRY['EXEC'].cleanup()
                     return
                 print "Unknown command:",opt
                 cmd = None
             if cmd:
                 REGISTRY['EXEC'].processMessage( cmd )
         except SystemExit:
             return
         except:
             traceback.print_exc()
             REGISTRY['EXEC'].cleanup()
             return
示例#3
0
 def notifyContextUpdate(self, ctxName, clientKey = None, errorTxt = None, errorReason = None ):
     # Build the notification message
     msg = MsgHelper.createMessage(LstMessages.MSG_CONTEXT_OP)
     msg[LstMessages.FIELD_CTX_NAME] = ctxName
     msg[LstMessages.FIELD_CTX_STATUS] = self.contextStatus[ctxName]
     if errorTxt:
         msg[FIELD_ERROR] = errorTxt
     if errorReason:
         msg[FIELD_REASON] = errorReason
     # Get all connected clients but the clients of the
     # passed executor
     clientKeys = []
     
     # Notify to everybody if its the listener who closes
     if clientKey is None:
         clientKey = -1
     else:
         clientKey = int(clientKey)
     for client in self.clientKeys:
         client = int(client)
         if client != clientKey:
             clientKeys.append(client)
     
     if len(clientKeys)>0:
         LOG("Notifying context operation done by " + str(clientKey) 
             + " on " + repr(ctxName) + " to " + repr(clientKeys))
         self.messageToClients(clientKeys, msg)
示例#4
0
    def closeContext(self, contextName, clientKey = None ):
        LOG("Closing context '" + contextName + "'", level = LOG_PROC )
        
        # Set the status as starting (internal)
        self.contextStatus[contextName] = LstMessages.DATA_CTX_STOPPING

        contextKey = self.contextKeys[contextName]
        closeMsg = MsgHelper.createMessage(CtxMessages.MSG_CLOSE_CTX)
        closeMsg.setSender("LST")
        closeMsg.setReceiver(contextName)
        self.__ctxIFC.sendMessage(closeMsg,contextKey)

        # Wait context to confirm closure
        try:
            LOG("Waiting context logout", level = LOG_PROC )
            self.buffer.get(True)
            LOG("Context logged out, waiting process to finish")
            ret = ProcessManager.instance().waitProcess( contextName )
            LOG("Context process closed with value " + str(ret), level = LOG_PROC )
            # Set the status as available
            self.contextStatus[contextName] = LstMessages.DATA_CTX_AVAILABLE
            self.notifyContextUpdate(contextName,clientKey)
            self.clearContext(contextName)
            return True
        except:
            LOG("Cannot close context, killing it", level = LOG_PROC )
            self.killContext(contextName)
            self.notifyContextUpdate(contextName,clientKey)
            self.clearContext(contextName)
            return None
示例#5
0
    def notifyContextUpdate(self,
                            ctxName,
                            clientKey=None,
                            errorTxt=None,
                            errorReason=None):
        # Build the notification message
        msg = MsgHelper.createMessage(LstMessages.MSG_CONTEXT_OP)
        msg[LstMessages.FIELD_CTX_NAME] = ctxName
        msg[LstMessages.FIELD_CTX_STATUS] = self.contextStatus[ctxName]
        if errorTxt:
            msg[FIELD_ERROR] = errorTxt
        if errorReason:
            msg[FIELD_REASON] = errorReason
        # Get all connected clients but the clients of the
        # passed executor
        clientKeys = []

        # Notify to everybody if its the listener who closes
        if clientKey is None:
            clientKey = -1
        else:
            clientKey = int(clientKey)
        for client in self.clientKeys:
            client = int(client)
            if client != clientKey:
                clientKeys.append(client)

        if len(clientKeys) > 0:
            LOG("Notifying context operation done by " + str(clientKey) +
                " on " + repr(ctxName) + " to " + repr(clientKeys))
            self.messageToClients(clientKeys, msg)
示例#6
0
    def closeContext(self, contextName, clientKey=None):
        LOG("Closing context '" + contextName + "'", level=LOG_PROC)

        # Set the status as starting (internal)
        self.contextStatus[contextName] = LstMessages.DATA_CTX_STOPPING

        contextKey = self.contextKeys[contextName]
        closeMsg = MsgHelper.createMessage(CtxMessages.MSG_CLOSE_CTX)
        closeMsg.setSender("LST")
        closeMsg.setReceiver(contextName)
        self.__ctxIFC.sendMessage(closeMsg, contextKey)

        # Wait context to confirm closure
        try:
            LOG("Waiting context logout", level=LOG_PROC)
            self.buffer.get(True)
            LOG("Context logged out, waiting process to finish")
            ret = ProcessManager.instance().waitProcess(contextName)
            LOG("Context process closed with value " + str(ret),
                level=LOG_PROC)
            # Set the status as available
            self.contextStatus[contextName] = LstMessages.DATA_CTX_AVAILABLE
            self.notifyContextUpdate(contextName, clientKey)
            self.clearContext(contextName)
            return True
        except:
            LOG("Cannot close context, killing it", level=LOG_PROC)
            self.killContext(contextName)
            self.notifyContextUpdate(contextName, clientKey)
            self.clearContext(contextName)
            return None
示例#7
0
 def notifyContextCrash(self, ctxName ):
     # Build the notification message
     msg = MsgHelper.createMessage(LstMessages.MSG_CONTEXT_LOST)
     msg.setType(MSG_TYPE_ERROR)
     msg[LstMessages.FIELD_CTX_NAME] = ctxName
     msg[LstMessages.FIELD_CTX_STATUS] = self.contextStatus[ctxName]
     msg[FIELD_ERROR] = "Context " + ctxName + " connection lost"
     msg[FIELD_REASON] = " " 
     
     clientKeys = []
     for client in self.clientKeys:
         clientKeys.append(int(client))
     
     if len(clientKeys)>0:
         LOG("Notifying context crash " + repr(ctxName) + " to " + repr(clientKeys))
         self.messageToClients(clientKeys, msg)
示例#8
0
    def notifyContextCrash(self, ctxName):
        # Build the notification message
        msg = MsgHelper.createMessage(LstMessages.MSG_CONTEXT_LOST)
        msg.setType(MSG_TYPE_ERROR)
        msg[LstMessages.FIELD_CTX_NAME] = ctxName
        msg[LstMessages.FIELD_CTX_STATUS] = self.contextStatus[ctxName]
        msg[FIELD_ERROR] = "Context " + ctxName + " connection lost"
        msg[FIELD_REASON] = " "

        clientKeys = []
        for client in self.clientKeys:
            clientKeys.append(int(client))

        if len(clientKeys) > 0:
            LOG("Notifying context crash " + repr(ctxName) + " to " +
                repr(clientKeys))
            self.messageToClients(clientKeys, msg)