From ab37a4f615ba2df3eedf7bbb988aa37779d415f5 Mon Sep 17 00:00:00 2001 From: Ryan Blakley Date: Thu, 19 Jan 2023 16:17:27 -0500 Subject: [PATCH] feat: Add arg to capture skips in the broker * Added the --show-skips cli arg to trigger SkipComponents to be captured in the broker for troubleshooting purposes. Signed-off-by: Ryan Blakley --- insights/__init__.py | 11 ++++++++--- insights/core/dr.py | 10 ++++++++-- insights/core/plugins.py | 10 +++++++--- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/insights/__init__.py b/insights/__init__.py index 16247cb42e..58910f7e8b 100644 --- a/insights/__init__.py +++ b/insights/__init__.py @@ -266,9 +266,8 @@ def _load_context(path): return dr.get_component(path) -def run(component=None, root=None, print_summary=False, - context=None, inventory=None, print_component=None): - +def run(component=None, root=None, print_summary=False, context=None, inventory=None, print_component=None, + store_skips=False): args = None formatters = None @@ -293,6 +292,8 @@ def run(component=None, root=None, print_summary=False, p.add_argument("--context", help="Execution Context. Defaults to HostContext if an archive isn't passed.") p.add_argument("--no-load-default", help="Don't load the default plugins.", action="store_true") p.add_argument("--parallel", help="Execute rules in parallel.", action="store_true") + p.add_argument("--show-skips", help="Capture skips in the broker for troubleshooting.", action="store_true", + default=False) p.add_argument("--tags", help="Expression to select rules by tag.") class Args(object): @@ -385,6 +386,10 @@ class Args(object): graph = dr.COMPONENTS[dr.GROUPS.single] broker = dr.Broker() + if args: + broker.store_skips = args.show_skips + else: + broker.store_skips = store_skips if args and args.bare: ctx = ExecutionContext() # dummy context that no spec depend on. needed for filters to work diff --git a/insights/core/dr.py b/insights/core/dr.py index a90c76aeb2..ee8ff64744 100644 --- a/insights/core/dr.py +++ b/insights/core/dr.py @@ -809,6 +809,7 @@ class Broker(object): :func:`time.time`. For components that produce multiple instances, the execution time here is the sum of their individual execution times. + store_skips (bool): Weather to store skips in the broker or not. """ def __init__(self, seed_broker=None): self.instances = dict(seed_broker.instances) if seed_broker else {} @@ -816,6 +817,7 @@ def __init__(self, seed_broker=None): self.exceptions = defaultdict(list) self.tracebacks = {} self.exec_times = {} + self.store_skips = False self.observers = defaultdict(set) if seed_broker is not None: @@ -1045,8 +1047,12 @@ def run_components(ordered_components, components, broker): except ParseException as pe: log.warning(pe) broker.add_exception(component, pe, traceback.format_exc()) - except SkipComponent: - pass + except SkipComponent as sc: + if broker.store_skips: + log.warning(sc) + broker.add_exception(component, sc, traceback.format_exc()) + else: + pass except Exception as ex: tb = traceback.format_exc() log.warning(tb) diff --git a/insights/core/plugins.py b/insights/core/plugins.py index adaf13d778..864194fab7 100644 --- a/insights/core/plugins.py +++ b/insights/core/plugins.py @@ -167,14 +167,18 @@ def invoke(self, broker): r = self.component(d) if r is not None: results.append(r) - except SkipComponent: - pass except ContentException as ce: log.debug(ce) broker.add_exception(self.component, ce, traceback.format_exc()) if not self.continue_on_error: exception = True break + except SkipComponent as sc: + if broker.store_skips: + log.warning(sc) + broker.add_exception(component, sc, traceback.format_exc()) + else: + pass except CalledProcessError as cpe: log.debug(cpe) broker.add_exception(self.component, cpe, traceback.format_exc()) @@ -183,7 +187,7 @@ def invoke(self, broker): break except Exception as ex: tb = traceback.format_exc() - log.warn(tb) + log.warning(tb) broker.add_exception(self.component, ex, tb) if not self.continue_on_error: exception = True