summaryrefslogtreecommitdiffstats
path: root/qtip
diff options
context:
space:
mode:
authorTaseer <taseer94@gmail.com>2017-06-20 22:30:23 +0500
committerTaseer <taseer94@gmail.com>2017-06-26 23:17:19 +0500
commit024cf82595afef0a1da16b6c6604c6cb52d41dfb (patch)
treecb29d78772f97e1f9924c749a92093995f3b9f5c /qtip
parent26c2a8f2d556a8777d443b02d931e7df7fec8f6c (diff)
Refactor output format
- Merge scores and results in qpi.json - metrics: {} will be completely removed as a consequence - Make baseline the same format as spec Change-Id: Id0cc487002a38c51736de07f3759fd78d42a0b9c Signed-off-by: Taseer Ahmed <taseer94@gmail.com>
Diffstat (limited to 'qtip')
-rw-r--r--qtip/ansible_library/plugins/action/calculate.py110
1 files changed, 52 insertions, 58 deletions
diff --git a/qtip/ansible_library/plugins/action/calculate.py b/qtip/ansible_library/plugins/action/calculate.py
index 0c3ab7db..33cda1bb 100644
--- a/qtip/ansible_library/plugins/action/calculate.py
+++ b/qtip/ansible_library/plugins/action/calculate.py
@@ -54,111 +54,105 @@ class ActionModule(ActionBase):
if baseline_file is not None:
with open(baseline_file) as f:
baseline = json.load(f)
- return calc_qpi(spec, metrics, baseline, sysinfo, dest=dest)
+ return calc_qpi(spec, metrics, sysinfo, baseline, dest=dest)
else:
- return save_as_baseline(spec, metrics, sysinfo, dest=dest)
+ return calc_qpi(spec, metrics, sysinfo, None, dest=dest)
-# TODO(wuzhihui): It is more reasonable to put this function into collect.py.
-# For now metrics data is not easy to be collected from collect.py.
@export_to_file
-def save_as_baseline(qpi_spec, metrics, sysinfo):
- display.vv("save {} metrics as baseline".format(qpi_spec['name']))
- display.vvv("spec: {}".format(qpi_spec))
- display.vvv("metrics: {}".format(metrics))
-
- return {
- 'name': qpi_spec['name'],
- 'score': 2048,
- 'description': qpi_spec['description'],
- 'system_info': sysinfo,
- 'details': {
- 'metrics': metrics,
- 'spec': "https://git.opnfv.org/qtip/tree/resources/QPI/compute.yaml",
- 'baseline': ""
- }
- }
-
-
-@export_to_file
-def calc_qpi(qpi_spec, metrics, qpi_baseline, sysinfo):
+def calc_qpi(qpi_spec, metrics, sysinfo, qpi_baseline):
display.vv("calculate QPI {}".format(qpi_spec['name']))
display.vvv("spec: {}".format(qpi_spec))
display.vvv("metrics: {}".format(metrics))
display.vvv("baseline: {}".format(qpi_baseline))
section_results = []
- for s in qpi_spec['sections']:
- s_baseline = query(qpi_baseline['sections']).first(
- lambda section: section['name'] == s['name'])
- section_results.append(calc_section(s, metrics, s_baseline))
-
- # TODO(yujunz): use formula in spec
- qpi_score = int(
- mean([r['score'] for r in section_results]) * qpi_baseline['score'])
+ qpi_score = 0
+ if qpi_baseline:
+ for s in qpi_spec['sections']:
+ s_baseline = query(qpi_baseline['sections']).first(
+ lambda section: section['name'] == s['name'])
+ section_results.append(calc_section(s, metrics, s_baseline))
+
+ # TODO(yujunz): use formula in spec
+ qpi_score = int(
+ mean([r['score'] for r in section_results]) * qpi_baseline['score'])
+ else:
+ for s in qpi_spec['sections']:
+ section_results.append(calc_section(s, metrics))
results = {
'score': qpi_score,
'name': qpi_spec['name'],
'description': qpi_spec['description'],
'system_info': sysinfo,
- 'children': section_results,
- 'details': {
- 'metrics': metrics,
- 'spec': "https://git.opnfv.org/qtip/tree/resources/QPI/compute.yaml",
- 'baseline': "https://git.opnfv.org/qtip/tree/resources/QPI/compute-baseline.json"
- }
+ 'sections': section_results,
+ 'spec': "https://git.opnfv.org/qtip/tree/resources/QPI/compute.yaml",
+ 'baseline': "https://git.opnfv.org/qtip/tree/resources/QPI/compute-baseline.json"
}
return results
-def calc_section(section_spec, metrics, section_baseline):
+def calc_section(section_spec, metrics, section_baseline=None):
display.vv("calculate section {}".format(section_spec['name']))
display.vvv("spec: {}".format(section_spec))
display.vvv("metrics: {}".format(metrics))
display.vvv("baseline: {}".format(section_baseline))
metric_results = []
- for m in section_spec['metrics']:
- m_baseline = query(section_baseline['metrics']).first(
- lambda metric: metric['name'] == m['name'])
- metric_results.append(calc_metric(m, metrics[m['name']], m_baseline))
+ section_score = 0
+ if section_baseline:
+ for m in section_spec['metrics']:
+ m_baseline = query(section_baseline['metrics']).first(
+ lambda metric: metric['name'] == m['name'])
+ metric_results.append(calc_metric(m, metrics[m['name']], m_baseline))
+ section_score = mean([r['score'] for r in metric_results])
+ else:
+ for m in section_spec['metrics']:
+ metric_results.append(calc_metric(m, metrics[m['name']]))
# TODO(yujunz): use formula in spec
- section_score = mean([r['score'] for r in metric_results])
return {
'score': section_score,
'name': section_spec['name'],
'description': section_spec.get('description', 'section'),
- 'children': metric_results
+ 'metrics': metric_results
}
-def calc_metric(metric_spec, metrics, metric_basline):
+def calc_metric(metric_spec, metrics, metric_baseline=None):
display.vv("calculate metric {}".format(metric_spec['name']))
display.vvv("spec: {}".format(metric_spec))
display.vvv("metrics: {}".format(metrics))
- display.vvv("baseline: {}".format(metric_basline))
+ display.vvv("baseline: {}".format(metric_baseline))
# TODO(yujunz): use formula in spec
workload_results = []
- for w in metric_spec['workloads']:
- w_baseline = query(metric_basline['workloads']).first(
- lambda workload: workload['name'] == w['name'])
- workload_results.append({
- 'name': w['name'],
- 'description': 'workload',
- 'score': calc_score(metrics[w['name']], w_baseline['baseline'])
- })
-
- metric_score = mean([r['score'] for r in workload_results])
+ metric_score = 0
+ if metric_baseline:
+ for w in metric_spec['workloads']:
+ w_baseline = query(metric_baseline['workloads']).first(
+ lambda workload: workload['name'] == w['name'])
+ workload_results.append({
+ 'name': w['name'],
+ 'description': 'workload',
+ 'score': calc_score(metrics[w['name']], w_baseline['baseline']),
+ 'result': metrics[w['name']][0]
+ })
+ metric_score = mean([r['score'] for r in workload_results])
+ else:
+ for w in metric_spec['workloads']:
+ workload_results.append({
+ 'name': w['name'],
+ 'baseline': metrics[w['name']][0]
+ })
return {
'score': metric_score,
'name': metric_spec['name'],
'description': metric_spec.get('description', 'metric'),
- 'children': workload_results
+ 'workloads': workload_results
}