From 356824fa3ccd1adb96fe6834458923aa9536517a Mon Sep 17 00:00:00 2001 From: Paul Vinciguerra Date: Sat, 5 Jan 2019 19:37:27 -0800 Subject: [PATCH] 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 --- src/vpp-api/client/stat_client.c | 8 ++++---- src/vpp-api/python/vpp_papi/vpp_stats.py | 28 +++++++++++++++++++++++++--- 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) -- 2.16.6