def get_state(proc_name): exec_cmd_msg = exec_cmd_pb2.Exec_Cmd() exec_cmd_msg.command = exec_cmd_pb2.Exec_Cmd.STATE exec_cmd_msg.name = proc_name msg = exec_cmd_msg.SerializeToString() unixIPC.send("exec_cmd_pb2",msg) flush() msgs = unixIPC.waitForRecv(); if len(msgs) == 0: print "ERROR: IPC timeout to mod_exec during get_state()"; else: # Bad idea ahead. Works for mod_exec b/c it only sends solicited exec_resp messages if len(msgs) > 1: print "Note: Uh-oh, I ate extra messages: ",msgs[1:len(msgs)] (type, msg, client) = msgs[0]; exec_resp_msg = exec_resp_pb2.Exec_Resp() exec_resp_msg.ParseFromString(msg); if exec_resp_msg.type == exec_resp_pb2.Exec_Resp.STATE: if exec_resp_msg.processes[0].name == proc_name: if exec_resp_msg.processes[0].state == exec_resp_pb2.Exec_Resp.RUNNING: return RUNNING; elif exec_resp_msg.processes[0].state == exec_resp_pb2.Exec_Resp.STOPPED: return STOPPED; elif exec_resp_msg.processes[0].state == exec_resp_pb2.Exec_Resp.RESTARTING: return RESTARTING; else: print "ERROR: mod_exec response to a read did not return the same process name!" else: print "ERROR: Expected STATE response but got",exec_resp_msg.type
def proc_end(): msgs = unixIPC.waitForRecv(); if ( len(msgs) > 0 ): (typ,msg,client) = msgs[-1] if ( typ == 'xbee_relay_resp_pb2'): resp = xbee_relay_resp_pb2.XBee_Relay_Resp() resp.ParseFromString(msg) if ( resp.code == xbee_relay_resp_pb2.XBee_Relay_Resp.SUCCESS ): return SUCCESS elif ( resp.code == xbee_relay_resp_pb2.XBee_Relay_Resp.ADDRESS_NOT_FOUND ): return ADDRESS_NOT_FOUND elif ( resp.code == xbee_relay_resp_pb2.XBee_Relay_Resp.NETWORK_TIMEOUT ): return NETWORK_TIMEOUT return NETWORK_TIMEOUT
def list(): exec_cmd_msg = exec_cmd_pb2.Exec_Cmd() exec_cmd_msg.command = exec_cmd_pb2.Exec_Cmd.LIST msg = exec_cmd_msg.SerializeToString() unixIPC.send("exec_cmd_pb2",msg) flush() msgs = unixIPC.waitForRecv(); if len(msgs) == 0: print "ERROR: IPC timeout to mod_exec during list()"; else: # Bad idea ahead. Works for mod_exec b/c it only sends solicited exec_resp messages if len(msgs) > 1: print "Note: Uh-oh, I ate extra messages: ",msgs[1:len(msgs)] (type, msg, client) = msgs[0]; exec_resp_msg = exec_resp_pb2.Exec_Resp() try: exec_resp_msg.ParseFromString(msg); except google.protobuf.message.DecodeError: print "Error parsing exec_resp_msg" if exec_resp_msg.type == exec_resp_pb2.Exec_Resp.STATE: retval = []; for proc in exec_resp_msg.processes: p = Process() p.name = proc.name; if proc.state == exec_resp_pb2.Exec_Resp.RUNNING: p.state = RUNNING; elif proc.state == exec_resp_pb2.Exec_Resp.STOPPED: p.state = STOPPED; elif proc.state == exec_resp_pb2.Exec_Resp.RESTARTING: p.state = RESTARTING; retval.append(p); return retval; else: print "ERROR: Expected STATE response but got",exec_resp_msg.type