diff options
Diffstat (limited to 'osprofiler/notifier.py')
-rw-r--r-- | osprofiler/notifier.py | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/osprofiler/notifier.py b/osprofiler/notifier.py index 3bd4412..8b909f0 100644 --- a/osprofiler/notifier.py +++ b/osprofiler/notifier.py @@ -13,16 +13,21 @@ # License for the specific language governing permissions and limitations # under the License. +import logging + from osprofiler.drivers import base +LOG = logging.getLogger(__name__) + + def _noop_notifier(info, context=None): """Do nothing on notify().""" # NOTE(boris-42): By default we are using noop notifier. __notifier = _noop_notifier -__driver_cache = {} +__notifier_cache = {} # map: connection-string -> notifier def notify(info): @@ -54,14 +59,24 @@ def create(connection_string, *args, **kwargs): :param connection_string: connection string which specifies the storage driver for notifier - :param *args: args that will be passed to the driver's __init__ method - :param **kwargs: kwargs that will be passed to the driver's __init__ method + :param args: args that will be passed to the driver's __init__ method + :param kwargs: kwargs that will be passed to the driver's __init__ method :returns: Callable notifier method - :raises TypeError: In case of invalid name of plugin raises TypeError """ - global __driver_cache - if connection_string not in __driver_cache: - __driver_cache[connection_string] = base.get_driver(connection_string, - *args, - **kwargs).notify - return __driver_cache[connection_string] + global __notifier_cache + if connection_string not in __notifier_cache: + try: + driver = base.get_driver(connection_string, *args, **kwargs) + __notifier_cache[connection_string] = driver.notify + LOG.info("osprofiler is enabled with connection string: %s", + connection_string) + except Exception: + LOG.exception("Could not initialize driver for connection string " + "%s, osprofiler is disabled", connection_string) + __notifier_cache[connection_string] = _noop_notifier + + return __notifier_cache[connection_string] + + +def clear_notifier_cache(): + __notifier_cache.clear() |