diff options
Diffstat (limited to 'resources/tools/telemetry/bundle_vpp.py')
-rw-r--r-- | resources/tools/telemetry/bundle_vpp.py | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/resources/tools/telemetry/bundle_vpp.py b/resources/tools/telemetry/bundle_vpp.py index 64c4c5e4f8..315360f63b 100644 --- a/resources/tools/telemetry/bundle_vpp.py +++ b/resources/tools/telemetry/bundle_vpp.py @@ -1,4 +1,4 @@ -# Copyright (c) 2021 Cisco and/or its affiliates. +# Copyright (c) 2022 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -20,7 +20,7 @@ import struct import sys from vpp_papi.vpp_papi import VPPApiClient as vpp_class - +from .constants import Constants M_RUN_THREAD = ( r"Thread\s" @@ -209,8 +209,8 @@ class BundleVpp: try: self.obj.connect(name=u"telemetry") except (ConnectionRefusedError, OSError): - getLogger(__name__).error(u"Cannot connect to VPP!") - sys.exit(1) + getLogger("console_stderr").error(u"Could not connect to VPP!") + sys.exit(Constants.err_vpp_connect) for command in self.code.splitlines(): api_name = u"cli_inband" @@ -223,7 +223,11 @@ class BundleVpp: """ Detach from VPP. """ - self.obj.disconnect() + try: + self.obj.disconnect() + except (ConnectionRefusedError, OSError): + getLogger("console_stderr").error(u"Could not disconnect from VPP!") + sys.exit(Constants.err_vpp_disconnect) def fetch_data(self): """ @@ -234,8 +238,12 @@ class BundleVpp: papi_fn = getattr(self.obj.api, command[u"api_name"]) getLogger(__name__).info(command[u"api_args"][u"cmd"]) replies = papi_fn(**command[u"api_args"]) - except (AttributeError, IOError, struct.error) as err: - raise AssertionError(err) + except (AssertionError, AttributeError, IOError, struct.error): + getLogger("console_stderr").error( + f"Failed when executing command: " + f"{command['api_args']['cmd']}" + ) + sys.exit(Constants.err_vpp_execute) if not isinstance(replies, list): replies = [replies] @@ -253,12 +261,22 @@ class BundleVpp: Post process command reply. """ for command in zip(self.api_command_list, self.api_replies_list): - self_fn = command[0][u"api_args"][u"cmd"] + self_fn = command[0][u"api_args"][u"cmd"].replace(u" ", u"_") + self_method_list = [meth for meth in dir(self) + if callable(getattr(self, meth)) and + meth.startswith('__') is False] + if self_fn not in self_method_list: + continue try: - self_fn = getattr(self, self_fn.replace(u" ", u"_")) + self_fn = getattr(self, self_fn) self_fn(command[1].reply) except AttributeError: pass + except (KeyError, ValueError, TypeError) as e: + getLogger("console_stderr").error( + f"Failed when processing data. Error message {e}" + ) + sys.exit(Constants.err_telemetry_process) def show_interface(self, reply): """ @@ -441,7 +459,7 @@ class BundleVpp: item[u"name"] = metric labels[u"version"] = version item[u"labels"] = labels - item[u"value"] = 1.0 + item[u"value"] = {} self.serializer.serialize( metric=metric, labels=labels, item=item ) |