'Search all plugins for a function named ``hook_fn_prefix`` + ``hook_name``
and run it passing in args and kwargs.
Return values from each hook are returned in a dictionary keyed with the
plugin names.
:type   hook_name:  string
:param  hook_name:  name (suffix) of the hook to run
:rtype:             dictionary
:returns:           where keys are plugin.names and
values return values from the hooks'

def run_hook(self, hook_name, *args, **kwargs):

    hook_fn_name = ''.join([self.hook_fn_prefix, hook_name])
    returned = {}
    for (plugin_name, plugin) in self.plugins.items():
        hook_fn = getattr(plugin.module, hook_fn_name, None)
        if (hook_fn and hasattr(hook_fn, '__call__')):
            try:
                fn_returned = hook_fn(*args, **kwargs)
                returned[plugin.name] = fn_returned
            except Exception:
                log.exception('Hook    function    "%s"    failed    for    plugin    "%s"', hook_name, plugin.name)
    return returned
