summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoss Brattain <ross.b.brattain@intel.com>2017-10-11 15:16:53 -0700
committerRoss Brattain <ross.b.brattain@intel.com>2017-10-13 06:22:42 +0000
commitf05d3844c6f43310618b62d942442b2f05f91551 (patch)
tree959827f15921ff02aaac15c6aec3dce4fe99e5e7
parent204bed26efa57ca0de15534d9268bb4d61f7e0fa (diff)
ping: always save rtt data, influxdb ignore empty data
If the SLA was failing we were raising AssertionError and not storing the rtt in the data dict. This caused influxdb parse errors because the data was empty. Fixup influxdb to ignore records with no data, so we don't try to parse no data. Change the ping logic to always record the rtt result even if the SLA was not met. Also fixup ping logic in cases where ping does not return results. If SLA is defined use SLA * 10 otherwise use large float that doesn't break the grafana scale too much, maybe 999999 JIRA: YARDSTICK-809 Change-Id: Id2d51216581644a80e8c7b9aa98919a766008adf Signed-off-by: Ross Brattain <ross.b.brattain@intel.com> (cherry picked from commit af011b16787e8fd9fc6f918b1d1427dd1be562ec)
-rw-r--r--dashboard/opnfv_yardstick_tc037.json2
-rw-r--r--dashboard/opnfv_yardstick_tc038.json2
-rw-r--r--dashboard/opnfv_yardstick_tc070.json2
-rw-r--r--dashboard/opnfv_yardstick_tc071.json2
-rw-r--r--dashboard/opnfv_yardstick_tc072.json2
-rw-r--r--yardstick/benchmark/scenarios/networking/ping.py35
-rw-r--r--yardstick/dispatcher/influxdb.py4
7 files changed, 35 insertions, 14 deletions
diff --git a/dashboard/opnfv_yardstick_tc037.json b/dashboard/opnfv_yardstick_tc037.json
index 366210503..85f7908b6 100644
--- a/dashboard/opnfv_yardstick_tc037.json
+++ b/dashboard/opnfv_yardstick_tc037.json
@@ -846,7 +846,7 @@
],
"timeFrom": null,
"timeShift": null,
- "title": "Latency - Ping",
+ "title": "Latency - Ping, 999999 rtt indicates ping error",
"tooltip": {
"shared": true,
"sort": 0,
diff --git a/dashboard/opnfv_yardstick_tc038.json b/dashboard/opnfv_yardstick_tc038.json
index bf068d5a9..65b97d626 100644
--- a/dashboard/opnfv_yardstick_tc038.json
+++ b/dashboard/opnfv_yardstick_tc038.json
@@ -566,7 +566,7 @@
],
"timeFrom": null,
"timeShift": null,
- "title": "Latency - Ping",
+ "title": "Latency - Ping, 999999 rtt indicates ping error",
"tooltip": {
"shared": true,
"sort": 0,
diff --git a/dashboard/opnfv_yardstick_tc070.json b/dashboard/opnfv_yardstick_tc070.json
index 152ecca24..c57d4194e 100644
--- a/dashboard/opnfv_yardstick_tc070.json
+++ b/dashboard/opnfv_yardstick_tc070.json
@@ -914,7 +914,7 @@
],
"timeFrom": null,
"timeShift": null,
- "title": "Latency - Ping",
+ "title": "Latency - Ping, 999999 rtt indicates ping error",
"tooltip": {
"shared": true,
"sort": 0,
diff --git a/dashboard/opnfv_yardstick_tc071.json b/dashboard/opnfv_yardstick_tc071.json
index defd6fada..009e0a173 100644
--- a/dashboard/opnfv_yardstick_tc071.json
+++ b/dashboard/opnfv_yardstick_tc071.json
@@ -994,7 +994,7 @@
],
"timeFrom": null,
"timeShift": null,
- "title": "Latency - Ping",
+ "title": "Latency - Ping, 999999 rtt indicates ping error",
"tooltip": {
"shared": true,
"sort": 0,
diff --git a/dashboard/opnfv_yardstick_tc072.json b/dashboard/opnfv_yardstick_tc072.json
index 2d330a05f..b8e9fa356 100644
--- a/dashboard/opnfv_yardstick_tc072.json
+++ b/dashboard/opnfv_yardstick_tc072.json
@@ -723,7 +723,7 @@
],
"timeFrom": null,
"timeShift": null,
- "title": "Latency - Ping",
+ "title": "Latency - Ping, 999999 rtt indicates ping error",
"tooltip": {
"shared": true,
"sort": 0,
diff --git a/yardstick/benchmark/scenarios/networking/ping.py b/yardstick/benchmark/scenarios/networking/ping.py
index 3bade73e2..e7d9beea8 100644
--- a/yardstick/benchmark/scenarios/networking/ping.py
+++ b/yardstick/benchmark/scenarios/networking/ping.py
@@ -24,6 +24,8 @@ LOG = logging.getLogger(__name__)
class Ping(base.Scenario):
"""Execute ping between two hosts
+ If ping error, RTT will be set to 999999
+
Parameters
packetsize - number of data bytes to send
type: int
@@ -33,6 +35,8 @@ class Ping(base.Scenario):
__scenario_type__ = "Ping"
+ PING_ERROR_RTT = 999999
+
TARGET_SCRIPT = 'ping_benchmark.bash'
def __init__(self, scenario_cfg, context_cfg):
@@ -60,6 +64,7 @@ class Ping(base.Scenario):
rtt_result = {}
ping_result = {"rtt": rtt_result}
+ sla_max_rtt = self.scenario_cfg.get("sla", {}).get("max_rtt")
for pos, dest in enumerate(dest_list):
if 'targets' in self.scenario_cfg:
@@ -76,20 +81,34 @@ class Ping(base.Scenario):
if exit_status != 0:
raise RuntimeError(stderr)
+ if isinstance(target_vm, dict):
+ target_vm_name = target_vm.get("name")
+ else:
+ target_vm_name = target_vm.split('.')[0]
if stdout:
- if isinstance(target_vm, dict):
- target_vm_name = target_vm.get("name")
- else:
- target_vm_name = target_vm.split('.')[0]
- rtt_result[target_vm_name] = float(stdout)
- if "sla" in self.scenario_cfg:
- sla_max_rtt = int(self.scenario_cfg["sla"]["max_rtt"])
+ rtt_result[target_vm_name] = float(stdout.strip())
+ # store result before potential AssertionError
+ result.update(utils.flatten_dict_key(ping_result))
+ if sla_max_rtt is not None:
+ sla_max_rtt = float(sla_max_rtt)
assert rtt_result[target_vm_name] <= sla_max_rtt,\
"rtt %f > sla: max_rtt(%f); " % \
(rtt_result[target_vm_name], sla_max_rtt)
else:
LOG.error("ping '%s' '%s' timeout", options, target_vm)
- result.update(utils.flatten_dict_key(ping_result))
+ # we need to specify a result to satisfy influxdb schema
+ # choose a very large number to inidcate timeout
+ # in this case choose an order of magnitude greater than the SLA
+ rtt_result[target_vm_name] = float(self.PING_ERROR_RTT)
+ # store result before potential AssertionError
+ result.update(utils.flatten_dict_key(ping_result))
+ if sla_max_rtt is not None:
+ raise AssertionError("packet dropped rtt {:f} > sla: max_rtt({:f})".format(
+ rtt_result[target_vm_name], sla_max_rtt))
+
+ else:
+ raise AssertionError(
+ "packet dropped rtt {:f}".format(rtt_result[target_vm_name]))
def _test(): # pragma: no cover
diff --git a/yardstick/dispatcher/influxdb.py b/yardstick/dispatcher/influxdb.py
index f157e91f9..632b433b5 100644
--- a/yardstick/dispatcher/influxdb.py
+++ b/yardstick/dispatcher/influxdb.py
@@ -55,7 +55,9 @@ class InfluxdbDispatcher(DispatchBase):
for case, data in testcases.items():
tc_criteria = data['criteria']
for record in data['tc_data']:
- self._upload_one_record(record, case, tc_criteria)
+ # skip results with no data because we influxdb encode empty dicts
+ if record.get("data"):
+ self._upload_one_record(record, case, tc_criteria)
return 0