updates to python based logging to use module named loggers, updated logging config file to align with these changes

This commit is contained in:
Blake Harnden 2021-04-21 21:09:35 -07:00
parent 55d5bb3859
commit 69652ac577
63 changed files with 717 additions and 606 deletions

View file

@ -14,6 +14,8 @@ from core.emulator.data import LinkOptions
from core.nodes.interface import CoreInterface
from core.xml import emanexml
logger = logging.getLogger(__name__)
try:
from emane.events.commeffectevent import CommEffectEvent
except ImportError:
@ -21,7 +23,7 @@ except ImportError:
from emanesh.events.commeffectevent import CommEffectEvent
except ImportError:
CommEffectEvent = None
logging.debug("compatible emane python bindings not installed")
logger.debug("compatible emane python bindings not installed")
def convert_none(x: float) -> int:
@ -113,11 +115,11 @@ class EmaneCommEffectModel(emanemodel.EmaneModel):
"""
service = self.session.emane.service
if service is None:
logging.warning("%s: EMANE event service unavailable", self.name)
logger.warning("%s: EMANE event service unavailable", self.name)
return
if iface is None or iface2 is None:
logging.warning("%s: missing NEM information", self.name)
logger.warning("%s: missing NEM information", self.name)
return
# TODO: batch these into multiple events per transmission
@ -125,7 +127,7 @@ class EmaneCommEffectModel(emanemodel.EmaneModel):
event = CommEffectEvent()
nem1 = self.session.emane.get_nem_id(iface)
nem2 = self.session.emane.get_nem_id(iface2)
logging.info("sending comm effect event")
logger.info("sending comm effect event")
event.append(
nem1,
latency=convert_none(options.delay),

View file

@ -34,6 +34,8 @@ from core.nodes.base import CoreNetworkBase, CoreNode, CoreNodeBase, NodeBase
from core.nodes.interface import CoreInterface, TunTap
from core.xml import emanexml
logger = logging.getLogger(__name__)
if TYPE_CHECKING:
from core.emulator.session import Session
@ -51,7 +53,7 @@ except ImportError:
LocationEvent = None
PathlossEvent = None
EventServiceException = None
logging.debug("compatible emane python bindings not installed")
logger.debug("compatible emane python bindings not installed")
EMANE_MODELS = [
EmaneRfPipeModel,
@ -174,11 +176,11 @@ class EmaneManager(ModelManager):
# check for emane
path = utils.which("emane", required=False)
if not path:
logging.info("emane is not installed")
logger.info("emane is not installed")
return
# get version
emane_version = utils.cmd("emane --version")
logging.info("using emane: %s", emane_version)
logger.info("using emane: %s", emane_version)
# load default emane models
self.load_models(EMANE_MODELS)
# load custom models
@ -214,7 +216,7 @@ class EmaneManager(ModelManager):
self.event_device = self.get_config("eventservicedevice")
eventnetidx = self.session.get_control_net_index(self.event_device)
if eventnetidx < 0:
logging.error(
logger.error(
"invalid emane event service device provided: %s", self.event_device
)
return
@ -230,18 +232,18 @@ class EmaneManager(ModelManager):
# disabled otachannel for event service
# only needed for e.g. antennaprofile events xmit by models
logging.info("using %s for event service traffic", self.event_device)
logger.info("using %s for event service traffic", self.event_device)
try:
self.service = EventService(eventchannel=self.eventchannel, otachannel=None)
except EventServiceException:
logging.exception("error instantiating emane EventService")
logger.exception("error instantiating emane EventService")
def load_models(self, emane_models: List[Type[EmaneModel]]) -> None:
"""
Load EMANE models and make them available.
"""
for emane_model in emane_models:
logging.debug("loading emane model: %s", emane_model.__name__)
logger.debug("loading emane model: %s", emane_model.__name__)
emane_prefix = self.session.options.get_config(
"emane_prefix", default=DEFAULT_EMANE_PREFIX
)
@ -281,17 +283,17 @@ class EmaneManager(ModelManager):
:return: SUCCESS, NOT_NEEDED, NOT_READY in order to delay session
instantiation
"""
logging.debug("emane setup")
logger.debug("emane setup")
with self.session.nodes_lock:
for node_id in self.session.nodes:
node = self.session.nodes[node_id]
if isinstance(node, EmaneNet):
logging.debug(
logger.debug(
"adding emane node: id(%s) name(%s)", node.id, node.name
)
self.add_node(node)
if not self._emane_nets:
logging.debug("no emane nodes in session")
logger.debug("no emane nodes in session")
return EmaneState.NOT_NEEDED
# check if bindings were installed
@ -302,9 +304,9 @@ class EmaneManager(ModelManager):
# - needs to exist when eventservice binds to it (initeventservice)
otadev = self.get_config("otamanagerdevice")
netidx = self.session.get_control_net_index(otadev)
logging.debug("emane ota manager device: index(%s) otadev(%s)", netidx, otadev)
logger.debug("emane ota manager device: index(%s) otadev(%s)", netidx, otadev)
if netidx < 0:
logging.error(
logger.error(
"EMANE cannot start, check core config. invalid OTA device provided: %s",
otadev,
)
@ -314,12 +316,12 @@ class EmaneManager(ModelManager):
net_index=netidx, remove=False, conf_required=False
)
eventdev = self.get_config("eventservicedevice")
logging.debug("emane event service device: eventdev(%s)", eventdev)
logger.debug("emane event service device: eventdev(%s)", eventdev)
if eventdev != otadev:
netidx = self.session.get_control_net_index(eventdev)
logging.debug("emane event service device index: %s", netidx)
logger.debug("emane event service device index: %s", netidx)
if netidx < 0:
logging.error(
logger.error(
"emane cannot start due to invalid event service device: %s",
eventdev,
)
@ -346,7 +348,7 @@ class EmaneManager(ModelManager):
self.starteventmonitor()
self.buildeventservicexml()
with self._emane_node_lock:
logging.info("emane building xmls...")
logger.info("emane building xmls...")
start_data = self.get_start_data()
for data in start_data:
self.start_node(data)
@ -359,11 +361,11 @@ class EmaneManager(ModelManager):
for node_id in sorted(self._emane_nets):
emane_net = self._emane_nets[node_id]
if not emane_net.model:
logging.error("emane net(%s) has no model", emane_net.name)
logger.error("emane net(%s) has no model", emane_net.name)
continue
for iface in emane_net.get_ifaces():
if not iface.node:
logging.error(
logger.error(
"emane net(%s) connected interface(%s) missing node",
emane_net.name,
iface.name,
@ -403,7 +405,7 @@ class EmaneManager(ModelManager):
with path.open("a") as f:
f.write(f"{iface.node.name} {iface.name} {nem_id}\n")
except IOError:
logging.exception("error writing to emane nem file")
logger.exception("error writing to emane nem file")
def links_enabled(self) -> bool:
return self.get_config("link_enabled") == "1"
@ -417,7 +419,7 @@ class EmaneManager(ModelManager):
with self._emane_node_lock:
for node_id in sorted(self._emane_nets):
emane_net = self._emane_nets[node_id]
logging.debug(
logger.debug(
"post startup for emane node: %s - %s", emane_net.id, emane_net.name
)
emane_net.model.post_startup()
@ -441,7 +443,7 @@ class EmaneManager(ModelManager):
with self._emane_node_lock:
if not self._emane_nets:
return
logging.info("stopping EMANE daemons")
logger.info("stopping EMANE daemons")
if self.links_enabled():
self.link_monitor.stop()
# shutdown interfaces and stop daemons
@ -467,11 +469,11 @@ class EmaneManager(ModelManager):
"""
for node_id in self._emane_nets:
emane_net = self._emane_nets[node_id]
logging.debug("checking emane model for node: %s", node_id)
logger.debug("checking emane model for node: %s", node_id)
# skip nodes that already have a model set
if emane_net.model:
logging.debug(
logger.debug(
"node(%s) already has model(%s)", emane_net.id, emane_net.model.name
)
continue
@ -480,11 +482,11 @@ class EmaneManager(ModelManager):
# before nodes exist
model_name = self.node_models.get(node_id)
if not model_name:
logging.error("emane node(%s) has no node model", node_id)
logger.error("emane node(%s) has no node model", node_id)
raise ValueError("emane node has no model set")
config = self.get_model_config(node_id=node_id, model_name=model_name)
logging.debug("setting emane model(%s) config(%s)", model_name, config)
logger.debug("setting emane model(%s) config(%s)", model_name, config)
model_class = self.models[model_name]
emane_net.setmodel(model_class, config)
@ -493,12 +495,12 @@ class EmaneManager(ModelManager):
) -> Optional[LinkData]:
iface1 = self.get_iface(nem1)
if not iface1:
logging.error("invalid nem: %s", nem1)
logger.error("invalid nem: %s", nem1)
return None
node1 = iface1.node
iface2 = self.get_iface(nem2)
if not iface2:
logging.error("invalid nem: %s", nem2)
logger.error("invalid nem: %s", nem2)
return None
node2 = iface2.node
if iface1.net != iface2.net:
@ -535,7 +537,7 @@ class EmaneManager(ModelManager):
try:
group, port = self.get_config("eventservicegroup").split(":")
except ValueError:
logging.exception("invalid eventservicegroup in EMANE config")
logger.exception("invalid eventservicegroup in EMANE config")
return
dev = self.get_config("eventservicedevice")
@ -551,12 +553,12 @@ class EmaneManager(ModelManager):
Start one EMANE daemon per node having a radio.
Add a control network even if the user has not configured one.
"""
logging.info("starting emane daemons...")
logger.info("starting emane daemons...")
loglevel = str(EmaneManager.DEFAULT_LOG_LEVEL)
cfgloglevel = self.session.options.get_config_int("emane_log_level")
realtime = self.session.options.get_config_bool("emane_realtime", default=True)
if cfgloglevel:
logging.info("setting user-defined emane log level: %d", cfgloglevel)
logger.info("setting user-defined emane log level: %d", cfgloglevel)
loglevel = str(cfgloglevel)
emanecmd = f"emane -d -l {loglevel}"
if realtime:
@ -574,17 +576,17 @@ class EmaneManager(ModelManager):
node, 0, remove=False, conf_required=False
)
if otanetidx > 0:
logging.info("adding ota device ctrl%d", otanetidx)
logger.info("adding ota device ctrl%d", otanetidx)
self.session.add_remove_control_iface(
node, otanetidx, remove=False, conf_required=False
)
if eventservicenetidx >= 0:
logging.info("adding event service device ctrl%d", eventservicenetidx)
logger.info("adding event service device ctrl%d", eventservicenetidx)
self.session.add_remove_control_iface(
node, eventservicenetidx, remove=False, conf_required=False
)
# multicast route is needed for OTA data
logging.info("OTA GROUP(%s) OTA DEV(%s)", otagroup, otadev)
logger.info("OTA GROUP(%s) OTA DEV(%s)", otagroup, otadev)
node.node_net_client.create_route(otagroup, otadev)
# multicast route is also needed for event data if on control network
if eventservicenetidx >= 0 and eventgroup != otagroup:
@ -594,13 +596,13 @@ class EmaneManager(ModelManager):
platform_xml = node.directory / f"{node.name}-platform.xml"
args = f"{emanecmd} -f {log_file} {platform_xml}"
node.cmd(args)
logging.info("node(%s) emane daemon running: %s", node.name, args)
logger.info("node(%s) emane daemon running: %s", node.name, args)
else:
log_file = self.session.directory / f"{node.name}-emane.log"
platform_xml = self.session.directory / f"{node.name}-platform.xml"
args = f"{emanecmd} -f {log_file} {platform_xml}"
node.host_cmd(args, cwd=self.session.directory)
logging.info("node(%s) host emane daemon running: %s", node.name, args)
logger.info("node(%s) host emane daemon running: %s", node.name, args)
def install_iface(self, iface: CoreInterface) -> None:
emane_net = iface.net
@ -641,11 +643,11 @@ class EmaneManager(ModelManager):
"""
Start monitoring EMANE location events if configured to do so.
"""
logging.info("emane start event monitor")
logger.info("emane start event monitor")
if not self.doeventmonitor():
return
if self.service is None:
logging.error(
logger.error(
"Warning: EMANE events will not be generated "
"because the emaneeventservice\n binding was "
"unable to load "
@ -678,7 +680,7 @@ class EmaneManager(ModelManager):
"""
if self.service is None:
return
logging.info(
logger.info(
"subscribing to EMANE location events. (%s)",
threading.currentThread().getName(),
)
@ -694,7 +696,7 @@ class EmaneManager(ModelManager):
if eid == LocationEvent.IDENTIFIER:
self.handlelocationevent(nem, eid, data)
logging.info(
logger.info(
"unsubscribing from EMANE location events. (%s)",
threading.currentThread().getName(),
)
@ -712,14 +714,14 @@ class EmaneManager(ModelManager):
or "longitude" not in attrs
or "altitude" not in attrs
):
logging.warning("dropped invalid location event")
logger.warning("dropped invalid location event")
continue
# yaw,pitch,roll,azimuth,elevation,velocity are unhandled
lat = attrs["latitude"]
lon = attrs["longitude"]
alt = attrs["altitude"]
logging.debug("emane location event: %s,%s,%s", lat, lon, alt)
logger.debug("emane location event: %s,%s,%s", lat, lon, alt)
self.handlelocationeventtoxyz(txnemid, lat, lon, alt)
def handlelocationeventtoxyz(
@ -733,7 +735,7 @@ class EmaneManager(ModelManager):
# convert nemid to node number
iface = self.get_iface(nemid)
if iface is None:
logging.info("location event for unknown NEM %s", nemid)
logger.info("location event for unknown NEM %s", nemid)
return False
n = iface.node.id
@ -742,7 +744,7 @@ class EmaneManager(ModelManager):
x = int(x)
y = int(y)
z = int(z)
logging.debug(
logger.debug(
"location event NEM %s (%s, %s, %s) -> (%s, %s, %s)",
nemid,
lat,
@ -756,7 +758,7 @@ class EmaneManager(ModelManager):
ybit_check = y.bit_length() > 16 or y < 0
zbit_check = z.bit_length() > 16 or z < 0
if any([xbit_check, ybit_check, zbit_check]):
logging.error(
logger.error(
"Unable to build node location message, received lat/long/alt "
"exceeds coordinate space: NEM %s (%d, %d, %d)",
nemid,
@ -770,7 +772,7 @@ class EmaneManager(ModelManager):
try:
node = self.session.get_node(n, NodeBase)
except CoreError:
logging.exception(
logger.exception(
"location event NEM %s has no corresponding node %s", nemid, n
)
return False

View file

@ -5,6 +5,8 @@ from typing import Dict, List
from core.config import Configuration
from core.emulator.enumerations import ConfigDataTypes
logger = logging.getLogger(__name__)
manifest = None
try:
from emane.shell import manifest
@ -13,7 +15,7 @@ except ImportError:
from emanesh import manifest
except ImportError:
manifest = None
logging.debug("compatible emane python bindings not installed")
logger.debug("compatible emane python bindings not installed")
def _type_value(config_type: str) -> ConfigDataTypes:

View file

@ -15,6 +15,8 @@ from core.location.mobility import WirelessModel
from core.nodes.interface import CoreInterface
from core.xml import emanexml
logger = logging.getLogger(__name__)
class EmaneModel(WirelessModel):
"""
@ -115,7 +117,7 @@ class EmaneModel(WirelessModel):
:return: nothing
"""
logging.debug("emane model(%s) has no post setup tasks", self.name)
logger.debug("emane model(%s) has no post setup tasks", self.name)
def update(self, moved_ifaces: List[CoreInterface]) -> None:
"""
@ -130,7 +132,7 @@ class EmaneModel(WirelessModel):
emane_net = self.session.get_node(self.id, EmaneNet)
emane_net.setnempositions(moved_ifaces)
except CoreError:
logging.exception("error during update")
logger.exception("error during update")
def linkconfig(
self, iface: CoreInterface, options: LinkOptions, iface2: CoreInterface = None
@ -143,4 +145,4 @@ class EmaneModel(WirelessModel):
:param iface2: interface two
:return: nothing
"""
logging.warning("emane model(%s) does not support link config", self.name)
logger.warning("emane model(%s) does not support link config", self.name)

View file

@ -10,6 +10,8 @@ from core.emulator.data import LinkData
from core.emulator.enumerations import LinkTypes, MessageFlags
from core.nodes.network import CtrlNet
logger = logging.getLogger(__name__)
try:
from emane import shell
except ImportError:
@ -17,7 +19,7 @@ except ImportError:
from emanesh import shell
except ImportError:
shell = None
logging.debug("compatible emane python bindings not installed")
logger.debug("compatible emane python bindings not installed")
if TYPE_CHECKING:
from core.emane.emanemanager import EmaneManager
@ -91,7 +93,7 @@ class EmaneClient:
# get mac config
mac_id, _, emane_model = components[MAC_COMPONENT_INDEX]
mac_config = self.client.getConfiguration(mac_id)
logging.debug(
logger.debug(
"address(%s) nem(%s) emane(%s)", self.address, nem_id, emane_model
)
@ -101,9 +103,9 @@ class EmaneClient:
elif emane_model == EMANE_RFPIPE:
loss_table = self.handle_rfpipe(mac_config)
else:
logging.warning("unknown emane link model: %s", emane_model)
logger.warning("unknown emane link model: %s", emane_model)
continue
logging.info("monitoring links nem(%s) model(%s)", nem_id, emane_model)
logger.info("monitoring links nem(%s) model(%s)", nem_id, emane_model)
loss_table.mac_id = mac_id
self.nems[nem_id] = loss_table
@ -138,12 +140,12 @@ class EmaneClient:
def handle_tdma(self, config: Dict[str, Tuple]):
pcr = config["pcrcurveuri"][0][0]
logging.debug("tdma pcr: %s", pcr)
logger.debug("tdma pcr: %s", pcr)
def handle_80211(self, config: Dict[str, Tuple]) -> LossTable:
unicastrate = config["unicastrate"][0][0]
pcr = config["pcrcurveuri"][0][0]
logging.debug("80211 pcr: %s", pcr)
logger.debug("80211 pcr: %s", pcr)
tree = etree.parse(pcr)
root = tree.getroot()
table = root.find("table")
@ -159,7 +161,7 @@ class EmaneClient:
def handle_rfpipe(self, config: Dict[str, Tuple]) -> LossTable:
pcr = config["pcrcurveuri"][0][0]
logging.debug("rfpipe pcr: %s", pcr)
logger.debug("rfpipe pcr: %s", pcr)
tree = etree.parse(pcr)
root = tree.getroot()
table = root.find("table")
@ -192,7 +194,7 @@ class EmaneLinkMonitor:
self.link_timeout = int(self.emane_manager.get_config("link_timeout"))
self.initialize()
if not self.clients:
logging.info("no valid emane models to monitor links")
logger.info("no valid emane models to monitor links")
return
self.scheduler = sched.scheduler()
self.scheduler.enter(0, 0, self.check_links)
@ -228,7 +230,7 @@ class EmaneLinkMonitor:
client.check_links(self.links, self.loss_threshold)
except shell.ControlPortException:
if self.running:
logging.exception("link monitor error")
logger.exception("link monitor error")
# find new links
current_links = set(self.links.keys())

View file

@ -19,6 +19,8 @@ from core.errors import CoreError
from core.nodes.base import CoreNetworkBase, CoreNode
from core.nodes.interface import CoreInterface
logger = logging.getLogger(__name__)
if TYPE_CHECKING:
from core.emane.emanemodel import EmaneModel
from core.emulator.session import Session
@ -34,7 +36,7 @@ except ImportError:
from emanesh.events import LocationEvent
except ImportError:
LocationEvent = None
logging.debug("compatible emane python bindings not installed")
logger.debug("compatible emane python bindings not installed")
class EmaneNet(CoreNetworkBase):
@ -92,9 +94,7 @@ class EmaneNet(CoreNetworkBase):
def updatemodel(self, config: Dict[str, str]) -> None:
if not self.model:
raise CoreError(f"no model set to update for node({self.name})")
logging.info(
"node(%s) updating model(%s): %s", self.id, self.model.name, config
)
logger.info("node(%s) updating model(%s): %s", self.id, self.model.name, config)
self.model.update_config(config)
def setmodel(self, model: "WirelessModelType", config: Dict[str, str]) -> None:
@ -122,7 +122,7 @@ class EmaneNet(CoreNetworkBase):
nem_id = self.session.emane.get_nem_id(iface)
ifname = iface.localname
if nem_id is None:
logging.info("nemid for %s is unknown", ifname)
logger.info("nemid for %s is unknown", ifname)
return
node = iface.node
x, y, z = node.getposition()
@ -141,7 +141,7 @@ class EmaneNet(CoreNetworkBase):
:param iface: interface to set nem position for
"""
if self.session.emane.service is None:
logging.info("position service not available")
logger.info("position service not available")
return
position = self._nem_position(iface)
if position:
@ -160,7 +160,7 @@ class EmaneNet(CoreNetworkBase):
return
if self.session.emane.service is None:
logging.info("position service not available")
logger.info("position service not available")
return
event = LocationEvent()

View file

@ -11,6 +11,8 @@ from core.config import Configuration
from core.emane import emanemodel
from core.emulator.enumerations import ConfigDataTypes
logger = logging.getLogger(__name__)
class EmaneTdmaModel(emanemodel.EmaneModel):
# model name
@ -58,7 +60,7 @@ class EmaneTdmaModel(emanemodel.EmaneModel):
event_device = self.session.emane.event_device
# initiate tdma schedule
logging.info(
logger.info(
"setting up tdma schedule: schedule(%s) device(%s)", schedule, event_device
)
args = f"emaneevent-tdmaschedule -i {event_device} {schedule}"