diff options
| -rw-r--r-- | python/vyos/airbag.py | 17 | ||||
| -rw-r--r-- | python/vyos/util.py | 14 | 
2 files changed, 27 insertions, 4 deletions
diff --git a/python/vyos/airbag.py b/python/vyos/airbag.py index 6698aa404..b7838d8a2 100644 --- a/python/vyos/airbag.py +++ b/python/vyos/airbag.py @@ -26,6 +26,17 @@ from vyos.version import get_full_version_data  DISABLE = False +_noteworthy = [] + +def noteworthy(msg): +    """ +    noteworthy can be use to take note things which we may not want to +    report to the user may but be worth including in bug report +    if something goes wrong later on +    """ +    _noteworthy.append(msg) + +  # emulate a file object  class _IO(object):      def __init__(self, std, log): @@ -58,11 +69,16 @@ def bug_report(dtype, value, trace):      information = get_full_version_data()      trace = '\n'.join(format_exception(dtype, value, trace)).replace('\n\n','\n') +    note = '' +    if _noteworthy: +        note = 'noteworthy:\n' +        note += '\n'.join(_noteworthy)      information.update({          'date': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),          'trace': trace,          'instructions': COMMUNITY if 'rolling' in get_version() else SUPPORTED, +        'note': note,      })      sys.stdout.write(INTRO.format(**information)) @@ -145,6 +161,7 @@ Hardware S/N:     {hardware_serial}  Hardware UUID:    {hardware_uuid}  {trace} +{note}  """  INTRO = """\ diff --git a/python/vyos/util.py b/python/vyos/util.py index 8430799a1..504d36ef8 100644 --- a/python/vyos/util.py +++ b/python/vyos/util.py @@ -56,6 +56,7 @@ def popen(command, flag='', shell=None, input=None, timeout=None, env=None,      to discard stdout and get stderr: popen('command', stdout=DEVNUL, stderr=PIPE)      """      from vyos import debug +    from vyos import airbag      # log if the flag is set, otherwise log if command is set      if not debug.enabled(flag):          flag = 'command' @@ -93,14 +94,19 @@ def popen(command, flag='', shell=None, input=None, timeout=None, env=None,      str_out = pipe_out.decode(decode).replace('\r\n', '\n').strip()      str_err = pipe_err.decode(decode).replace('\r\n', '\n').strip() +    out_msg = f"returned (out):\n{str_out}"      if str_out: -        ret_msg = f"returned (out):\n{str_out}" -        debug.message(ret_msg, flag) +        debug.message(out_msg, flag)      if str_err: -        ret_msg = f"returned (err):\n{str_err}" +        err_msg = f"returned (err):\n{str_err}"          # this message will also be send to syslog via airbag -        debug.message(ret_msg, flag, destination=sys.stderr) +        debug.message(err_msg, flag, destination=sys.stderr) + +        # should something go wrong, report this too via airbag +        airbag.noteworthy(cmd_msg) +        airbag.noteworthy(out_msg) +        airbag.noteworthy(err_msg)      return str_out, p.returncode  | 
