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