Skip to content

Avoid traceback when visualizing only unsuccessful measurements

@asn had a configuration error related to port forwarding, and when he attempted to visualize those measurements, he received weird tracebacks:

  $ onionperf visualize --data onionperf.analysis.json.xz "Test Measurements"
  2020-11-03 15:51:31 1604411491.540736 [onionperf] [INFO] loading analysis results from /user/tmp/onionperf/analysis/onionperf.analysis.json.xz
  2020-11-03 15:51:31 1604411491.577864 [onionperf] [INFO] done!
  2020-11-03 15:51:31 1604411491.586845 [onionperf] [INFO] NumExpr defaulting to 8 threads.
  /user/.local/lib/python3.8/site-packages/OnionPerf-0.8-py3.8.egg/onionperf/visualization.py:251: UserWarning: Attempting to set identical left == right == -1e-06 results in singular transformations; automatically expanding.
  /user/.local/lib/python3.8/site-packages/OnionPerf-0.8-py3.8.egg/onionperf/visualization.py:251: UserWarning: Attempting to set identical left == right == -1e-06 results in singular transformations; automatically expanding.
  Traceback (most recent call last):
    File "/user/.local/bin/onionperf", line 4, in <module>
      __import__('pkg_resources').run_script('OnionPerf==0.8', 'onionperf')
    File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 650, in run_script
      self.require(requires)[0].run_script(script_name, ns)
    File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 1453, in run_script
      exec(script_code, namespace, namespace)
    File "/user/.local/lib/python3.8/site-packages/OnionPerf-0.8-py3.8.egg/EGG-INFO/scripts/onionperf", line 622, in <module>
    File "/user/.local/lib/python3.8/site-packages/OnionPerf-0.8-py3.8.egg/EGG-INFO/scripts/onionperf", line 382, in main
    File "/user/.local/lib/python3.8/site-packages/OnionPerf-0.8-py3.8.egg/EGG-INFO/scripts/onionperf", line 522, in visualize
    File "/user/.local/lib/python3.8/site-packages/OnionPerf-0.8-py3.8.egg/onionperf/visualization.py", line 48, in plot_all
    File "/user/.local/lib/python3.8/site-packages/OnionPerf-0.8-py3.8.egg/onionperf/visualization.py", line 205, in __plot_throughput_ecdf
    File "/user/.local/lib/python3.8/site-packages/OnionPerf-0.8-py3.8.egg/onionperf/visualization.py", line 235, in __draw_ecdf
    File "/usr/lib/python3/dist-packages/pandas/core/frame.py", line 5000, in dropna
      raise KeyError(list(np.compress(check, subset)))
  KeyError: ['mbps']


  $ onionperf visualize --data onionperf.analysis.json.xz "Test Measurements"
  2020-11-03 15:50:03 1604411403.946028 [onionperf] [INFO] loading analysis results from /user/tmp/onionperf/analysis/onionperf.analysis.json.xz
  2020-11-03 15:50:03 1604411403.976088 [onionperf] [INFO] done!
  Traceback (most recent call last):
    File "/user/.local/bin/onionperf", line 4, in <module>
      __import__('pkg_resources').run_script('OnionPerf==0.8', 'onionperf')
    File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 650, in run_script
      self.require(requires)[0].run_script(script_name, ns)
    File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 1453, in run_script
      exec(script_code, namespace, namespace)
    File "/user/.local/lib/python3.8/site-packages/OnionPerf-0.8-py3.8.egg/EGG-INFO/scripts/onionperf", line 622, in <module>
    File "/user/.local/lib/python3.8/site-packages/OnionPerf-0.8-py3.8.egg/EGG-INFO/scripts/onionperf", line 382, in main
    File "/user/.local/lib/python3.8/site-packages/OnionPerf-0.8-py3.8.egg/EGG-INFO/scripts/onionperf", line 522, in visualize
    File "/user/.local/lib/python3.8/site-packages/OnionPerf-0.8-py3.8.egg/onionperf/visualization.py", line 38, in plot_all
    File "/user/.local/lib/python3.8/site-packages/OnionPerf-0.8-py3.8.egg/onionperf/visualization.py", line 129, in __extract_data_frame
  KeyError: '44028'

We should add another check or two to ensure that there's something to visualize before running into those tracebacks. I'll give this a try today.