aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Vinciguerra <pvinci@vinciconsulting.com>2019-01-05 19:37:27 -0800
committerFlorin Coras <florin.coras@gmail.com>2019-01-06 23:59:50 +0000
commit356824fa3ccd1adb96fe6834458923aa9536517a (patch)
tree2c37e1b26136fdefd512c39716e4644c4a4d0b16 /src
parent3c8e14684d32c19529c471a747bc9693a2801335 (diff)
vpp-api: Add context to VPPStatsIOError.
* Provide context information and return meaningful information. VPPStatsIOError: Stat segment client connection returned: -2 Stat client socket open but couldn't connect. Change-Id: I14ea35c58452a2cb7598a7efd136f0c7e1f5743a Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
Diffstat (limited to 'src')
-rw-r--r--src/vpp-api/client/stat_client.c8
-rw-r--r--src/vpp-api/python/vpp_papi/vpp_stats.py28
2 files changed, 29 insertions, 7 deletions
diff --git a/src/vpp-api/client/stat_client.c b/src/vpp-api/client/stat_client.c
index bb7f240a753..2cf53d5d0af 100644
--- a/src/vpp-api/client/stat_client.c
+++ b/src/vpp-api/client/stat_client.c
@@ -124,14 +124,14 @@ stat_segment_connect_r (const char *socket_name, stat_client_main_t * sm)
0)
{
close (sock);
- return -1;
+ return -2;
}
if ((mfd = recv_fd (sock)) < 0)
{
close (sock);
fprintf (stderr, "Receiving file descriptor failed\n");
- return -1;
+ return -3;
}
close (sock);
@@ -142,13 +142,13 @@ stat_segment_connect_r (const char *socket_name, stat_client_main_t * sm)
if (fstat (mfd, &st) == -1)
{
perror ("mmap fstat failed");
- return -1;
+ return -4;
}
if ((memaddr =
mmap (NULL, st.st_size, PROT_READ, MAP_SHARED, mfd, 0)) == MAP_FAILED)
{
perror ("mmap map failed");
- return -1;
+ return -5;
}
sm->memory_size = st.st_size;
diff --git a/src/vpp-api/python/vpp_papi/vpp_stats.py b/src/vpp-api/python/vpp_papi/vpp_stats.py
index 06daaf86f50..0afed26215d 100644
--- a/src/vpp-api/python/vpp_papi/vpp_stats.py
+++ b/src/vpp-api/python/vpp_papi/vpp_stats.py
@@ -128,7 +128,6 @@ def stat_entry_to_python(api, e):
# Scalar index
if e.type == 1:
return e.scalar_value
- return None
if e.type == 2:
return simple_counter_vec_list(api, e.simple_counter_vec)
if e.type == 3:
@@ -139,7 +138,30 @@ def stat_entry_to_python(api, e):
class VPPStatsIOError(IOError):
- pass
+ message = "Stat segment client connection returned: " \
+ "%(retval)s %(strerror)s."
+
+ strerror = {-1: "Stat client couldn't open socket",
+ -2: "Stat client socket open but couldn't connect",
+ -3: "Receiving file descriptor failed",
+ -4: "mmap fstat failed",
+ -5: "mmap map failed"
+ }
+
+ def __init__(self, message=None, **kwargs):
+ if 'retval' in kwargs:
+ self.retval = kwargs['retval']
+ kwargs['strerror'] = self.strerror[int(self.retval)]
+
+ if not message:
+ try:
+ message = self.message % kwargs
+ except Exception as e:
+ message = self.message
+ else:
+ message = message % kwargs
+
+ super(VPPStatsIOError, self).__init__(message)
class VPPStatsClientLoadError(RuntimeError):
@@ -168,7 +190,7 @@ class VPPStats(object):
break
if rv != 0:
- raise VPPStatsIOError()
+ raise VPPStatsIOError(retval=rv)
def heartbeat(self):
return self.api.stat_segment_heartbeat_r(self.client)