grpc cleaned up session rpc calls to leverage proto constructors
This commit is contained in:
parent
c6cfe1a8f4
commit
5c2521bc12
2 changed files with 45 additions and 110 deletions
|
@ -49,45 +49,35 @@ class CoreGrpcClient(object):
|
||||||
return self.stub.CreateSession(request)
|
return self.stub.CreateSession(request)
|
||||||
|
|
||||||
def delete_session(self, _id):
|
def delete_session(self, _id):
|
||||||
request = core_pb2.DeleteSessionRequest()
|
request = core_pb2.DeleteSessionRequest(id=_id)
|
||||||
request.id = _id
|
|
||||||
return self.stub.DeleteSession(request)
|
return self.stub.DeleteSession(request)
|
||||||
|
|
||||||
def get_sessions(self):
|
def get_sessions(self):
|
||||||
return self.stub.GetSessions(core_pb2.GetSessionsRequest())
|
return self.stub.GetSessions(core_pb2.GetSessionsRequest())
|
||||||
|
|
||||||
def get_session(self, _id):
|
def get_session(self, _id):
|
||||||
request = core_pb2.GetSessionRequest()
|
request = core_pb2.GetSessionRequest(id=_id)
|
||||||
request.id = _id
|
|
||||||
return self.stub.GetSession(request)
|
return self.stub.GetSession(request)
|
||||||
|
|
||||||
def get_session_options(self, _id):
|
def get_session_options(self, _id):
|
||||||
request = core_pb2.GetSessionOptionsRequest()
|
request = core_pb2.GetSessionOptionsRequest(id=_id)
|
||||||
request.id = _id
|
|
||||||
return self.stub.GetSessionOptions(request)
|
return self.stub.GetSessionOptions(request)
|
||||||
|
|
||||||
def set_session_options(self, _id, config):
|
def set_session_options(self, _id, config):
|
||||||
request = core_pb2.SetSessionOptionsRequest()
|
request = core_pb2.SetSessionOptionsRequest(id=_id, config=config)
|
||||||
request.id = _id
|
|
||||||
request.config.update(config)
|
|
||||||
return self.stub.SetSessionOptions(request)
|
return self.stub.SetSessionOptions(request)
|
||||||
|
|
||||||
def get_session_location(self, _id):
|
def get_session_location(self, _id):
|
||||||
request = core_pb2.GetSessionLocationRequest()
|
request = core_pb2.GetSessionLocationRequest(id=_id)
|
||||||
request.id = _id
|
|
||||||
return self.stub.GetSessionLocation(request)
|
return self.stub.GetSessionLocation(request)
|
||||||
|
|
||||||
def set_session_location(self, _id, x=None, y=None, z=None, lat=None, lon=None, alt=None, scale=None):
|
def set_session_location(self, _id, x=None, y=None, z=None, lat=None, lon=None, alt=None, scale=None):
|
||||||
request = core_pb2.SetSessionLocationRequest()
|
position = core_pb2.Position(x=x, y=y, z=z, lat=lat, lon=lon, alt=alt)
|
||||||
request.id = _id
|
request = core_pb2.SetSessionLocationRequest(id=_id, position=position, scale=scale)
|
||||||
update_proto(request.position, x=x, y=y, z=z, lat=lat, lon=lon, alt=alt)
|
|
||||||
update_proto(request, scale=scale)
|
|
||||||
return self.stub.SetSessionLocation(request)
|
return self.stub.SetSessionLocation(request)
|
||||||
|
|
||||||
def set_session_state(self, _id, state):
|
def set_session_state(self, _id, state):
|
||||||
request = core_pb2.SetSessionStateRequest()
|
request = core_pb2.SetSessionStateRequest(id=_id, state=state.value)
|
||||||
request.id = _id
|
|
||||||
request.state = state.value
|
|
||||||
return self.stub.SetSessionState(request)
|
return self.stub.SetSessionState(request)
|
||||||
|
|
||||||
def node_events(self, _id, handler):
|
def node_events(self, _id, handler):
|
||||||
|
|
|
@ -61,40 +61,27 @@ def get_config_groups(config, configurable_options):
|
||||||
return groups
|
return groups
|
||||||
|
|
||||||
|
|
||||||
def convert_link(session, link_data, link):
|
def convert_link(session, link_data, links):
|
||||||
|
interface_one = None
|
||||||
if link_data.interface1_id is not None:
|
if link_data.interface1_id is not None:
|
||||||
node = session.get_object(link_data.node1_id)
|
node = session.get_object(link_data.node1_id)
|
||||||
interface = node.netif(link_data.interface1_id)
|
interface = node.netif(link_data.interface1_id)
|
||||||
link.interface_one.id = link_data.interface1_id
|
interface_one = core_pb2.Interface(
|
||||||
link.interface_one.name = interface.name
|
id=link_data.interface1_id, name=interface.name, mac=convert_value(link_data.interface1_mac),
|
||||||
update_proto(
|
ip4=convert_value(link_data.interface1_ip4), ip4mask=link_data.interface1_ip4_mask,
|
||||||
link.interface_one,
|
ip6=convert_value(link_data.interface1_ip6), ip6mask=link_data.interface1_ip6_mask)
|
||||||
mac=convert_value(link_data.interface1_mac),
|
|
||||||
ip4=convert_value(link_data.interface1_ip4),
|
|
||||||
ip4mask=link_data.interface1_ip4_mask,
|
|
||||||
ip6=convert_value(link_data.interface1_ip6),
|
|
||||||
ip6mask=link_data.interface1_ip6_mask
|
|
||||||
)
|
|
||||||
|
|
||||||
|
interface_two = None
|
||||||
if link_data.interface2_id is not None:
|
if link_data.interface2_id is not None:
|
||||||
node = session.get_object(link_data.node2_id)
|
node = session.get_object(link_data.node2_id)
|
||||||
interface = node.netif(link_data.interface2_id)
|
interface = node.netif(link_data.interface2_id)
|
||||||
link.interface_two.id = link_data.interface2_id
|
interface_two = core_pb2.Interface(
|
||||||
link.interface_two.name = interface.name
|
id=link_data.interface2_id, name=interface.name, mac=convert_value(link_data.interface2_mac),
|
||||||
update_proto(
|
ip4=convert_value(link_data.interface2_ip4), ip4mask=link_data.interface2_ip4_mask,
|
||||||
link.interface_two,
|
ip6=convert_value(link_data.interface2_ip6), ip6mask=link_data.interface2_ip6_mask
|
||||||
mac=convert_value(link_data.interface2_mac),
|
|
||||||
ip4=convert_value(link_data.interface2_ip4),
|
|
||||||
ip4mask=link_data.interface2_ip4_mask,
|
|
||||||
ip6=convert_value(link_data.interface2_ip6),
|
|
||||||
ip6mask=link_data.interface2_ip6_mask
|
|
||||||
)
|
)
|
||||||
|
|
||||||
link.node_one = link_data.node1_id
|
options = core_pb2.LinkOptions(
|
||||||
link.node_two = link_data.node2_id
|
|
||||||
link.type = link_data.link_type
|
|
||||||
update_proto(
|
|
||||||
link.options,
|
|
||||||
opaque=link_data.opaque,
|
opaque=link_data.opaque,
|
||||||
jitter=link_data.jitter,
|
jitter=link_data.jitter,
|
||||||
key=link_data.key,
|
key=link_data.key,
|
||||||
|
@ -108,6 +95,11 @@ def convert_link(session, link_data, link):
|
||||||
unidirectional=link_data.unidirectional
|
unidirectional=link_data.unidirectional
|
||||||
)
|
)
|
||||||
|
|
||||||
|
links.add(
|
||||||
|
type=link_data.link_type, node_one=link_data.node1_id, node_two=link_data.node2_id,
|
||||||
|
interface_one=interface_one, interface_two=interface_two, options=options
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def send_objects(session):
|
def send_objects(session):
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
@ -258,31 +250,21 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
||||||
logging.debug("create session: %s", request)
|
logging.debug("create session: %s", request)
|
||||||
session = self.coreemu.create_session(request.id)
|
session = self.coreemu.create_session(request.id)
|
||||||
session.set_state(EventTypes.DEFINITION_STATE)
|
session.set_state(EventTypes.DEFINITION_STATE)
|
||||||
|
|
||||||
# default set session location
|
|
||||||
session.location.setrefgeo(47.57917, -122.13232, 2.0)
|
session.location.setrefgeo(47.57917, -122.13232, 2.0)
|
||||||
session.location.refscale = 150000.0
|
session.location.refscale = 150000.0
|
||||||
|
return core_pb2.CreateSessionResponse(id=session.session_id, state=session.state)
|
||||||
response = core_pb2.CreateSessionResponse()
|
|
||||||
response.id = session.session_id
|
|
||||||
response.state = session.state
|
|
||||||
return response
|
|
||||||
|
|
||||||
def DeleteSession(self, request, context):
|
def DeleteSession(self, request, context):
|
||||||
logging.debug("delete session: %s", request)
|
logging.debug("delete session: %s", request)
|
||||||
response = core_pb2.DeleteSessionResponse()
|
result = self.coreemu.delete_session(request.id)
|
||||||
response.result = self.coreemu.delete_session(request.id)
|
return core_pb2.DeleteSessionResponse(result=result)
|
||||||
return response
|
|
||||||
|
|
||||||
def GetSessions(self, request, context):
|
def GetSessions(self, request, context):
|
||||||
logging.debug("get sessions: %s", request)
|
logging.debug("get sessions: %s", request)
|
||||||
response = core_pb2.GetSessionsResponse()
|
response = core_pb2.GetSessionsResponse()
|
||||||
for session_id in self.coreemu.sessions:
|
for session_id in self.coreemu.sessions:
|
||||||
session = self.coreemu.sessions[session_id]
|
session = self.coreemu.sessions[session_id]
|
||||||
session_summary = response.sessions.add()
|
response.sessions.add(id=session_id, state=session.state, nodes=session.get_node_count())
|
||||||
session_summary.id = session_id
|
|
||||||
session_summary.state = session.state
|
|
||||||
session_summary.nodes = session.get_node_count()
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def GetSessionLocation(self, request, context):
|
def GetSessionLocation(self, request, context):
|
||||||
|
@ -290,34 +272,19 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
||||||
session = self.get_session(request.id, context)
|
session = self.get_session(request.id, context)
|
||||||
x, y, z = session.location.refxyz
|
x, y, z = session.location.refxyz
|
||||||
lat, lon, alt = session.location.refgeo
|
lat, lon, alt = session.location.refgeo
|
||||||
response = core_pb2.GetSessionLocationResponse()
|
position = core_pb2.Position(x=x, y=y, z=z, lat=lat, lon=lon, alt=alt)
|
||||||
update_proto(
|
return core_pb2.GetSessionLocationResponse(position=position, scale=session.location.refscale)
|
||||||
response.position,
|
|
||||||
x=x,
|
|
||||||
y=y,
|
|
||||||
z=z,
|
|
||||||
lat=lat,
|
|
||||||
lon=lon,
|
|
||||||
alt=alt
|
|
||||||
)
|
|
||||||
update_proto(response, scale=session.location.refscale)
|
|
||||||
return response
|
|
||||||
|
|
||||||
def SetSessionLocation(self, request, context):
|
def SetSessionLocation(self, request, context):
|
||||||
logging.debug("set session location: %s", request)
|
logging.debug("set session location: %s", request)
|
||||||
session = self.get_session(request.id, context)
|
session = self.get_session(request.id, context)
|
||||||
|
|
||||||
session.location.refxyz = (request.position.x, request.position.y, request.position.z)
|
session.location.refxyz = (request.position.x, request.position.y, request.position.z)
|
||||||
session.location.setrefgeo(request.position.lat, request.position.lon, request.position.alt)
|
session.location.setrefgeo(request.position.lat, request.position.lon, request.position.alt)
|
||||||
session.location.refscale = request.scale
|
session.location.refscale = request.scale
|
||||||
|
return core_pb2.SetSessionLocationResponse(result=True)
|
||||||
response = core_pb2.SetSessionLocationResponse()
|
|
||||||
response.result = True
|
|
||||||
return response
|
|
||||||
|
|
||||||
def SetSessionState(self, request, context):
|
def SetSessionState(self, request, context):
|
||||||
logging.debug("set session state: %s", request)
|
logging.debug("set session state: %s", request)
|
||||||
response = core_pb2.SetSessionStateResponse()
|
|
||||||
session = self.get_session(request.id, context)
|
session = self.get_session(request.id, context)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -325,7 +292,6 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
||||||
session.set_state(state)
|
session.set_state(state)
|
||||||
|
|
||||||
if state == EventTypes.INSTANTIATION_STATE:
|
if state == EventTypes.INSTANTIATION_STATE:
|
||||||
# create session directory if it does not exist
|
|
||||||
if not os.path.exists(session.session_dir):
|
if not os.path.exists(session.session_dir):
|
||||||
os.mkdir(session.session_dir)
|
os.mkdir(session.session_dir)
|
||||||
session.instantiate()
|
session.instantiate()
|
||||||
|
@ -336,79 +302,58 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
||||||
elif state == EventTypes.DEFINITION_STATE:
|
elif state == EventTypes.DEFINITION_STATE:
|
||||||
session.clear()
|
session.clear()
|
||||||
|
|
||||||
response.result = True
|
result = True
|
||||||
except KeyError:
|
except KeyError:
|
||||||
response.result = False
|
result = False
|
||||||
|
|
||||||
return response
|
return core_pb2.SetSessionStateResponse(result=result)
|
||||||
|
|
||||||
def GetSessionOptions(self, request, context):
|
def GetSessionOptions(self, request, context):
|
||||||
logging.debug("get session options: %s", request)
|
logging.debug("get session options: %s", request)
|
||||||
session = self.get_session(request.id, context)
|
session = self.get_session(request.id, context)
|
||||||
|
|
||||||
config = session.options.get_configs()
|
config = session.options.get_configs()
|
||||||
defaults = session.options.default_values()
|
defaults = session.options.default_values()
|
||||||
defaults.update(config)
|
defaults.update(config)
|
||||||
|
|
||||||
groups = get_config_groups(defaults, session.options)
|
groups = get_config_groups(defaults, session.options)
|
||||||
|
return core_pb2.GetSessionOptionsResponse(groups=groups)
|
||||||
response = core_pb2.GetSessionOptionsResponse()
|
|
||||||
response.groups.extend(groups)
|
|
||||||
return response
|
|
||||||
|
|
||||||
def SetSessionOptions(self, request, context):
|
def SetSessionOptions(self, request, context):
|
||||||
logging.debug("set session options: %s", request)
|
logging.debug("set session options: %s", request)
|
||||||
session = self.get_session(request.id, context)
|
session = self.get_session(request.id, context)
|
||||||
session.options.set_configs(request.config)
|
session.options.set_configs(request.config)
|
||||||
response = core_pb2.SetSessionOptionsResponse()
|
return core_pb2.SetSessionOptionsResponse(result=True)
|
||||||
response.result = True
|
|
||||||
return response
|
|
||||||
|
|
||||||
def GetSession(self, request, context):
|
def GetSession(self, request, context):
|
||||||
logging.debug("get session: %s", request)
|
logging.debug("get session: %s", request)
|
||||||
session = self.get_session(request.id, context)
|
session = self.get_session(request.id, context)
|
||||||
response = core_pb2.GetSessionResponse()
|
session_proto = core_pb2.Session(state=session.state)
|
||||||
response.session.state = session.state
|
|
||||||
|
|
||||||
for node_id in session.objects:
|
for node_id in session.objects:
|
||||||
node = session.objects[node_id]
|
node = session.objects[node_id]
|
||||||
|
|
||||||
if not isinstance(node.objid, int):
|
if not isinstance(node.objid, int):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
node_proto = response.session.nodes.add()
|
node_type = nodeutils.get_node_type(node.__class__).value
|
||||||
node_proto.id = node.objid
|
|
||||||
node_proto.name = node.name
|
|
||||||
node_proto.type = nodeutils.get_node_type(node.__class__).value
|
|
||||||
model = getattr(node, "type", None)
|
model = getattr(node, "type", None)
|
||||||
if model is not None:
|
position = core_pb2.Position(x=node.position.x, y=node.position.y, z=node.position.z)
|
||||||
node_proto.model = model
|
|
||||||
|
|
||||||
update_proto(
|
|
||||||
node_proto.position,
|
|
||||||
x=node.position.x,
|
|
||||||
y=node.position.y,
|
|
||||||
z=node.position.z
|
|
||||||
)
|
|
||||||
|
|
||||||
services = getattr(node, "services", [])
|
services = getattr(node, "services", [])
|
||||||
if services is None:
|
if services is None:
|
||||||
services = []
|
services = []
|
||||||
services = [x.name for x in services]
|
services = [x.name for x in services]
|
||||||
node_proto.services.extend(services)
|
|
||||||
|
|
||||||
emane_model = None
|
emane_model = None
|
||||||
if nodeutils.is_node(node, NodeTypes.EMANE):
|
if nodeutils.is_node(node, NodeTypes.EMANE):
|
||||||
emane_model = node.model.name
|
emane_model = node.model.name
|
||||||
if emane_model is not None:
|
|
||||||
node_proto.emane = emane_model
|
session_proto.nodes.add(id=node.objid, name=node.name, emane=emane_model, model=model,
|
||||||
|
type=node_type, position=position, services=services)
|
||||||
|
|
||||||
links_data = node.all_link_data(0)
|
links_data = node.all_link_data(0)
|
||||||
for link_data in links_data:
|
for link_data in links_data:
|
||||||
link = response.session.links.add()
|
convert_link(session, link_data, session_proto.links)
|
||||||
convert_link(session, link_data, link)
|
|
||||||
|
|
||||||
return response
|
return core_pb2.GetSessionResponse(session=session_proto)
|
||||||
|
|
||||||
def NodeEvents(self, request, context):
|
def NodeEvents(self, request, context):
|
||||||
session = self.get_session(request.id, context)
|
session = self.get_session(request.id, context)
|
||||||
|
|
Loading…
Add table
Reference in a new issue