grpc added get node links, get services, get emane config

This commit is contained in:
bharnden 2019-03-01 22:14:16 -08:00
parent 460e5c04d0
commit 44f70d0c2e
3 changed files with 122 additions and 18 deletions

View file

@ -12,6 +12,7 @@ import grpc
import core_pb2
import core_pb2_grpc
from core.misc import nodeutils
from core.service import ServiceManager
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
@ -30,6 +31,31 @@ def update_proto(obj, **kwargs):
setattr(obj, key, value)
def get_config_groups(config, configurable_options):
groups = []
config_options = []
for configuration in configurable_options.configurations():
value = config[configuration.id]
config_option = core_pb2.ConfigOption()
config_option.label = configuration.label
config_option.name = configuration.id
config_option.value = value
config_option.type = configuration.type.value
config_option.select.extend(configuration.options)
config_options.append(config_option)
for config_group in configurable_options.config_groups():
start = config_group.start - 1
stop = config_group.stop
config_group_proto = core_pb2.ConfigGroup()
config_group_proto.name = config_group.name
config_group_proto.options.extend(config_options[start: stop])
groups.append(config_group_proto)
return groups
def convert_link(session, link_data, link):
if link_data.interface1_id is not None:
node = session.get_object(link_data.node1_id)
@ -173,27 +199,12 @@ class CoreApiServer(core_pb2_grpc.CoreApiServicer):
def GetSessionOptions(self, request, context):
session = self.coreemu.sessions.get(request.id)
config = session.options.get_configs()
groups = get_config_groups(config, session.options)
response = core_pb2.SessionOptionsResponse()
config_options = []
for configuration in session.options.configurations():
value = config[configuration.id]
config_option = core_pb2.ConfigOption()
config_option.label = configuration.label
config_option.name = configuration.id
config_option.value = value
config_option.type = configuration.type.value
config_option.select.extend(configuration.options)
config_options.append(config_option)
for config_group in session.options.config_groups():
start = config_group.start - 1
stop = config_group.stop
config_group_proto = response.groups.add()
config_group_proto.name = config_group.name
config_group_proto.options.extend(config_options[start: stop])
response.groups.extend(groups)
return response
def GetSession(self, request, context):
@ -352,6 +363,23 @@ class CoreApiServer(core_pb2_grpc.CoreApiServicer):
response.result = session.delete_node(request.id)
return response
def GetNodeLinks(self, request, context):
logging.info("get node links: %s", request)
session = self.coreemu.sessions.get(request.session)
if not session:
raise Exception("no session found")
node = session.get_object(request.id)
if not node:
raise Exception("no node found")
response = core_pb2.GetNodeLinksResponse()
links_data = node.all_link_data(0)
for link_data in links_data:
link = response.links.add()
convert_link(session, link_data, link)
return response
def CreateLink(self, request, context):
session = self.coreemu.sessions.get(request.session)
if not session:
@ -473,6 +501,24 @@ class CoreApiServer(core_pb2_grpc.CoreApiServicer):
response.result = True
return response
def GetServices(self, request, context):
response = core_pb2.GetServicesResponse()
for service in ServiceManager.services.itervalues():
service_proto = response.services.add()
service_proto.group = service.group
service_proto.name = service.name
return response
def GetEmaneConfig(self, request, context):
session = self.coreemu.sessions.get(request.session)
if not session:
raise Exception("no session found")
config = session.emane.get_configs()
groups = get_config_groups(config, session.emane.emane_config)
response = core_pb2.GetEmaneConfigResponse()
response.groups.extend(groups)
return response
def listen(coreemu, address="[::]:50051"):
logging.info("starting grpc api: %s", address)