small cleanup with stopping sessions

This commit is contained in:
bharnden 2019-11-22 14:58:41 -08:00
parent 52c6f2f31c
commit 981be3b7ff
3 changed files with 36 additions and 65 deletions

View file

@ -74,10 +74,25 @@ class CoreClient:
self.emane_config = None self.emane_config = None
self.created_nodes = set() self.created_nodes = set()
self.created_links = set() self.created_links = set()
self.service_configs = {} self.service_configs = {}
self.file_configs = {} self.file_configs = {}
def reset(self):
self.id = 1
self.reusable.clear()
self.preexisting.clear()
self.canvas_nodes.clear()
self.links.clear()
self.hooks.clear()
self.wlan_configs.clear()
self.mobility_configs.clear()
self.emane_config = None
self.location = None
self.service_configs.clear()
self.file_configs.clear()
self.interfaces_manager.reset()
self.interface_to_edge.clear()
def set_observer(self, value): def set_observer(self, value):
self.observer = value self.observer = value
@ -130,16 +145,7 @@ class CoreClient:
self.master.title(f"CORE Session({self.session_id})") self.master.title(f"CORE Session({self.session_id})")
# clear session data # clear session data
self.reusable.clear() self.reset()
self.preexisting.clear()
self.canvas_nodes.clear()
self.links.clear()
self.hooks.clear()
self.wlan_configs.clear()
self.mobility_configs.clear()
self.emane_config = None
self.service_configs.clear()
self.file_configs.clear()
# get session data # get session data
response = self.client.get_session(self.session_id) response = self.client.get_session(self.session_id)
@ -224,29 +230,12 @@ class CoreClient:
) )
self.join_session(response.session_id, query_location=False) self.join_session(response.session_id, query_location=False)
def delete_session(self, custom_sid=None): def delete_session(self, session_id=None):
if custom_sid is None: if session_id is None:
sid = self.session_id session_id = self.session_id
else: response = self.client.delete_session(session_id)
sid = custom_sid
response = self.client.delete_session(sid)
logging.info("Deleted session result: %s", response) logging.info("Deleted session result: %s", response)
def shutdown_session(self, custom_sid=None):
if custom_sid is None:
sid = self.session_id
else:
sid = custom_sid
s = self.client.get_session(sid).session
# delete links and nodes from running session
if s.state == core_pb2.SessionState.RUNTIME:
self.client.set_session_state(
self.session_id, core_pb2.SessionState.DATACOLLECT
)
self.delete_links(sid)
self.delete_nodes(sid)
self.delete_session(sid)
def set_up(self): def set_up(self):
""" """
Query sessions, if there exist any, prompt whether to join one Query sessions, if there exist any, prompt whether to join one
@ -287,31 +276,6 @@ class CoreClient:
response = self.client.edit_node(self.session_id, node_id, position) response = self.client.edit_node(self.session_id, node_id, position)
logging.info("updated node id %s: %s", node_id, response) logging.info("updated node id %s: %s", node_id, response)
def delete_nodes(self, delete_session=None):
if delete_session is None:
sid = self.session_id
else:
sid = delete_session
for node in self.client.get_session(sid).session.nodes:
response = self.client.delete_node(self.session_id, node.id)
logging.info("delete nodes %s", response)
def delete_links(self, delete_session=None):
if delete_session is None:
sid = self.session_id
else:
sid = delete_session
for link in self.client.get_session(sid).session.links:
response = self.client.delete_link(
self.session_id,
link.node_one_id,
link.node_two_id,
link.interface_one.id,
link.interface_two.id,
)
logging.info("delete links %s", response)
def start_session(self): def start_session(self):
nodes = [x.core_node for x in self.canvas_nodes.values()] nodes = [x.core_node for x in self.canvas_nodes.values()]
links = list(self.links.values()) links = list(self.links.values())
@ -340,17 +304,18 @@ class CoreClient:
service_configs, service_configs,
file_configs, file_configs,
) )
logging.debug("Start session %s, result: %s", self.session_id, response.result) logging.debug("start session(%s), result: %s", self.session_id, response.result)
print(self.client.get_session(self.session_id))
def stop_session(self): def stop_session(self, session_id=None):
response = self.client.stop_session(session_id=self.session_id) if not session_id:
logging.debug("coregrpc.py Stop session, result: %s", response.result) session_id = self.session_id
response = self.client.stop_session(session_id)
logging.debug("stopped session(%s), result: %s", session_id, response.result)
def launch_terminal(self, node_id): def launch_terminal(self, node_id):
response = self.client.get_node_terminal(self.session_id, node_id) response = self.client.get_node_terminal(self.session_id, node_id)
logging.info("get terminal %s", response.terminal) logging.info("get terminal %s", response.terminal)
os.system("xterm -e %s &" % response.terminal) os.system(f"xterm -e {response.terminal} &")
def save_xml(self, file_path): def save_xml(self, file_path):
""" """
@ -360,7 +325,7 @@ class CoreClient:
:return: nothing :return: nothing
""" """
response = self.client.save_xml(self.session_id, file_path) response = self.client.save_xml(self.session_id, file_path)
logging.info("coregrpc.py save xml %s", response) logging.info("saved xml(%s): %s", file_path, response)
self.client.events(self.session_id, self.handle_events) self.client.events(self.session_id, self.handle_events)
def open_xml(self, file_path): def open_xml(self, file_path):

View file

@ -155,6 +155,6 @@ class SessionsDialog(Dialog):
self.join_session(sid) self.join_session(sid)
def shutdown_session(self, sid): def shutdown_session(self, sid):
self.app.core.shutdown_session(sid) self.app.core.stop_session(sid)
self.click_new() self.click_new()
self.destroy() self.destroy()

View file

@ -13,10 +13,16 @@ def random_mac():
class InterfaceManager: class InterfaceManager:
def __init__(self, app, cidr="10.0.0.0/24"): def __init__(self, app, cidr="10.0.0.0/24"):
self.app = app self.app = app
self.default = cidr
self.cidr = IPNetwork(cidr) self.cidr = IPNetwork(cidr)
self.deleted = [] self.deleted = []
self.current = None self.current = None
def reset(self):
self.cidr = IPNetwork(self.default)
self.deleted.clear()
self.current = None
def get_ips(self, node_id): def get_ips(self, node_id):
ip4 = self.current[node_id] ip4 = self.current[node_id]
ip6 = ip4.ipv6() ip6 = ip4.ipv6()