daemon: fixed session.add_event parameter to be specific to node_id
This commit is contained in:
parent
0bcf7c1d83
commit
5df2e36083
2 changed files with 19 additions and 24 deletions
|
@ -809,38 +809,38 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
:param core.api.tlv.coreapi.CoreExecMessage message: execute message to handle
|
:param core.api.tlv.coreapi.CoreExecMessage message: execute message to handle
|
||||||
:return: reply messages
|
:return: reply messages
|
||||||
"""
|
"""
|
||||||
node_num = message.get_tlv(ExecuteTlvs.NODE.value)
|
node_id = message.get_tlv(ExecuteTlvs.NODE.value)
|
||||||
execute_num = message.get_tlv(ExecuteTlvs.NUMBER.value)
|
execute_num = message.get_tlv(ExecuteTlvs.NUMBER.value)
|
||||||
execute_time = message.get_tlv(ExecuteTlvs.TIME.value)
|
execute_time = message.get_tlv(ExecuteTlvs.TIME.value)
|
||||||
command = message.get_tlv(ExecuteTlvs.COMMAND.value)
|
command = message.get_tlv(ExecuteTlvs.COMMAND.value)
|
||||||
|
|
||||||
# local flag indicates command executed locally, not on a node
|
# local flag indicates command executed locally, not on a node
|
||||||
if node_num is None and not message.flags & MessageFlags.LOCAL.value:
|
if node_id is None and not message.flags & MessageFlags.LOCAL.value:
|
||||||
raise ValueError("Execute Message is missing node number.")
|
raise ValueError("Execute Message is missing node number.")
|
||||||
|
|
||||||
if execute_num is None:
|
if execute_num is None:
|
||||||
raise ValueError("Execute Message is missing execution number.")
|
raise ValueError("Execute Message is missing execution number.")
|
||||||
|
|
||||||
if execute_time is not None:
|
if execute_time is not None:
|
||||||
self.session.add_event(execute_time, node=node_num, name=None, data=command)
|
self.session.add_event(
|
||||||
|
float(execute_time), node_id=node_id, name=None, data=command
|
||||||
|
)
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
node = self.session.get_node(node_num, CoreNodeBase)
|
node = self.session.get_node(node_id, CoreNodeBase)
|
||||||
|
|
||||||
# build common TLV items for reply
|
# build common TLV items for reply
|
||||||
tlv_data = b""
|
tlv_data = b""
|
||||||
if node_num is not None:
|
if node_id is not None:
|
||||||
tlv_data += coreapi.CoreExecuteTlv.pack(
|
tlv_data += coreapi.CoreExecuteTlv.pack(ExecuteTlvs.NODE.value, node_id)
|
||||||
ExecuteTlvs.NODE.value, node_num
|
|
||||||
)
|
|
||||||
tlv_data += coreapi.CoreExecuteTlv.pack(
|
tlv_data += coreapi.CoreExecuteTlv.pack(
|
||||||
ExecuteTlvs.NUMBER.value, execute_num
|
ExecuteTlvs.NUMBER.value, execute_num
|
||||||
)
|
)
|
||||||
tlv_data += coreapi.CoreExecuteTlv.pack(ExecuteTlvs.COMMAND.value, command)
|
tlv_data += coreapi.CoreExecuteTlv.pack(ExecuteTlvs.COMMAND.value, command)
|
||||||
|
|
||||||
if message.flags & MessageFlags.TTY.value:
|
if message.flags & MessageFlags.TTY.value:
|
||||||
if node_num is None:
|
if node_id is None:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
# echo back exec message with cmd for spawning interactive terminal
|
# echo back exec message with cmd for spawning interactive terminal
|
||||||
if command == "bash":
|
if command == "bash":
|
||||||
|
@ -850,7 +850,6 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
reply = coreapi.CoreExecMessage.pack(MessageFlags.TTY.value, tlv_data)
|
reply = coreapi.CoreExecMessage.pack(MessageFlags.TTY.value, tlv_data)
|
||||||
return (reply,)
|
return (reply,)
|
||||||
else:
|
else:
|
||||||
logging.info("execute message with cmd=%s", command)
|
|
||||||
# execute command and send a response
|
# execute command and send a response
|
||||||
if (
|
if (
|
||||||
message.flags & MessageFlags.STRING.value
|
message.flags & MessageFlags.STRING.value
|
||||||
|
@ -870,7 +869,6 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
except CoreCommandError as e:
|
except CoreCommandError as e:
|
||||||
res = e.stderr
|
res = e.stderr
|
||||||
status = e.returncode
|
status = e.returncode
|
||||||
logging.info("done exec cmd=%s with status=%d", command, status)
|
|
||||||
if message.flags & MessageFlags.TEXT.value:
|
if message.flags & MessageFlags.TEXT.value:
|
||||||
tlv_data += coreapi.CoreExecuteTlv.pack(
|
tlv_data += coreapi.CoreExecuteTlv.pack(
|
||||||
ExecuteTlvs.RESULT.value, res
|
ExecuteTlvs.RESULT.value, res
|
||||||
|
@ -888,7 +886,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
else:
|
else:
|
||||||
node.cmd(command, wait=False)
|
node.cmd(command, wait=False)
|
||||||
except CoreError:
|
except CoreError:
|
||||||
logging.exception("error getting object: %s", node_num)
|
logging.exception("error getting object: %s", node_id)
|
||||||
# XXX wait and queue this message to try again later
|
# XXX wait and queue this message to try again later
|
||||||
# XXX maybe this should be done differently
|
# XXX maybe this should be done differently
|
||||||
if not message.flags & MessageFlags.LOCAL.value:
|
if not message.flags & MessageFlags.LOCAL.value:
|
||||||
|
@ -1549,11 +1547,11 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
if event_type == EventTypes.INSTANTIATION_STATE and isinstance(
|
if event_type == EventTypes.INSTANTIATION_STATE and isinstance(
|
||||||
node, WlanNode
|
node, WlanNode
|
||||||
):
|
):
|
||||||
self.session.start_mobility(node_ids=(node.id,))
|
self.session.start_mobility(node_ids=[node.id])
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
logging.warning(
|
logging.warning(
|
||||||
"dropping unhandled event message for node: %s", node_id
|
"dropping unhandled event message for node: %s", node.name
|
||||||
)
|
)
|
||||||
return ()
|
return ()
|
||||||
self.session.set_state(event_type)
|
self.session.set_state(event_type)
|
||||||
|
@ -1611,14 +1609,16 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
self.session.save_xml(filename)
|
self.session.save_xml(filename)
|
||||||
elif event_type == EventTypes.SCHEDULED:
|
elif event_type == EventTypes.SCHEDULED:
|
||||||
etime = event_data.time
|
etime = event_data.time
|
||||||
node = event_data.node
|
node_id = event_data.node
|
||||||
name = event_data.name
|
name = event_data.name
|
||||||
data = event_data.data
|
data = event_data.data
|
||||||
if etime is None:
|
if etime is None:
|
||||||
logging.warning("Event message scheduled event missing start time")
|
logging.warning("Event message scheduled event missing start time")
|
||||||
return ()
|
return ()
|
||||||
if message.flags & MessageFlags.ADD.value:
|
if message.flags & MessageFlags.ADD.value:
|
||||||
self.session.add_event(float(etime), node=node, name=name, data=data)
|
self.session.add_event(
|
||||||
|
float(etime), node_id=node_id, name=name, data=data
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
|
@ -1564,23 +1564,18 @@ class Session:
|
||||||
return 0.0
|
return 0.0
|
||||||
|
|
||||||
def add_event(
|
def add_event(
|
||||||
self,
|
self, event_time: float, node_id: int = None, name: str = None, data: str = None
|
||||||
event_time: float,
|
|
||||||
node: CoreNode = None,
|
|
||||||
name: str = None,
|
|
||||||
data: str = None,
|
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Add an event to the event queue, with a start time relative to the
|
Add an event to the event queue, with a start time relative to the
|
||||||
start of the runtime state.
|
start of the runtime state.
|
||||||
|
|
||||||
:param event_time: event time
|
:param event_time: event time
|
||||||
:param node: node to add event for
|
:param node_id: node to add event for
|
||||||
:param name: name of event
|
:param name: name of event
|
||||||
:param data: data for event
|
:param data: data for event
|
||||||
:return: nothing
|
:return: nothing
|
||||||
"""
|
"""
|
||||||
event_time = float(event_time)
|
|
||||||
current_time = self.runtime()
|
current_time = self.runtime()
|
||||||
if current_time > 0:
|
if current_time > 0:
|
||||||
if event_time <= current_time:
|
if event_time <= current_time:
|
||||||
|
@ -1592,7 +1587,7 @@ class Session:
|
||||||
return
|
return
|
||||||
event_time = event_time - current_time
|
event_time = event_time - current_time
|
||||||
self.event_loop.add_event(
|
self.event_loop.add_event(
|
||||||
event_time, self.run_event, node=node, name=name, data=data
|
event_time, self.run_event, node_id=node_id, name=name, data=data
|
||||||
)
|
)
|
||||||
if not name:
|
if not name:
|
||||||
name = ""
|
name = ""
|
||||||
|
|
Loading…
Add table
Reference in a new issue