updates to python based logging to use module named loggers, updated logging config file to align with these changes
This commit is contained in:
parent
55d5bb3859
commit
69652ac577
63 changed files with 717 additions and 606 deletions
|
@ -94,6 +94,8 @@ from core.api.grpc.wlan_pb2 import (
|
|||
)
|
||||
from core.emulator.data import IpPrefixes
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class InterfaceHelper:
|
||||
"""
|
||||
|
@ -147,9 +149,9 @@ def stream_listener(stream: Any, handler: Callable[[core_pb2.Event], None]) -> N
|
|||
handler(event)
|
||||
except grpc.RpcError as e:
|
||||
if e.code() == grpc.StatusCode.CANCELLED:
|
||||
logging.debug("stream closed")
|
||||
logger.debug("stream closed")
|
||||
else:
|
||||
logging.exception("stream error")
|
||||
logger.exception("stream error")
|
||||
|
||||
|
||||
def start_streamer(stream: Any, handler: Callable[[core_pb2.Event], None]) -> None:
|
||||
|
|
|
@ -70,6 +70,8 @@ from core.api.grpc.wrappers import Hook
|
|||
from core.emulator.data import IpPrefixes
|
||||
from core.errors import CoreError
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class MoveNodesStreamer:
|
||||
def __init__(self, session_id: int = None, source: str = None) -> None:
|
||||
|
@ -184,9 +186,9 @@ def throughput_listener(
|
|||
handler(event)
|
||||
except grpc.RpcError as e:
|
||||
if e.code() == grpc.StatusCode.CANCELLED:
|
||||
logging.debug("throughput stream closed")
|
||||
logger.debug("throughput stream closed")
|
||||
else:
|
||||
logging.exception("throughput stream error")
|
||||
logger.exception("throughput stream error")
|
||||
|
||||
|
||||
def cpu_listener(
|
||||
|
@ -205,9 +207,9 @@ def cpu_listener(
|
|||
handler(event)
|
||||
except grpc.RpcError as e:
|
||||
if e.code() == grpc.StatusCode.CANCELLED:
|
||||
logging.debug("cpu stream closed")
|
||||
logger.debug("cpu stream closed")
|
||||
else:
|
||||
logging.exception("cpu stream error")
|
||||
logger.exception("cpu stream error")
|
||||
|
||||
|
||||
def event_listener(stream: Any, handler: Callable[[wrappers.Event], None]) -> None:
|
||||
|
@ -224,9 +226,9 @@ def event_listener(stream: Any, handler: Callable[[wrappers.Event], None]) -> No
|
|||
handler(event)
|
||||
except grpc.RpcError as e:
|
||||
if e.code() == grpc.StatusCode.CANCELLED:
|
||||
logging.debug("session stream closed")
|
||||
logger.debug("session stream closed")
|
||||
else:
|
||||
logging.exception("session stream error")
|
||||
logger.exception("session stream error")
|
||||
|
||||
|
||||
class CoreGrpcClient:
|
||||
|
|
|
@ -14,6 +14,8 @@ from core.emulator.data import (
|
|||
)
|
||||
from core.emulator.session import Session
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def handle_node_event(node_data: NodeData) -> core_pb2.Event:
|
||||
"""
|
||||
|
@ -199,7 +201,7 @@ class EventStreamer:
|
|||
elif isinstance(data, FileData):
|
||||
event = handle_file_event(data)
|
||||
else:
|
||||
logging.error("unknown event: %s", data)
|
||||
logger.error("unknown event: %s", data)
|
||||
except Empty:
|
||||
pass
|
||||
if event:
|
||||
|
|
|
@ -31,6 +31,7 @@ from core.nodes.lxd import LxcNode
|
|||
from core.nodes.network import WlanNode
|
||||
from core.services.coreservices import CoreService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
WORKERS = 10
|
||||
|
||||
|
||||
|
@ -156,7 +157,7 @@ def create_nodes(
|
|||
start = time.monotonic()
|
||||
results, exceptions = utils.threadpool(funcs)
|
||||
total = time.monotonic() - start
|
||||
logging.debug("grpc created nodes time: %s", total)
|
||||
logger.debug("grpc created nodes time: %s", total)
|
||||
return results, exceptions
|
||||
|
||||
|
||||
|
@ -180,7 +181,7 @@ def create_links(
|
|||
start = time.monotonic()
|
||||
results, exceptions = utils.threadpool(funcs)
|
||||
total = time.monotonic() - start
|
||||
logging.debug("grpc created links time: %s", total)
|
||||
logger.debug("grpc created links time: %s", total)
|
||||
return results, exceptions
|
||||
|
||||
|
||||
|
@ -204,7 +205,7 @@ def edit_links(
|
|||
start = time.monotonic()
|
||||
results, exceptions = utils.threadpool(funcs)
|
||||
total = time.monotonic() - start
|
||||
logging.debug("grpc edit links time: %s", total)
|
||||
logger.debug("grpc edit links time: %s", total)
|
||||
return results, exceptions
|
||||
|
||||
|
||||
|
|
|
@ -116,6 +116,7 @@ from core.nodes.base import CoreNode, NodeBase
|
|||
from core.nodes.network import CtrlNet, PtpNet, WlanNode
|
||||
from core.services.coreservices import ServiceManager
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
_ONE_DAY_IN_SECONDS: int = 60 * 60 * 24
|
||||
_INTERFACE_REGEX: Pattern = re.compile(r"veth(?P<node>[0-9a-fA-F]+)")
|
||||
_MAX_WORKERS = 1000
|
||||
|
@ -136,7 +137,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
atexit.register(self._exit_handler)
|
||||
|
||||
def _exit_handler(self) -> None:
|
||||
logging.debug("catching exit, stop running")
|
||||
logger.debug("catching exit, stop running")
|
||||
self.running = False
|
||||
|
||||
def _is_running(self, context) -> bool:
|
||||
|
@ -146,7 +147,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
context.abort(grpc.StatusCode.CANCELLED, "server stopping")
|
||||
|
||||
def listen(self, address: str) -> None:
|
||||
logging.info("CORE gRPC API listening on: %s", address)
|
||||
logger.info("CORE gRPC API listening on: %s", address)
|
||||
self.server = grpc.server(futures.ThreadPoolExecutor(max_workers=_MAX_WORKERS))
|
||||
core_pb2_grpc.add_CoreApiServicer_to_server(self, self.server)
|
||||
self.server.add_insecure_port(address)
|
||||
|
@ -217,7 +218,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: grpc context
|
||||
:return: start session response
|
||||
"""
|
||||
logging.debug("start session: %s", request)
|
||||
logger.debug("start session: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
|
||||
# clear previous state and setup for creation
|
||||
|
@ -313,7 +314,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: grpc context
|
||||
:return: stop session response
|
||||
"""
|
||||
logging.debug("stop session: %s", request)
|
||||
logger.debug("stop session: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
session.data_collect()
|
||||
session.shutdown()
|
||||
|
@ -329,7 +330,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context:
|
||||
:return: a create-session response
|
||||
"""
|
||||
logging.debug("create session: %s", request)
|
||||
logger.debug("create session: %s", request)
|
||||
session = self.coreemu.create_session(request.session_id)
|
||||
session.set_state(EventTypes.DEFINITION_STATE)
|
||||
session.location.setrefgeo(47.57917, -122.13232, 2.0)
|
||||
|
@ -348,7 +349,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: a delete-session response
|
||||
"""
|
||||
logging.debug("delete session: %s", request)
|
||||
logger.debug("delete session: %s", request)
|
||||
result = self.coreemu.delete_session(request.session_id)
|
||||
return core_pb2.DeleteSessionResponse(result=result)
|
||||
|
||||
|
@ -362,7 +363,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: a delete-session response
|
||||
"""
|
||||
logging.debug("get sessions: %s", request)
|
||||
logger.debug("get sessions: %s", request)
|
||||
sessions = []
|
||||
for session_id in self.coreemu.sessions:
|
||||
session = self.coreemu.sessions[session_id]
|
||||
|
@ -387,7 +388,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: a get-session-location response
|
||||
"""
|
||||
logging.debug("get session location: %s", request)
|
||||
logger.debug("get session location: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
x, y, z = session.location.refxyz
|
||||
lat, lon, alt = session.location.refgeo
|
||||
|
@ -407,7 +408,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: a set-session-location-response
|
||||
"""
|
||||
logging.debug("set session location: %s", request)
|
||||
logger.debug("set session location: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
grpcutils.session_location(session, request.location)
|
||||
return core_pb2.SetSessionLocationResponse(result=True)
|
||||
|
@ -422,7 +423,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context:context object
|
||||
:return: set-session-state response
|
||||
"""
|
||||
logging.debug("set session state: %s", request)
|
||||
logger.debug("set session state: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
try:
|
||||
state = EventTypes(request.state)
|
||||
|
@ -451,7 +452,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: set session user response
|
||||
"""
|
||||
logging.debug("set session user: %s", request)
|
||||
logger.debug("set session user: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
session.user = request.user
|
||||
return core_pb2.SetSessionUserResponse(result=True)
|
||||
|
@ -467,7 +468,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-session-options response about all session's options
|
||||
"""
|
||||
logging.debug("get session options: %s", request)
|
||||
logger.debug("get session options: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
current_config = session.options.get_configs()
|
||||
default_config = session.options.default_values()
|
||||
|
@ -485,7 +486,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: set-session-options response
|
||||
"""
|
||||
logging.debug("set session options: %s", request)
|
||||
logger.debug("set session options: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
config = session.options.get_configs()
|
||||
config.update(request.config)
|
||||
|
@ -502,7 +503,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get session metadata response
|
||||
"""
|
||||
logging.debug("get session metadata: %s", request)
|
||||
logger.debug("get session metadata: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
return core_pb2.GetSessionMetadataResponse(config=session.metadata)
|
||||
|
||||
|
@ -516,7 +517,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: set metadata response
|
||||
"""
|
||||
logging.debug("set session metadata: %s", request)
|
||||
logger.debug("set session metadata: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
session.metadata = dict(request.config)
|
||||
return core_pb2.SetSessionMetadataResponse(result=True)
|
||||
|
@ -544,7 +545,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-session response
|
||||
"""
|
||||
logging.debug("get session: %s", request)
|
||||
logger.debug("get session: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
links = []
|
||||
nodes = []
|
||||
|
@ -718,7 +719,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: add-node response
|
||||
"""
|
||||
logging.debug("add node: %s", request)
|
||||
logger.debug("add node: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
_type, _id, options = grpcutils.add_node_data(request.node)
|
||||
_class = session.get_node_class(_type)
|
||||
|
@ -737,7 +738,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-node response
|
||||
"""
|
||||
logging.debug("get node: %s", request)
|
||||
logger.debug("get node: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context, NodeBase)
|
||||
ifaces = []
|
||||
|
@ -768,7 +769,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
options = NodeOptions()
|
||||
has_geo = request.HasField("geo")
|
||||
if has_geo:
|
||||
logging.info("has geo")
|
||||
logger.info("has geo")
|
||||
lat = request.geo.lat
|
||||
lon = request.geo.lon
|
||||
alt = request.geo.alt
|
||||
|
@ -776,7 +777,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
else:
|
||||
x = request.position.x
|
||||
y = request.position.y
|
||||
logging.info("has pos: %s,%s", x, y)
|
||||
logger.info("has pos: %s,%s", x, y)
|
||||
options.set_position(x, y)
|
||||
session.edit_node(node.id, options)
|
||||
source = request.source if request.source else None
|
||||
|
@ -794,7 +795,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: edit-node response
|
||||
"""
|
||||
logging.debug("edit node: %s", request)
|
||||
logger.debug("edit node: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context, NodeBase)
|
||||
options = NodeOptions(icon=request.icon)
|
||||
|
@ -830,7 +831,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: core.api.grpc.core_pb2.DeleteNodeResponse
|
||||
"""
|
||||
logging.debug("delete node: %s", request)
|
||||
logger.debug("delete node: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
result = False
|
||||
if request.node_id in session.nodes:
|
||||
|
@ -850,7 +851,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: core.api.grpc.core_pb2.NodeCommandResponse
|
||||
"""
|
||||
logging.debug("sending node command: %s", request)
|
||||
logger.debug("sending node command: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context, CoreNode)
|
||||
try:
|
||||
|
@ -871,7 +872,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-node-terminal response
|
||||
"""
|
||||
logging.debug("getting node terminal: %s", request)
|
||||
logger.debug("getting node terminal: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context, CoreNode)
|
||||
terminal = node.termcmdstring("/bin/bash")
|
||||
|
@ -887,7 +888,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-node-links response
|
||||
"""
|
||||
logging.debug("get node links: %s", request)
|
||||
logger.debug("get node links: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context, NodeBase)
|
||||
links = get_links(node)
|
||||
|
@ -903,7 +904,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: add-link response
|
||||
"""
|
||||
logging.debug("add link: %s", request)
|
||||
logger.debug("add link: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node1_id = request.link.node1_id
|
||||
node2_id = request.link.node2_id
|
||||
|
@ -952,7 +953,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: edit-link response
|
||||
"""
|
||||
logging.debug("edit link: %s", request)
|
||||
logger.debug("edit link: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node1_id = request.node1_id
|
||||
node2_id = request.node2_id
|
||||
|
@ -998,7 +999,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: delete-link response
|
||||
"""
|
||||
logging.debug("delete link: %s", request)
|
||||
logger.debug("delete link: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node1_id = request.node1_id
|
||||
node2_id = request.node2_id
|
||||
|
@ -1029,7 +1030,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-hooks response about all the hooks in all session states
|
||||
"""
|
||||
logging.debug("get hooks: %s", request)
|
||||
logger.debug("get hooks: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
hooks = grpcutils.get_hooks(session)
|
||||
return core_pb2.GetHooksResponse(hooks=hooks)
|
||||
|
@ -1044,7 +1045,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: add-hook response
|
||||
"""
|
||||
logging.debug("add hook: %s", request)
|
||||
logger.debug("add hook: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
hook = request.hook
|
||||
state = EventTypes(hook.state)
|
||||
|
@ -1062,7 +1063,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-mobility-configurations response that has a list of configurations
|
||||
"""
|
||||
logging.debug("get mobility configs: %s", request)
|
||||
logger.debug("get mobility configs: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
configs = grpcutils.get_mobility_configs(session)
|
||||
return GetMobilityConfigsResponse(configs=configs)
|
||||
|
@ -1078,7 +1079,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-mobility-configuration response
|
||||
"""
|
||||
logging.debug("get mobility config: %s", request)
|
||||
logger.debug("get mobility config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
current_config = session.mobility.get_model_config(
|
||||
request.node_id, Ns2ScriptedMobility.name
|
||||
|
@ -1097,7 +1098,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: set-mobility-configuration response
|
||||
"""
|
||||
logging.debug("set mobility config: %s", request)
|
||||
logger.debug("set mobility config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
mobility_config = request.mobility_config
|
||||
session.mobility.set_model_config(
|
||||
|
@ -1116,7 +1117,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: mobility-action response
|
||||
"""
|
||||
logging.debug("mobility action: %s", request)
|
||||
logger.debug("mobility action: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = grpcutils.get_mobility_node(session, request.node_id, context)
|
||||
if not node.mobility:
|
||||
|
@ -1144,7 +1145,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-services response
|
||||
"""
|
||||
logging.debug("get services: %s", request)
|
||||
logger.debug("get services: %s", request)
|
||||
services = []
|
||||
for name in ServiceManager.services:
|
||||
service = ServiceManager.services[name]
|
||||
|
@ -1162,7 +1163,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-service-defaults response about all the available default services
|
||||
"""
|
||||
logging.debug("get service defaults: %s", request)
|
||||
logger.debug("get service defaults: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
defaults = grpcutils.get_default_services(session)
|
||||
return GetServiceDefaultsResponse(defaults=defaults)
|
||||
|
@ -1177,7 +1178,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: set-service-defaults response
|
||||
"""
|
||||
logging.debug("set service defaults: %s", request)
|
||||
logger.debug("set service defaults: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
session.services.default_services.clear()
|
||||
for service_defaults in request.defaults:
|
||||
|
@ -1197,7 +1198,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: all node service configs response
|
||||
"""
|
||||
logging.debug("get node service configs: %s", request)
|
||||
logger.debug("get node service configs: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
configs = grpcutils.get_node_service_configs(session)
|
||||
return GetNodeServiceConfigsResponse(configs=configs)
|
||||
|
@ -1213,7 +1214,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-node-service response about the requested service
|
||||
"""
|
||||
logging.debug("get node service: %s", request)
|
||||
logger.debug("get node service: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
service = session.services.get_service(
|
||||
request.node_id, request.service, default_service=True
|
||||
|
@ -1232,7 +1233,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-node-service response about the requested service
|
||||
"""
|
||||
logging.debug("get node service file: %s", request)
|
||||
logger.debug("get node service file: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context, CoreNode)
|
||||
file_data = session.services.get_service_file(
|
||||
|
@ -1251,7 +1252,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: set-node-service response
|
||||
"""
|
||||
logging.debug("set node service: %s", request)
|
||||
logger.debug("set node service: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
config = request.config
|
||||
grpcutils.service_configuration(session, config)
|
||||
|
@ -1268,7 +1269,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: set-node-service-file response
|
||||
"""
|
||||
logging.debug("set node service file: %s", request)
|
||||
logger.debug("set node service file: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
config = request.config
|
||||
session.services.set_service_file(
|
||||
|
@ -1287,7 +1288,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: service-action response about status of action
|
||||
"""
|
||||
logging.debug("service action: %s", request)
|
||||
logger.debug("service action: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context, CoreNode)
|
||||
service = None
|
||||
|
@ -1327,7 +1328,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: core.api.grpc.core_pb2.GetWlanConfigResponse
|
||||
:return: all wlan configurations
|
||||
"""
|
||||
logging.debug("get wlan configs: %s", request)
|
||||
logger.debug("get wlan configs: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
configs = grpcutils.get_wlan_configs(session)
|
||||
return GetWlanConfigsResponse(configs=configs)
|
||||
|
@ -1342,7 +1343,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: core.api.grpc.core_pb2.GetWlanConfigResponse
|
||||
:return: get-wlan-configuration response about the wlan configuration of a node
|
||||
"""
|
||||
logging.debug("get wlan config: %s", request)
|
||||
logger.debug("get wlan config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
current_config = session.mobility.get_model_config(
|
||||
request.node_id, BasicRangeModel.name
|
||||
|
@ -1360,7 +1361,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: set-wlan-configuration response
|
||||
"""
|
||||
logging.debug("set wlan config: %s", request)
|
||||
logger.debug("set wlan config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node_id = request.wlan_config.node_id
|
||||
config = request.wlan_config.config
|
||||
|
@ -1380,7 +1381,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-EMANE-configuration response
|
||||
"""
|
||||
logging.debug("get emane config: %s", request)
|
||||
logger.debug("get emane config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
config = grpcutils.get_emane_config(session)
|
||||
return GetEmaneConfigResponse(config=config)
|
||||
|
@ -1395,7 +1396,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: set-EMANE-configuration response
|
||||
"""
|
||||
logging.debug("set emane config: %s", request)
|
||||
logger.debug("set emane config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
config = session.emane.get_configs()
|
||||
config.update(request.config)
|
||||
|
@ -1411,7 +1412,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-EMANE-models response that has all the models
|
||||
"""
|
||||
logging.debug("get emane models: %s", request)
|
||||
logger.debug("get emane models: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
models = grpcutils.get_emane_models(session)
|
||||
return GetEmaneModelsResponse(models=models)
|
||||
|
@ -1427,7 +1428,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: get-EMANE-model-configuration response
|
||||
"""
|
||||
logging.debug("get emane model config: %s", request)
|
||||
logger.debug("get emane model config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
model = session.emane.models.get(request.model)
|
||||
if not model:
|
||||
|
@ -1448,7 +1449,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: set-EMANE-model-configuration response
|
||||
"""
|
||||
logging.debug("set emane model config: %s", request)
|
||||
logger.debug("set emane model config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
model_config = request.emane_model_config
|
||||
_id = utils.iface_config_id(model_config.node_id, model_config.iface_id)
|
||||
|
@ -1467,7 +1468,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:return: get-EMANE-model-configurations response that has all the EMANE
|
||||
configurations
|
||||
"""
|
||||
logging.debug("get emane model configs: %s", request)
|
||||
logger.debug("get emane model configs: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
configs = grpcutils.get_emane_model_configs(session)
|
||||
return GetEmaneModelConfigsResponse(configs=configs)
|
||||
|
@ -1482,7 +1483,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: save-xml response
|
||||
"""
|
||||
logging.debug("save xml: %s", request)
|
||||
logger.debug("save xml: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
|
||||
_, temp_path = tempfile.mkstemp()
|
||||
|
@ -1503,7 +1504,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: Open-XML response or raise an exception if invalid XML file
|
||||
"""
|
||||
logging.debug("open xml: %s", request)
|
||||
logger.debug("open xml: %s", request)
|
||||
session = self.coreemu.create_session()
|
||||
temp = tempfile.NamedTemporaryFile(delete=False)
|
||||
temp.write(request.data.encode("utf-8"))
|
||||
|
@ -1516,7 +1517,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
session.file_path = file_path
|
||||
return core_pb2.OpenXmlResponse(session_id=session.id, result=True)
|
||||
except IOError:
|
||||
logging.exception("error opening session file")
|
||||
logger.exception("error opening session file")
|
||||
self.coreemu.delete_session(session.id)
|
||||
context.abort(grpc.StatusCode.INVALID_ARGUMENT, "invalid xml file")
|
||||
finally:
|
||||
|
@ -1549,7 +1550,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
:param context: context object
|
||||
:return: emane link response with success status
|
||||
"""
|
||||
logging.debug("emane link: %s", request)
|
||||
logger.debug("emane link: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
nem1 = request.nem1
|
||||
iface1 = session.emane.get_iface(nem1)
|
||||
|
|
|
@ -55,6 +55,8 @@ from core.nodes.network import WlanNode
|
|||
from core.nodes.physical import Rj45Node
|
||||
from core.services.coreservices import ServiceManager, ServiceShim
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class CoreHandler(socketserver.BaseRequestHandler):
|
||||
"""
|
||||
|
@ -104,7 +106,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
|
||||
:return: nothing
|
||||
"""
|
||||
logging.debug("new TCP connection: %s", self.client_address)
|
||||
logger.debug("new TCP connection: %s", self.client_address)
|
||||
|
||||
def finish(self):
|
||||
"""
|
||||
|
@ -113,40 +115,40 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
|
||||
:return: nothing
|
||||
"""
|
||||
logging.debug("finishing request handler")
|
||||
logging.debug("remaining message queue size: %s", self.message_queue.qsize())
|
||||
logger.debug("finishing request handler")
|
||||
logger.debug("remaining message queue size: %s", self.message_queue.qsize())
|
||||
|
||||
# give some time for message queue to deplete
|
||||
timeout = 10
|
||||
wait = 0
|
||||
while not self.message_queue.empty():
|
||||
logging.debug("waiting for message queue to empty: %s seconds", wait)
|
||||
logger.debug("waiting for message queue to empty: %s seconds", wait)
|
||||
time.sleep(1)
|
||||
wait += 1
|
||||
if wait == timeout:
|
||||
logging.warning("queue failed to be empty, finishing request handler")
|
||||
logger.warning("queue failed to be empty, finishing request handler")
|
||||
break
|
||||
|
||||
logging.info("client disconnected: notifying threads")
|
||||
logger.info("client disconnected: notifying threads")
|
||||
self.done = True
|
||||
for thread in self.handler_threads:
|
||||
logging.info("waiting for thread: %s", thread.getName())
|
||||
logger.info("waiting for thread: %s", thread.getName())
|
||||
thread.join(timeout)
|
||||
if thread.is_alive():
|
||||
logging.warning(
|
||||
logger.warning(
|
||||
"joining %s failed: still alive after %s sec",
|
||||
thread.getName(),
|
||||
timeout,
|
||||
)
|
||||
|
||||
logging.info("connection closed: %s", self.client_address)
|
||||
logger.info("connection closed: %s", self.client_address)
|
||||
if self.session:
|
||||
# remove client from session broker and shutdown if there are no clients
|
||||
self.remove_session_handlers()
|
||||
clients = self.session_clients[self.session.id]
|
||||
clients.remove(self)
|
||||
if not clients and not self.session.is_active():
|
||||
logging.info(
|
||||
logger.info(
|
||||
"no session clients left and not active, initiating shutdown"
|
||||
)
|
||||
self.coreemu.delete_session(self.session.id)
|
||||
|
@ -218,7 +220,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
:param core.emulator.data.EventData event_data: event data to handle
|
||||
:return: nothing
|
||||
"""
|
||||
logging.debug("handling broadcast event: %s", event_data)
|
||||
logger.debug("handling broadcast event: %s", event_data)
|
||||
|
||||
tlv_data = structutils.pack_values(
|
||||
coreapi.CoreEventTlv,
|
||||
|
@ -236,7 +238,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
try:
|
||||
self.sendall(message)
|
||||
except IOError:
|
||||
logging.exception("error sending event message")
|
||||
logger.exception("error sending event message")
|
||||
|
||||
def handle_broadcast_file(self, file_data):
|
||||
"""
|
||||
|
@ -245,7 +247,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
:param core.emulator.data.FileData file_data: file data to handle
|
||||
:return: nothing
|
||||
"""
|
||||
logging.debug("handling broadcast file: %s", file_data)
|
||||
logger.debug("handling broadcast file: %s", file_data)
|
||||
|
||||
tlv_data = structutils.pack_values(
|
||||
coreapi.CoreFileTlv,
|
||||
|
@ -266,7 +268,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
try:
|
||||
self.sendall(message)
|
||||
except IOError:
|
||||
logging.exception("error sending file message")
|
||||
logger.exception("error sending file message")
|
||||
|
||||
def handle_broadcast_config(self, config_data):
|
||||
"""
|
||||
|
@ -275,12 +277,12 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
:param core.emulator.data.ConfigData config_data: config data to handle
|
||||
:return: nothing
|
||||
"""
|
||||
logging.debug("handling broadcast config: %s", config_data)
|
||||
logger.debug("handling broadcast config: %s", config_data)
|
||||
message = dataconversion.convert_config(config_data)
|
||||
try:
|
||||
self.sendall(message)
|
||||
except IOError:
|
||||
logging.exception("error sending config message")
|
||||
logger.exception("error sending config message")
|
||||
|
||||
def handle_broadcast_exception(self, exception_data):
|
||||
"""
|
||||
|
@ -289,7 +291,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
:param core.emulator.data.ExceptionData exception_data: exception data to handle
|
||||
:return: nothing
|
||||
"""
|
||||
logging.debug("handling broadcast exception: %s", exception_data)
|
||||
logger.debug("handling broadcast exception: %s", exception_data)
|
||||
tlv_data = structutils.pack_values(
|
||||
coreapi.CoreExceptionTlv,
|
||||
[
|
||||
|
@ -306,7 +308,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
try:
|
||||
self.sendall(message)
|
||||
except IOError:
|
||||
logging.exception("error sending exception message")
|
||||
logger.exception("error sending exception message")
|
||||
|
||||
def handle_broadcast_node(self, node_data):
|
||||
"""
|
||||
|
@ -315,12 +317,12 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
:param core.emulator.data.NodeData node_data: node data to handle
|
||||
:return: nothing
|
||||
"""
|
||||
logging.debug("handling broadcast node: %s", node_data)
|
||||
logger.debug("handling broadcast node: %s", node_data)
|
||||
message = dataconversion.convert_node(node_data)
|
||||
try:
|
||||
self.sendall(message)
|
||||
except IOError:
|
||||
logging.exception("error sending node message")
|
||||
logger.exception("error sending node message")
|
||||
|
||||
def handle_broadcast_link(self, link_data):
|
||||
"""
|
||||
|
@ -329,7 +331,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
:param core.emulator.data.LinkData link_data: link data to handle
|
||||
:return: nothing
|
||||
"""
|
||||
logging.debug("handling broadcast link: %s", link_data)
|
||||
logger.debug("handling broadcast link: %s", link_data)
|
||||
options_data = link_data.options
|
||||
loss = ""
|
||||
if options_data.loss is not None:
|
||||
|
@ -381,7 +383,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
try:
|
||||
self.sendall(message)
|
||||
except IOError:
|
||||
logging.exception("error sending Event Message")
|
||||
logger.exception("error sending Event Message")
|
||||
|
||||
def register(self):
|
||||
"""
|
||||
|
@ -389,7 +391,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
|
||||
:return: register message data
|
||||
"""
|
||||
logging.info(
|
||||
logger.info(
|
||||
"GUI has connected to session %d at %s", self.session.id, time.ctime()
|
||||
)
|
||||
tlv_data = b""
|
||||
|
@ -461,14 +463,14 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
header
|
||||
)
|
||||
if message_len == 0:
|
||||
logging.warning("received message with no data")
|
||||
logger.warning("received message with no data")
|
||||
|
||||
data = b""
|
||||
while len(data) < message_len:
|
||||
data += self.request.recv(message_len - len(data))
|
||||
if len(data) > message_len:
|
||||
error_message = f"received message length does not match received data ({len(data)} != {message_len})"
|
||||
logging.error(error_message)
|
||||
logger.error(error_message)
|
||||
raise IOError(error_message)
|
||||
|
||||
try:
|
||||
|
@ -477,7 +479,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
except KeyError:
|
||||
message = coreapi.CoreMessage(message_flags, header, data)
|
||||
message.message_type = message_type
|
||||
logging.exception("unimplemented core message type: %s", message.type_str())
|
||||
logger.exception("unimplemented core message type: %s", message.type_str())
|
||||
|
||||
return message
|
||||
|
||||
|
@ -488,7 +490,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
:param message: message to queue
|
||||
:return: nothing
|
||||
"""
|
||||
logging.debug(
|
||||
logger.debug(
|
||||
"queueing msg (queuedtimes = %s): type %s",
|
||||
message.queuedtimes,
|
||||
MessageTypes(message.message_type),
|
||||
|
@ -518,11 +520,11 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
:param message: message to handle
|
||||
:return: nothing
|
||||
"""
|
||||
logging.debug(
|
||||
logger.debug(
|
||||
"%s handling message:\n%s", threading.currentThread().getName(), message
|
||||
)
|
||||
if message.message_type not in self.message_handlers:
|
||||
logging.error("no handler for message type: %s", message.type_str())
|
||||
logger.error("no handler for message type: %s", message.type_str())
|
||||
return
|
||||
|
||||
message_handler = self.message_handlers[message.message_type]
|
||||
|
@ -532,7 +534,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
self.dispatch_replies(replies, message)
|
||||
except Exception as e:
|
||||
self.send_exception(ExceptionLevels.ERROR, "corehandler", str(e))
|
||||
logging.exception(
|
||||
logger.exception(
|
||||
"%s: exception while handling message: %s",
|
||||
threading.currentThread().getName(),
|
||||
message,
|
||||
|
@ -560,12 +562,12 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
# multiple TLVs of same type cause KeyError exception
|
||||
reply_message = f"CoreMessage (type {message_type} flags {message_flags} length {message_length})"
|
||||
|
||||
logging.debug("sending reply:\n%s", reply_message)
|
||||
logger.debug("sending reply:\n%s", reply_message)
|
||||
|
||||
try:
|
||||
self.sendall(reply)
|
||||
except IOError:
|
||||
logging.exception("error dispatching reply")
|
||||
logger.exception("error dispatching reply")
|
||||
|
||||
def handle(self):
|
||||
"""
|
||||
|
@ -580,7 +582,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
|
||||
# TODO: add shutdown handler for session
|
||||
self.session = self.coreemu.create_session(port)
|
||||
logging.debug("created new session for client: %s", self.session.id)
|
||||
logger.debug("created new session for client: %s", self.session.id)
|
||||
clients = self.session_clients.setdefault(self.session.id, [])
|
||||
clients.append(self)
|
||||
|
||||
|
@ -594,10 +596,10 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
try:
|
||||
message = self.receive_message()
|
||||
except EOFError:
|
||||
logging.info("client disconnected")
|
||||
logger.info("client disconnected")
|
||||
break
|
||||
except IOError:
|
||||
logging.exception("error receiving message")
|
||||
logger.exception("error receiving message")
|
||||
break
|
||||
|
||||
message.queuedtimes = 0
|
||||
|
@ -619,7 +621,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
if client == self:
|
||||
continue
|
||||
|
||||
logging.debug("BROADCAST TO OTHER CLIENT: %s", client)
|
||||
logger.debug("BROADCAST TO OTHER CLIENT: %s", client)
|
||||
client.sendall(message.raw_message)
|
||||
|
||||
def send_exception(self, level, source, text, node=None):
|
||||
|
@ -643,7 +645,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
self.handle_broadcast_exception(exception_data)
|
||||
|
||||
def add_session_handlers(self):
|
||||
logging.debug("adding session broadcast handlers")
|
||||
logger.debug("adding session broadcast handlers")
|
||||
self.session.event_handlers.append(self.handle_broadcast_event)
|
||||
self.session.exception_handlers.append(self.handle_broadcast_exception)
|
||||
self.session.node_handlers.append(self.handle_broadcast_node)
|
||||
|
@ -652,7 +654,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
self.session.config_handlers.append(self.handle_broadcast_config)
|
||||
|
||||
def remove_session_handlers(self):
|
||||
logging.debug("removing session broadcast handlers")
|
||||
logger.debug("removing session broadcast handlers")
|
||||
self.session.event_handlers.remove(self.handle_broadcast_event)
|
||||
self.session.exception_handlers.remove(self.handle_broadcast_exception)
|
||||
self.session.node_handlers.remove(self.handle_broadcast_node)
|
||||
|
@ -672,7 +674,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
message.flags & MessageFlags.ADD.value
|
||||
and message.flags & MessageFlags.DELETE.value
|
||||
):
|
||||
logging.warning("ignoring invalid message: add and delete flag both set")
|
||||
logger.warning("ignoring invalid message: add and delete flag both set")
|
||||
return ()
|
||||
|
||||
_class = CoreNode
|
||||
|
@ -898,7 +900,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
else:
|
||||
node.cmd(command, wait=False)
|
||||
except CoreError:
|
||||
logging.exception("error getting object: %s", node_id)
|
||||
logger.exception("error getting object: %s", node_id)
|
||||
# XXX wait and queue this message to try again later
|
||||
# XXX maybe this should be done differently
|
||||
if not message.flags & MessageFlags.LOCAL.value:
|
||||
|
@ -920,7 +922,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
execute_server = message.get_tlv(RegisterTlvs.EXECUTE_SERVER.value)
|
||||
if execute_server:
|
||||
try:
|
||||
logging.info("executing: %s", execute_server)
|
||||
logger.info("executing: %s", execute_server)
|
||||
if message.flags & MessageFlags.STRING.value:
|
||||
old_session_ids = set(self.coreemu.sessions.keys())
|
||||
sys.argv = shlex.split(execute_server)
|
||||
|
@ -946,26 +948,26 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
new_sid = new_session_ids.difference(old_session_ids)
|
||||
try:
|
||||
sid = new_sid.pop()
|
||||
logging.info("executed: %s as session %d", execute_server, sid)
|
||||
logger.info("executed: %s as session %d", execute_server, sid)
|
||||
except KeyError:
|
||||
logging.info(
|
||||
logger.info(
|
||||
"executed %s with unknown session ID", execute_server
|
||||
)
|
||||
return replies
|
||||
|
||||
logging.debug("checking session %d for RUNTIME state", sid)
|
||||
logger.debug("checking session %d for RUNTIME state", sid)
|
||||
session = self.coreemu.sessions.get(sid)
|
||||
retries = 10
|
||||
# wait for session to enter RUNTIME state, to prevent GUI from
|
||||
# connecting while nodes are still being instantiated
|
||||
while session.state != EventTypes.RUNTIME_STATE:
|
||||
logging.debug(
|
||||
logger.debug(
|
||||
"waiting for session %d to enter RUNTIME state", sid
|
||||
)
|
||||
time.sleep(1)
|
||||
retries -= 1
|
||||
if retries <= 0:
|
||||
logging.debug("session %d did not enter RUNTIME state", sid)
|
||||
logger.debug("session %d did not enter RUNTIME state", sid)
|
||||
return replies
|
||||
|
||||
tlv_data = coreapi.CoreRegisterTlv.pack(
|
||||
|
@ -977,7 +979,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
message = coreapi.CoreRegMessage.pack(0, tlv_data)
|
||||
replies.append(message)
|
||||
except Exception as e:
|
||||
logging.exception("error executing: %s", execute_server)
|
||||
logger.exception("error executing: %s", execute_server)
|
||||
tlv_data = coreapi.CoreExceptionTlv.pack(ExceptionTlvs.LEVEL.value, 2)
|
||||
tlv_data += coreapi.CoreExceptionTlv.pack(
|
||||
ExceptionTlvs.TEXT.value, str(e)
|
||||
|
@ -989,7 +991,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
|
||||
gui = message.get_tlv(RegisterTlvs.GUI.value)
|
||||
if gui is None:
|
||||
logging.debug("ignoring Register message")
|
||||
logger.debug("ignoring Register message")
|
||||
else:
|
||||
# register capabilities with the GUI
|
||||
replies.append(self.register())
|
||||
|
@ -1020,7 +1022,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
network_id=message.get_tlv(ConfigTlvs.NETWORK_ID.value),
|
||||
opaque=message.get_tlv(ConfigTlvs.OPAQUE.value),
|
||||
)
|
||||
logging.debug(
|
||||
logger.debug(
|
||||
"configuration message for %s node %s", config_data.object, config_data.node
|
||||
)
|
||||
message_type = ConfigFlags(config_data.type)
|
||||
|
@ -1095,7 +1097,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
self.session.location.reset()
|
||||
else:
|
||||
if not config_data.data_values:
|
||||
logging.warning("location data missing")
|
||||
logger.warning("location data missing")
|
||||
else:
|
||||
values = [float(x) for x in config_data.data_values.split("|")]
|
||||
|
||||
|
@ -1108,7 +1110,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
# geographic reference point
|
||||
self.session.location.setrefgeo(lat, lon, alt)
|
||||
self.session.location.refscale = values[5]
|
||||
logging.info(
|
||||
logger.info(
|
||||
"location configured: %s = %s scale=%s",
|
||||
self.session.location.refxyz,
|
||||
self.session.location.refgeo,
|
||||
|
@ -1145,7 +1147,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
def handle_config_broker(self, message_type, config_data):
|
||||
if message_type not in [ConfigFlags.REQUEST, ConfigFlags.RESET]:
|
||||
if not config_data.data_values:
|
||||
logging.info("emulation server data missing")
|
||||
logger.info("emulation server data missing")
|
||||
else:
|
||||
values = config_data.data_values.split("|")
|
||||
|
||||
|
@ -1169,7 +1171,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
session_id = config_data.session
|
||||
opaque = config_data.opaque
|
||||
|
||||
logging.debug(
|
||||
logger.debug(
|
||||
"configuration request: node(%s) session(%s) opaque(%s)",
|
||||
node_id,
|
||||
session_id,
|
||||
|
@ -1199,10 +1201,10 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
values = []
|
||||
group_strings = []
|
||||
start_index = 1
|
||||
logging.debug("sorted groups: %s", groups)
|
||||
logger.debug("sorted groups: %s", groups)
|
||||
for group in groups:
|
||||
services = sorted(group_map[group], key=lambda x: x.name.lower())
|
||||
logging.debug("sorted services for group(%s): %s", group, services)
|
||||
logger.debug("sorted services for group(%s): %s", group, services)
|
||||
end_index = start_index + len(services) - 1
|
||||
group_strings.append(f"{group}:{start_index}-{end_index}")
|
||||
start_index += len(services)
|
||||
|
@ -1226,7 +1228,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
|
||||
node = self.session.get_node(node_id, CoreNodeBase)
|
||||
if node is None:
|
||||
logging.warning(
|
||||
logger.warning(
|
||||
"request to configure service for unknown node %s", node_id
|
||||
)
|
||||
return replies
|
||||
|
@ -1285,7 +1287,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
|
||||
error_message = "services config message that I don't know how to handle"
|
||||
if values is None:
|
||||
logging.error(error_message)
|
||||
logger.error(error_message)
|
||||
else:
|
||||
if opaque is None:
|
||||
values = values.split("|")
|
||||
|
@ -1294,11 +1296,11 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
data_types is None
|
||||
or data_types[0] != ConfigDataTypes.STRING.value
|
||||
):
|
||||
logging.info(error_message)
|
||||
logger.info(error_message)
|
||||
return None
|
||||
key = values.pop(0)
|
||||
self.session.services.default_services[key] = values
|
||||
logging.debug("default services for type %s set to %s", key, values)
|
||||
logger.debug("default services for type %s set to %s", key, values)
|
||||
elif node_id:
|
||||
services = ServiceShim.servicesfromopaque(opaque)
|
||||
if services:
|
||||
|
@ -1337,16 +1339,16 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
values_str = config_data.data_values
|
||||
|
||||
node_id = utils.iface_config_id(node_id, iface_id)
|
||||
logging.debug(
|
||||
logger.debug(
|
||||
"received configure message for %s nodenum: %s", object_name, node_id
|
||||
)
|
||||
if message_type == ConfigFlags.REQUEST:
|
||||
logging.info("replying to configure request for model: %s", object_name)
|
||||
logger.info("replying to configure request for model: %s", object_name)
|
||||
typeflags = ConfigFlags.NONE.value
|
||||
|
||||
model_class = self.session.mobility.models.get(object_name)
|
||||
if not model_class:
|
||||
logging.warning("model class does not exist: %s", object_name)
|
||||
logger.warning("model class does not exist: %s", object_name)
|
||||
return []
|
||||
|
||||
config = self.session.mobility.get_model_config(node_id, object_name)
|
||||
|
@ -1357,7 +1359,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
elif message_type != ConfigFlags.RESET:
|
||||
# store the configuration values for later use, when the node
|
||||
if not object_name:
|
||||
logging.warning("no configuration object for node: %s", node_id)
|
||||
logger.warning("no configuration object for node: %s", node_id)
|
||||
return []
|
||||
|
||||
parsed_config = {}
|
||||
|
@ -1371,7 +1373,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
if object_name == BasicRangeModel.name:
|
||||
node.updatemodel(parsed_config)
|
||||
except CoreError:
|
||||
logging.error(
|
||||
logger.error(
|
||||
"skipping mobility configuration for unknown node: %s", node_id
|
||||
)
|
||||
|
||||
|
@ -1385,11 +1387,11 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
values_str = config_data.data_values
|
||||
|
||||
node_id = utils.iface_config_id(node_id, iface_id)
|
||||
logging.debug(
|
||||
logger.debug(
|
||||
"received configure message for %s nodenum: %s", object_name, node_id
|
||||
)
|
||||
if message_type == ConfigFlags.REQUEST:
|
||||
logging.info("replying to configure request for %s model", object_name)
|
||||
logger.info("replying to configure request for %s model", object_name)
|
||||
typeflags = ConfigFlags.NONE.value
|
||||
config = self.session.emane.get_configs()
|
||||
config_response = ConfigShim.config_data(
|
||||
|
@ -1398,7 +1400,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
replies.append(config_response)
|
||||
elif message_type != ConfigFlags.RESET:
|
||||
if not object_name:
|
||||
logging.info("no configuration object for node %s", node_id)
|
||||
logger.info("no configuration object for node %s", node_id)
|
||||
return []
|
||||
|
||||
if values_str:
|
||||
|
@ -1415,16 +1417,16 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
values_str = config_data.data_values
|
||||
|
||||
node_id = utils.iface_config_id(node_id, iface_id)
|
||||
logging.debug(
|
||||
logger.debug(
|
||||
"received configure message for %s nodenum: %s", object_name, node_id
|
||||
)
|
||||
if message_type == ConfigFlags.REQUEST:
|
||||
logging.info("replying to configure request for model: %s", object_name)
|
||||
logger.info("replying to configure request for model: %s", object_name)
|
||||
typeflags = ConfigFlags.NONE.value
|
||||
|
||||
model_class = self.session.emane.models.get(object_name)
|
||||
if not model_class:
|
||||
logging.warning("model class does not exist: %s", object_name)
|
||||
logger.warning("model class does not exist: %s", object_name)
|
||||
return []
|
||||
|
||||
config = self.session.emane.get_model_config(node_id, object_name)
|
||||
|
@ -1435,7 +1437,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
elif message_type != ConfigFlags.RESET:
|
||||
# store the configuration values for later use, when the node
|
||||
if not object_name:
|
||||
logging.warning("no configuration object for node: %s", node_id)
|
||||
logger.warning("no configuration object for node: %s", node_id)
|
||||
return []
|
||||
|
||||
parsed_config = {}
|
||||
|
@ -1464,13 +1466,11 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
compressed_data = message.get_tlv(FileTlvs.COMPRESSED_DATA.value)
|
||||
|
||||
if compressed_data:
|
||||
logging.warning(
|
||||
"Compressed file data not implemented for File message."
|
||||
)
|
||||
logger.warning("Compressed file data not implemented for File message.")
|
||||
return ()
|
||||
|
||||
if src_path and data:
|
||||
logging.warning(
|
||||
logger.warning(
|
||||
"ignoring invalid File message: source and data TLVs are both present"
|
||||
)
|
||||
return ()
|
||||
|
@ -1487,7 +1487,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
elif file_type.startswith("hook:"):
|
||||
_, state = file_type.split(":")[:2]
|
||||
if not state.isdigit():
|
||||
logging.error("error setting hook having state '%s'", state)
|
||||
logger.error("error setting hook having state '%s'", state)
|
||||
return ()
|
||||
state = int(state)
|
||||
state = EventTypes(state)
|
||||
|
@ -1517,7 +1517,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
:param message: interface message to handle
|
||||
:return: reply messages
|
||||
"""
|
||||
logging.info("ignoring Interface message")
|
||||
logger.info("ignoring Interface message")
|
||||
return ()
|
||||
|
||||
def handle_event_message(self, message):
|
||||
|
@ -1543,7 +1543,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
raise NotImplementedError("Event message missing event type")
|
||||
node_id = event_data.node
|
||||
|
||||
logging.debug("handling event %s at %s", event_type.name, time.ctime())
|
||||
logger.debug("handling event %s at %s", event_type.name, time.ctime())
|
||||
if event_type.value <= EventTypes.SHUTDOWN_STATE.value:
|
||||
if node_id is not None:
|
||||
node = self.session.get_node(node_id, NodeBase)
|
||||
|
@ -1555,7 +1555,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
self.session.start_mobility(node_ids=[node.id])
|
||||
return ()
|
||||
|
||||
logging.warning(
|
||||
logger.warning(
|
||||
"dropping unhandled event message for node: %s", node.name
|
||||
)
|
||||
return ()
|
||||
|
@ -1580,12 +1580,12 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
self.send_node_emulation_id(_id)
|
||||
elif event_type == EventTypes.RUNTIME_STATE:
|
||||
self.session.set_state(event_type)
|
||||
logging.warning("Unexpected event message: RUNTIME state received")
|
||||
logger.warning("Unexpected event message: RUNTIME state received")
|
||||
elif event_type == EventTypes.DATACOLLECT_STATE:
|
||||
self.session.data_collect()
|
||||
elif event_type == EventTypes.SHUTDOWN_STATE:
|
||||
self.session.set_state(event_type)
|
||||
logging.warning("Unexpected event message: SHUTDOWN state received")
|
||||
logger.warning("Unexpected event message: SHUTDOWN state received")
|
||||
elif event_type in {
|
||||
EventTypes.START,
|
||||
EventTypes.STOP,
|
||||
|
@ -1605,7 +1605,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
self.session.mobility_event(event_data)
|
||||
handled = True
|
||||
if not handled:
|
||||
logging.warning(
|
||||
logger.warning(
|
||||
"unhandled event message: event type %s, name %s ",
|
||||
event_type.name,
|
||||
name,
|
||||
|
@ -1624,7 +1624,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
name = event_data.name
|
||||
data = event_data.data
|
||||
if etime is None:
|
||||
logging.warning("Event message scheduled event missing start time")
|
||||
logger.warning("Event message scheduled event missing start time")
|
||||
return ()
|
||||
if message.flags & MessageFlags.ADD.value:
|
||||
self.session.add_event(
|
||||
|
@ -1650,7 +1650,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
try:
|
||||
node = self.session.get_node(node_id, CoreNodeBase)
|
||||
except CoreError:
|
||||
logging.warning(
|
||||
logger.warning(
|
||||
"ignoring event for service '%s', unknown node '%s'", name, node_id
|
||||
)
|
||||
return
|
||||
|
@ -1692,7 +1692,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
if num > 1:
|
||||
unknown_data += ", "
|
||||
num -= 1
|
||||
logging.warning("Event requested for unknown service(s): %s", unknown_data)
|
||||
logger.warning("Event requested for unknown service(s): %s", unknown_data)
|
||||
unknown_data = f"Unknown:{unknown_data}"
|
||||
|
||||
event_data = EventData(
|
||||
|
@ -1720,7 +1720,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
files = coreapi.str_to_list(file_str)
|
||||
thumb = message.get_tlv(SessionTlvs.THUMB.value)
|
||||
user = message.get_tlv(SessionTlvs.USER.value)
|
||||
logging.debug(
|
||||
logger.debug(
|
||||
"SESSION message flags=0x%x sessions=%s", message.flags, session_id_str
|
||||
)
|
||||
|
||||
|
@ -1732,7 +1732,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
else:
|
||||
session = self.coreemu.sessions.get(session_id)
|
||||
if session is None:
|
||||
logging.warning("session %s not found", session_id)
|
||||
logger.warning("session %s not found", session_id)
|
||||
continue
|
||||
if names is not None:
|
||||
session.name = names[index]
|
||||
|
@ -1756,14 +1756,14 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
session = self.coreemu.sessions.get(session_id)
|
||||
|
||||
if session is None:
|
||||
logging.info(
|
||||
logger.info(
|
||||
"session %s not found (flags=0x%x)", session_id, message.flags
|
||||
)
|
||||
continue
|
||||
|
||||
if message.flags & MessageFlags.ADD.value:
|
||||
# connect to the first session that exists
|
||||
logging.info("request to connect to session %s", session_id)
|
||||
logger.info("request to connect to session %s", session_id)
|
||||
|
||||
# remove client from session broker and shutdown if needed
|
||||
self.remove_session_handlers()
|
||||
|
@ -1780,7 +1780,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
clients.append(self)
|
||||
|
||||
# add broadcast handlers
|
||||
logging.info("adding session broadcast handlers")
|
||||
logger.info("adding session broadcast handlers")
|
||||
self.add_session_handlers()
|
||||
|
||||
if user:
|
||||
|
@ -1790,12 +1790,10 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
self.send_objects()
|
||||
elif message.flags & MessageFlags.DELETE.value:
|
||||
# shut down the specified session(s)
|
||||
logging.info("request to terminate session %s", session_id)
|
||||
logger.info("request to terminate session %s", session_id)
|
||||
self.coreemu.delete_session(session_id)
|
||||
else:
|
||||
logging.warning(
|
||||
"unhandled session flags for session %s", session_id
|
||||
)
|
||||
logger.warning("unhandled session flags for session %s", session_id)
|
||||
|
||||
return ()
|
||||
|
||||
|
@ -1817,9 +1815,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
try:
|
||||
self.sendall(reply)
|
||||
except IOError:
|
||||
logging.exception(
|
||||
"error sending node emulation id message: %s", node_id
|
||||
)
|
||||
logger.exception("error sending node emulation id message: %s", node_id)
|
||||
|
||||
del self.node_status_request[node_id]
|
||||
|
||||
|
@ -1845,7 +1841,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
for model_name in mobility_configs:
|
||||
config = mobility_configs[model_name]
|
||||
model_class = self.session.mobility.models[model_name]
|
||||
logging.debug(
|
||||
logger.debug(
|
||||
"mobility config: node(%s) class(%s) values(%s)",
|
||||
node_id,
|
||||
model_class,
|
||||
|
@ -1858,7 +1854,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
|
||||
# send global emane config
|
||||
config = self.session.emane.get_configs()
|
||||
logging.debug("global emane config: values(%s)", config)
|
||||
logger.debug("global emane config: values(%s)", config)
|
||||
config_data = ConfigShim.config_data(
|
||||
0, None, ConfigFlags.UPDATE.value, self.session.emane.emane_config, config
|
||||
)
|
||||
|
@ -1870,7 +1866,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
for model_name in emane_configs:
|
||||
config = emane_configs[model_name]
|
||||
model_class = self.session.emane.models[model_name]
|
||||
logging.debug(
|
||||
logger.debug(
|
||||
"emane config: node(%s) class(%s) values(%s)",
|
||||
node_id,
|
||||
model_class,
|
||||
|
@ -1951,7 +1947,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
self.session.broadcast_config(config_data)
|
||||
|
||||
node_count = self.session.get_node_count()
|
||||
logging.info(
|
||||
logger.info(
|
||||
"informed GUI about %d nodes and %d links", node_count, len(all_links)
|
||||
)
|
||||
|
||||
|
@ -1991,11 +1987,11 @@ class CoreUdpHandler(CoreHandler):
|
|||
header
|
||||
)
|
||||
if message_len == 0:
|
||||
logging.warning("received message with no data")
|
||||
logger.warning("received message with no data")
|
||||
return
|
||||
|
||||
if len(data) != coreapi.CoreMessage.header_len + message_len:
|
||||
logging.error(
|
||||
logger.error(
|
||||
"received message length does not match received data (%s != %s)",
|
||||
len(data),
|
||||
coreapi.CoreMessage.header_len + message_len,
|
||||
|
@ -2013,7 +2009,7 @@ class CoreUdpHandler(CoreHandler):
|
|||
message_flags, header, data[coreapi.CoreMessage.header_len :]
|
||||
)
|
||||
message.msgtype = message_type
|
||||
logging.exception("unimplemented core message type: %s", message.type_str())
|
||||
logger.exception("unimplemented core message type: %s", message.type_str())
|
||||
|
||||
def handle(self):
|
||||
message = self.receive_message()
|
||||
|
@ -2023,12 +2019,12 @@ class CoreUdpHandler(CoreHandler):
|
|||
for session_id in sessions:
|
||||
session = self.server.mainserver.coreemu.sessions.get(session_id)
|
||||
if session:
|
||||
logging.debug("session handling message: %s", session.id)
|
||||
logger.debug("session handling message: %s", session.id)
|
||||
self.session = session
|
||||
self.handle_message(message)
|
||||
self.broadcast(message)
|
||||
else:
|
||||
logging.error(
|
||||
logger.error(
|
||||
"session %d in %s message not found.",
|
||||
session_id,
|
||||
message.type_str(),
|
||||
|
@ -2052,7 +2048,7 @@ class CoreUdpHandler(CoreHandler):
|
|||
self.handle_message(message)
|
||||
self.broadcast(message)
|
||||
else:
|
||||
logging.error(
|
||||
logger.error(
|
||||
"no active session, dropping %s message.", message.type_str()
|
||||
)
|
||||
|
||||
|
@ -2065,7 +2061,7 @@ class CoreUdpHandler(CoreHandler):
|
|||
try:
|
||||
client.sendall(message.raw_message)
|
||||
except IOError:
|
||||
logging.error("error broadcasting")
|
||||
logger.error("error broadcasting")
|
||||
|
||||
def finish(self):
|
||||
return socketserver.BaseRequestHandler.finish(self)
|
||||
|
|
|
@ -10,6 +10,8 @@ from core.api.tlv.enumerations import ConfigTlvs, NodeTlvs
|
|||
from core.config import ConfigGroup, ConfigurableOptions
|
||||
from core.emulator.data import ConfigData, NodeData
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def convert_node(node_data: NodeData):
|
||||
"""
|
||||
|
@ -139,9 +141,9 @@ class ConfigShim:
|
|||
captions = None
|
||||
data_types = []
|
||||
possible_values = []
|
||||
logging.debug("configurable: %s", configurable_options)
|
||||
logging.debug("configuration options: %s", configurable_options.configurations)
|
||||
logging.debug("configuration data: %s", config)
|
||||
logger.debug("configurable: %s", configurable_options)
|
||||
logger.debug("configuration options: %s", configurable_options.configurations)
|
||||
logger.debug("configuration data: %s", config)
|
||||
for configuration in configurable_options.configurations():
|
||||
if not captions:
|
||||
captions = configuration.label
|
||||
|
|
|
@ -4,6 +4,8 @@ Utilities for working with python struct data.
|
|||
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def pack_values(clazz, packers):
|
||||
"""
|
||||
|
@ -15,7 +17,7 @@ def pack_values(clazz, packers):
|
|||
"""
|
||||
|
||||
# iterate through tuples of values to pack
|
||||
logging.debug("packing: %s", packers)
|
||||
logger.debug("packing: %s", packers)
|
||||
data = b""
|
||||
for packer in packers:
|
||||
# check if a transformer was provided for valid values
|
||||
|
@ -37,7 +39,7 @@ def pack_values(clazz, packers):
|
|||
value = transformer(value)
|
||||
|
||||
# pack and add to existing data
|
||||
logging.debug("packing: %s - %s type(%s)", tlv_type, value, type(value))
|
||||
logger.debug("packing: %s - %s type(%s)", tlv_type, value, type(value))
|
||||
data += clazz.pack(tlv_type.value, value)
|
||||
|
||||
return data
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue