Skip to content

Commit e992186

Browse files
committed
Enhance logging and error handling
1 parent 34d37db commit e992186

File tree

6 files changed

+44
-24
lines changed

6 files changed

+44
-24
lines changed

development/base_configuration.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,20 @@
114114

115115
# Enable custom logging. Please see the Django documentation for detailed guidance on configuring custom logs:
116116
# https://docs.djangoproject.com/en/1.11/topics/logging/
117-
LOGGING = {}
117+
LOGGING = {
118+
"version": 1,
119+
"disable_existing_loggers": False,
120+
"formatters": {"rq_console": {"format": "%(asctime)s %(message)s", "datefmt": "%H:%M:%S",},},
121+
"handlers": {
122+
"rq_console": {
123+
"level": "DEBUG",
124+
"class": "rq.utils.ColorizingStreamHandler",
125+
"formatter": "rq_console",
126+
"exclude": ["%(asctime)s"],
127+
},
128+
},
129+
"loggers": {"rq.worker": {"handlers": ["rq_console"], "level": "DEBUG"},},
130+
}
118131

119132
# Setting this to True will permit only authenticated users to access any part of NetBox. By default, anonymous users
120133
# are permitted to access most data in NetBox (excluding secrets) but not make any changes.

netbox_onboarding/netbox_keeper.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
from .constants import NETMIKO_TO_NAPALM_STATIC
2626
from .exceptions import OnboardException
2727

28+
logger = logging.getLogger("rq.worker")
29+
2830
PLUGIN_SETTINGS = settings.PLUGINS_CONFIG["netbox_onboarding"]
2931

3032

@@ -149,9 +151,9 @@ def ensure_device_type(
149151

150152
slug = self.netdev_model
151153
if self.netdev_model and re.search(r"[^a-zA-Z0-9\-_]+", slug):
152-
logging.warning("device model is not sluggable: %s", slug)
154+
logger.warning("device model is not sluggable: %s", slug)
153155
self.netdev_model = slug.replace(" ", "-")
154-
logging.warning("device model is now: %s", self.netdev_model)
156+
logger.warning("device model is now: %s", self.netdev_model)
155157

156158
# Use declared device type or auto-discovered model
157159
nb_device_type_text = self.netdev_nb_device_type_slug or self.netdev_model
@@ -172,7 +174,7 @@ def ensure_device_type(
172174

173175
except DeviceType.DoesNotExist:
174176
if create_device_type:
175-
logging.info("CREATE: device-type: %s", self.netdev_model)
177+
logger.info("CREATE: device-type: %s", self.netdev_model)
176178
self.nb_device_type = DeviceType.objects.create(
177179
slug=nb_device_type_slug, model=nb_device_type_slug.upper(), manufacturer=self.nb_manufacturer,
178180
)
@@ -237,7 +239,7 @@ def ensure_device_platform(self, create_platform_if_missing=PLUGIN_SETTINGS["cre
237239

238240
self.nb_platform = Platform.objects.get(slug=self.netdev_nb_platform_slug)
239241

240-
logging.info("PLATFORM: found in NetBox %s", self.netdev_nb_platform_slug)
242+
logger.info("PLATFORM: found in NetBox %s", self.netdev_nb_platform_slug)
241243

242244
except Platform.DoesNotExist:
243245
if create_platform_if_missing:
@@ -278,7 +280,7 @@ def ensure_device_instance(self, default_status=PLUGIN_SETTINGS["default_device_
278280
if self.netdev_mgmt_ip_address:
279281
onboarded_device = Device.objects.get(primary_ip4__address__net_host=self.netdev_mgmt_ip_address)
280282
except Device.DoesNotExist:
281-
logging.info(
283+
logger.info(
282284
"Could not find existing NetBox device for requested primary IP address (%s)",
283285
self.netdev_mgmt_ip_address,
284286
)
@@ -291,7 +293,7 @@ def ensure_device_instance(self, default_status=PLUGIN_SETTINGS["default_device_
291293
if onboarded_device:
292294
# Construct lookup arguments if onboarded device already exists in NetBox
293295

294-
logging.info(
296+
logger.info(
295297
"Found existing NetBox device (%s) for requested primary IP address (%s)",
296298
onboarded_device.name,
297299
self.netdev_mgmt_ip_address,
@@ -328,9 +330,9 @@ def ensure_device_instance(self, default_status=PLUGIN_SETTINGS["default_device_
328330
self.device, created = Device.objects.update_or_create(**lookup_args)
329331

330332
if created:
331-
logging.info("CREATED device: %s", self.netdev_hostname)
333+
logger.info("CREATED device: %s", self.netdev_hostname)
332334
else:
333-
logging.info("GOT/UPDATED device: %s", self.netdev_hostname)
335+
logger.info("GOT/UPDATED device: %s", self.netdev_hostname)
334336

335337
except Device.MultipleObjectsReturned:
336338
raise OnboardException(
@@ -350,7 +352,7 @@ def ensure_primary_ip(self):
350352
)
351353

352354
if created or not self.nb_primary_ip in self.nb_mgmt_ifname.ip_addresses.all():
353-
logging.info("ASSIGN: IP address %s to %s", self.nb_primary_ip.address, self.nb_mgmt_ifname.name)
355+
logger.info("ASSIGN: IP address %s to %s", self.nb_primary_ip.address, self.nb_mgmt_ifname.name)
354356
self.nb_mgmt_ifname.ip_addresses.add(self.nb_primary_ip)
355357
self.nb_mgmt_ifname.save()
356358

netbox_onboarding/netdev_keeper.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
from .exceptions import OnboardException
3434

3535
logger = logging.getLogger("rq.worker")
36-
logger.setLevel(logging.DEBUG)
3736

3837
PLUGIN_SETTINGS = settings.PLUGINS_CONFIG["netbox_onboarding"]
3938

@@ -266,15 +265,26 @@ def get_onboarding_facts(self):
266265
logger.info("COLLECT: device interface IPs")
267266
self.ip_ifs = napalm_device.get_interfaces_ip()
268267

269-
try:
270-
module_name = PLUGIN_SETTINGS["onboarding_extensions_map"].get(self.napalm_driver)
271-
if module_name:
268+
module_name = PLUGIN_SETTINGS["onboarding_extensions_map"].get(self.napalm_driver)
269+
270+
if module_name:
271+
try:
272272
module = importlib.import_module(module_name)
273273
driver_addon_class = module.OnboardingDriverExtensions(napalm_device=napalm_device)
274274
self.onboarding_class = driver_addon_class.onboarding_class
275275
self.driver_addon_result = driver_addon_class.ext_result
276-
except ImportError as exc:
277-
logger.info("No onboarding extension found for driver %s", self.napalm_driver)
276+
except ModuleNotFoundError as exc:
277+
raise OnboardException(
278+
reason="fail-general",
279+
message=f"ERROR: ModuleNotFoundError: Onboarding extension for napalm driver {self.napalm_driver} configured but can not be imported per configuration",
280+
)
281+
except ImportError as exc:
282+
raise OnboardException(reason="fail-general", message="ERROR: ImportError: %s" % exc.args[0])
283+
else:
284+
logger.info(
285+
"INFO: No onboarding extension defined for napalm driver %s, using default napalm driver",
286+
self.napalm_driver,
287+
)
278288

279289
except ConnectionException as exc:
280290
raise OnboardException(reason="fail-login", message=exc.args[0])

netbox_onboarding/template_content.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,7 @@ def right_page(self):
2525
"""Show table on right side of view."""
2626
onboarding = OnboardingDevice.objects.filter(device=self.context["object"]).first()
2727

28-
if not onboarding:
29-
return ""
30-
31-
if not onboarding.enabled:
28+
if not onboarding or not onboarding.enabled:
3229
return ""
3330

3431
status = onboarding.status

netbox_onboarding/views.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@
2525
from .models import OnboardingTask
2626
from .tables import OnboardingTaskTable, OnboardingTaskFeedBulkTable
2727

28-
log = logging.getLogger("rq.worker")
29-
log.setLevel(logging.DEBUG)
28+
logger = logging.getLogger("rq.worker")
3029

3130

3231
if NETBOX_RELEASE_CURRENT < NETBOX_RELEASE_29:

netbox_onboarding/worker.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
from .onboard import OnboardingManager
2727

2828
logger = logging.getLogger("rq.worker")
29-
logger.setLevel(logging.DEBUG)
3029

3130

3231
@job("default")
@@ -80,7 +79,7 @@ def onboard_device(task_id, credentials): # pylint: disable=too-many-statements
8079
if onboarded_device:
8180
ot.created_device = onboarded_device
8281

83-
logger.error("Onboarding Error - OnboardException")
82+
logger.error("%s", exc)
8483
ot.status = OnboardingStatusChoices.STATUS_FAILED
8584
ot.failed_reason = exc.reason
8685
ot.message = exc.message

0 commit comments

Comments
 (0)