X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Ftools%2Ftelemetry%2Fbundle_vpp.py;fp=resources%2Ftools%2Ftelemetry%2Fbundle_vpp.py;h=315360f63bf904ddf19a6457106ecdf2415e94f0;hp=64c4c5e4f8dca89c2ea6accdba4fc3d62637d78a;hb=e2b220824914769fd9f4b245038cc31fb8425b18;hpb=58a35815c1b68fc5b9590aad0d5942b0508a63d4 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 )