diff --git a/modules/device.py b/modules/device.py index 83e6fdc..d90e505 100644 --- a/modules/device.py +++ b/modules/device.py @@ -7,6 +7,7 @@ from copy import deepcopy from logging import getLogger from os import sys from re import search +from venv import logger from zabbix_utils import APIRequestError @@ -19,6 +20,7 @@ from modules.exceptions import ( ) from modules.hostgroups import Hostgroup from modules.interface import ZabbixInterface +from modules.logging import get_logger from modules.tags import ZabbixTags from modules.tools import field_mapper, remove_duplicates from modules.usermacros import ZabbixUsermacros @@ -111,7 +113,7 @@ class PhysicalDevice: self.ip = self.cidr.split("/")[0] else: e = f"Host {self.name}: no primary IP." - self.logger.info(e) + self.logger.warning(e) raise SyncInventoryError(e) # Check if device has custom field for ZBX ID @@ -193,6 +195,7 @@ class PhysicalDevice: f"found for {self.nb.device_type.manufacturer.name}" f" - {self.nb.device_type.display}." ) + self.logger.warning(e) raise TemplateError(e) def get_templates_context(self): @@ -548,7 +551,7 @@ class PhysicalDevice: except APIRequestError as e: e = f"Host {self.name}: Couldn't create. Zabbix returned {str(e)}." self.logger.error(e) - raise SyncExternalError(e) from None + raise SyncExternalError(e) from e # Set NetBox custom field to hostID value. self.nb.custom_fields[device_cf] = int(self.zabbix_id) self.nb.save() @@ -556,8 +559,9 @@ class PhysicalDevice: self.logger.info(msg) self.create_journal_entry("success", msg) else: - e = f"Host {self.name}: Unable to add to Zabbix. Host already present." - self.logger.warning(e) + self.logger.error( + f"Host {self.name}: Unable to add to Zabbix. Host already present." + ) def createZabbixHostgroup(self, hostgroups): """ diff --git a/modules/logging.py b/modules/logging.py new file mode 100644 index 0000000..851ea4c --- /dev/null +++ b/modules/logging.py @@ -0,0 +1,36 @@ +import logging +from os import path + +logger = logging.getLogger("NetBox-Zabbix-sync") + + +def get_logger(): + """ + Return the logger for Netbox Zabbix Sync + """ + return logger + + +def setup_logger(): + """ + Prepare a logger with stream and file handlers + """ + # Set logging + lgout = logging.StreamHandler() + lgfile = logging.FileHandler( + path.join(path.dirname(path.realpath(__file__)), "sync.log") + ) + + logging.basicConfig( + format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", + level=logging.WARNING, + handlers=[lgout, lgfile], + ) + + +def set_log_levels(root_level, own_level): + """ + Configure log levels for root and Netbox-Zabbix-sync logger + """ + logging.getLogger().setLevel(root_level) + logger.setLevel(own_level) diff --git a/modules/tags.py b/modules/tags.py index 9dda995..441ebe2 100644 --- a/modules/tags.py +++ b/modules/tags.py @@ -76,7 +76,7 @@ class ZabbixTags: else: tag["tag"] = tag_name else: - self.logger.error(f"Tag {tag_name} is not a valid tag name, skipping.") + self.logger.warning(f"Tag {tag_name} is not a valid tag name, skipping.") return False if self.validate_value(tag_value): @@ -85,7 +85,7 @@ class ZabbixTags: else: tag["value"] = tag_value else: - self.logger.error( + self.logger.warning( f"Tag {tag_name} has an invalid value: '{tag_value}', skipping." ) return False diff --git a/netbox_zabbix_sync.py b/netbox_zabbix_sync.py index 75ad65c..2f30ccd 100755 --- a/netbox_zabbix_sync.py +++ b/netbox_zabbix_sync.py @@ -14,6 +14,7 @@ from zabbix_utils import APIRequestError, ProcessingError, ZabbixAPI from modules.device import PhysicalDevice from modules.exceptions import EnvironmentVarError, HostgroupError, SyncError +from modules.logging import get_logger, set_log_levels, setup_logger from modules.tools import convert_recordset, proxy_prepper from modules.virtual_machine import VirtualMachine @@ -40,19 +41,9 @@ except ModuleNotFoundError: ) sys.exit(1) -# Set logging -lgout = logging.StreamHandler() -lgfile = logging.FileHandler( - path.join(path.dirname(path.realpath(__file__)), "sync.log") -) -logging.basicConfig( - format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", - level=logging.WARNING, - handlers=[lgout, lgfile], -) - -logger = logging.getLogger("NetBox-Zabbix-sync") +setup_logger() +logger = get_logger() def main(arguments): @@ -60,13 +51,13 @@ def main(arguments): # pylint: disable=too-many-branches, too-many-statements # set environment variables if arguments.verbose: - logger.setLevel(logging.INFO) + set_log_levels(logging.WARNING, logging.INFO) if arguments.debug: - logger.setLevel(logging.DEBUG) + set_log_levels(logging.WARNING, logging.DEBUG) if arguments.debug_all: - logging.getLogger().setLevel(logging.DEBUG) + set_log_levels(logging.DEBUG, logging.DEBUG) if arguments.quiet: - logging.getLogger().setLevel(logging.ERROR) + set_log_levels(logging.ERROR, logging.ERROR) env_vars = ["ZABBIX_HOST", "NETBOX_HOST", "NETBOX_TOKEN"] if "ZABBIX_TOKEN" in environ: @@ -202,7 +193,7 @@ def main(arguments): # Delete device from Zabbix # and remove hostID from NetBox. vm.cleanup() - logger.info(f"VM {vm.name}: cleanup complete") + logger.debug(f"VM {vm.name}: cleanup complete") continue # Device has been added to NetBox # but is not in Activate state