PAPI stats: Use single dump 84/32284/1
authorVratko Polak <vrpolak@cisco.com>
Wed, 12 May 2021 08:56:45 +0000 (10:56 +0200)
committerVratko Polak <vrpolak@cisco.com>
Wed, 12 May 2021 08:56:45 +0000 (10:56 +0200)
There is only one call site (VppCounters.vpp_show_runtime)
which uses a single path ("^/sys/node"),
so we do not need to split the replies anymore.
This simplifies investigating bugs related to VPP stats.

Change-Id: Idfc029c795cd78cf6d41c2f461f7844aed53410d
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
resources/libraries/python/PapiExecutor.py
resources/tools/papi/vpp_papi_provider.py

index 76d7daf..7bfc861 100644 (file)
@@ -872,6 +872,8 @@ class PapiExecutor:
       is "stats".
     - the second parameter must be 'path' as it is used by PapiExecutor
       method 'add'.
+    - even if the parameter contains multiple paths, there is only one
+      reply item (for each .add).
     """
 
     def __init__(self, node):
index c9a4344..ff52de5 100755 (executable)
@@ -209,6 +209,8 @@ def process_json_request(args):
 def process_stats(args):
     """Process the VPP Stats.
 
+    The reply contains single item covering all paths.
+
     :param args: Command line arguments passed to VPP PAPI Provider.
     :type args: ArgumentParser
     :returns: JSON formatted string.
@@ -221,19 +223,9 @@ def process_stats(args):
     except Exception as err:
         raise RuntimeError(f"PAPI init failed:\n{err!r}")
 
-    json_data = json.loads(args.data)
-
-    reply = list()
-
-    for path in json_data:
-        # The ls method can match multiple patterns,
-        # but we feed it one path at a time anyway, because the caller
-        # expect results in a list, one item per path.
-        # Most VPP versions understand a string is a single pattern,
-        # but some blindly iterate (as if it was a list of chars).
-        directory = stats.ls([path])
-        data = stats.dump(directory)
-        reply.append(data)
+    paths = json.loads(args.data)
+    directory = stats.ls(paths)
+    reply = [stats.dump(directory)]
 
     try:
         return json.dumps(reply)