aboutsummaryrefslogtreecommitdiffstats
path: root/resources/tools/telemetry/bundle_vpp.py
diff options
context:
space:
mode:
Diffstat (limited to 'resources/tools/telemetry/bundle_vpp.py')
-rw-r--r--resources/tools/telemetry/bundle_vpp.py38
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
)