Example #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
Example #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
Example #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)
Example #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
Example #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)
Example #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
Example #7
0
 def isContextBusy(self, contextName):
     contextKey = self.contextKeys[contextName]
     checkMsg = MsgHelper.createRequest(CtxMessages.REQ_CAN_CLOSE,"LST","CTX")
     checkMsg.setSender("LST")
     checkMsg.setReceiver(contextName)
     response = self.__ctxIFC.sendRequest(checkMsg, contextKey)
     try:
         canClose = eval(response[CtxMessages.FIELD_BOOL])
     except:
         canClose = True
     return canClose
Example #8
0
 def isContextBusy(self, contextName):
     contextKey = self.contextKeys[contextName]
     checkMsg = MsgHelper.createRequest(CtxMessages.REQ_CAN_CLOSE, "LST",
                                        "CTX")
     checkMsg.setSender("LST")
     checkMsg.setReceiver(contextName)
     response = self.__ctxIFC.sendRequest(checkMsg, contextKey)
     try:
         canClose = eval(response[CtxMessages.FIELD_BOOL])
     except:
         canClose = True
     return canClose
Example #9
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)
Example #10
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)
Example #11
0
 def processChildRequest(self, msg):
     response = MsgHelper.createResponse( msg.getId(), msg )
     if msg.getType() == MSG_TYPE_NOTIFY:
         if msg[FIELD_DATA_TYPE]==ExcMessages.DATA_TYPE_STATUS:
             self.lock.acquire()
             try:
                 self.childStatus = msg[ExcMessages.FIELD_EXEC_STATUS]
                 if self.childStatus == ERROR:
                     self.childError  = msg[FIELD_ERROR]
                     self.childReason = msg[FIELD_REASON]
                 elif self.childStatus == ABORTED:
                     self.childError = "Execution did not finish"
                     self.childError = "Procedure was aborted"
             finally:
                 self.lock.release()
             LOG("Current child status: " + repr(self.childStatus), level = LOG_PROC)
     return response
Example #12
0
 def processChildRequest(self, msg):
     response = MsgHelper.createResponse(msg.getId(), msg)
     if msg.getType() == MSG_TYPE_NOTIFY:
         if msg[FIELD_DATA_TYPE] == ExcMessages.DATA_TYPE_STATUS:
             self.lock.acquire()
             try:
                 self.childStatus = msg[ExcMessages.FIELD_EXEC_STATUS]
                 if self.childStatus == ERROR:
                     self.childError = msg[FIELD_ERROR]
                     self.childReason = msg[FIELD_REASON]
                 elif self.childStatus == ABORTED:
                     self.childError = "Execution did not finish"
                     self.childError = "Procedure was aborted"
             finally:
                 self.lock.release()
             LOG("Current child status: " + repr(self.childStatus),
                 level=LOG_PROC)
     return response