From 6ad421ec0a37063a65869a9c80c782bfc9332639 Mon Sep 17 00:00:00 2001
From: Erik Reid <erik.reid@geant.org>
Date: Thu, 3 Jan 2019 16:00:48 +0100
Subject: [PATCH] configure logging levels from environment vars

---
 inventory_provider/app.py          |  8 ++------
 inventory_provider/environment.py  | 24 ++++++++++++++++++++++++
 inventory_provider/tasks/app.py    |  9 ---------
 inventory_provider/tasks/worker.py | 25 ++++++++++++++++++-------
 4 files changed, 44 insertions(+), 22 deletions(-)

diff --git a/inventory_provider/app.py b/inventory_provider/app.py
index 7e55c591..557daa6a 100644
--- a/inventory_provider/app.py
+++ b/inventory_provider/app.py
@@ -5,13 +5,9 @@ import logging
 import sys
 
 import inventory_provider
-from inventory_provider import constants
+from inventory_provider import environment
 
-logging.basicConfig(stream=sys.stderr, level=logging.WARNING)
-logging.getLogger(constants.SNMP_LOGGER_NAME).setLevel(logging.DEBUG)
-logging.getLogger(constants.TASK_LOGGER_NAME).setLevel(logging.INFO)
-logging.getLogger(constants.JUNIPER_LOGGER_NAME).setLevel(logging.DEBUG)
-logging.getLogger(constants.DATABASE_LOGGER_NAME).setLevel(logging.DEBUG)
+environment.setup_logging()
 
 app = inventory_provider.create_app()
 
diff --git a/inventory_provider/environment.py b/inventory_provider/environment.py
index e69de29b..f0be2755 100644
--- a/inventory_provider/environment.py
+++ b/inventory_provider/environment.py
@@ -0,0 +1,24 @@
+import logging, os, sys
+from inventory_provider import constants
+
+
+def _level_from_env(var_name, default_level=logging.INFO):
+    level_str = os.getenv(var_name, logging.getLevelName(default_level))
+    numeric_level = getattr(logging, level_str.upper(), default_level)
+    logging.debug('setting %s logging level to %s'
+                  % (var_name, logging.getLevelName(numeric_level)))
+    return numeric_level
+
+
+def setup_logging():
+    logging.basicConfig(
+        stream=sys.stderr,
+        level=_level_from_env('DEFAULT_LOGGING', logging.INFO))
+    logging.getLogger(constants.SNMP_LOGGER_NAME).setLevel(
+        _level_from_env('SNMP_LOGGING', logging.INFO))
+    logging.getLogger(constants.TASK_LOGGER_NAME).setLevel(
+        _level_from_env('TASK_LOGGING', logging.INFO))
+    logging.getLogger(constants.JUNIPER_LOGGER_NAME).setLevel(
+        _level_from_env('JUNIPER_LOGGING', logging.INFO))
+    logging.getLogger(constants.DATABASE_LOGGER_NAME).setLevel(
+        _level_from_env('DATABASE_LOGGING', logging.INFO))
diff --git a/inventory_provider/tasks/app.py b/inventory_provider/tasks/app.py
index a4a68d2f..15a42327 100644
--- a/inventory_provider/tasks/app.py
+++ b/inventory_provider/tasks/app.py
@@ -1,13 +1,4 @@
-import logging
-import sys
-from inventory_provider import constants
 from celery import Celery
 
-logging.basicConfig(stream=sys.stderr, level=logging.WARNING)
-logging.getLogger(constants.SNMP_LOGGER_NAME).setLevel(logging.DEBUG)
-logging.getLogger(constants.TASK_LOGGER_NAME).setLevel(logging.DEBUG)
-logging.getLogger(constants.JUNIPER_LOGGER_NAME).setLevel(logging.DEBUG)
-logging.getLogger(constants.DATABASE_LOGGER_NAME).setLevel(logging.DEBUG)
-
 app = Celery("app")
 app.config_from_object("inventory_provider.tasks.config")
diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index 3458f9e2..889097b8 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -1,21 +1,20 @@
 import json
 import logging
+import os
+import sys
 
 from celery import bootsteps, Task
 import redis
-
 from lxml import etree
 
 from inventory_provider.tasks.app import app
 from inventory_provider import config
-from inventory_provider import snmp, juniper
 from inventory_provider import constants
+from inventory_provider import environment
+from inventory_provider import snmp
+from inventory_provider import juniper
 
-logging.basicConfig(level=logging.WARNING)
-logging.getLogger(constants.SNMP_LOGGER_NAME).setLevel(logging.INFO)
-logging.getLogger(constants.TASK_LOGGER_NAME).setLevel(logging.INFO)
-logging.getLogger(constants.JUNIPER_LOGGER_NAME).setLevel(logging.DEBUG)
-logging.getLogger(constants.DATABASE_LOGGER_NAME).setLevel(logging.DEBUG)
+environment.setup_logging()
 
 
 class InventoryTask(Task):
@@ -78,6 +77,10 @@ app.steps['worker'].add(WorkerArgs)
 
 @app.task(bind=InventoryTask)
 def snmp_refresh_interfaces(self, hostname, community):
+    logger = logging.getLogger(constants.TASK_LOGGER_NAME)
+    logger.debug('STARTING: snmp_refresh_interfaces(%r, %r)'
+                 % (hostname, community))
+
     InventoryTask.save_key_json(
         hostname,
         "snmp-interfaces",
@@ -86,10 +89,18 @@ def snmp_refresh_interfaces(self, hostname, community):
             community,
             InventoryTask.config)))
 
+    logger.debug('FINISHED: snmp_refresh_interfaces(%r, %r)'
+                 % (hostname, community))
+
 
 @app.task(bind=InventoryTask)
 def netconf_refresh_config(self, hostname):
+    logger = logging.getLogger(constants.TASK_LOGGER_NAME)
+    logger.debug('STARTING: netconf_refresh_config(%r)' % hostname)
+
     InventoryTask.save_key_etree(
         hostname,
         "netconf",
         juniper.load_config(hostname, InventoryTask.config["ssh"]))
+
+    logger.debug('FINISHED: netconf_refresh_config(%r)' % hostname)
-- 
GitLab