summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorchenjiankun <chenjiankun1@huawei.com>2017-08-14 02:47:29 +0000
committerchenjiankun <chenjiankun1@huawei.com>2017-08-14 02:48:08 +0000
commitb88e1a41c01a34d08ba3a0e201d0603b35ee4fba (patch)
tree89670578a7cc72f047ef136edf8ed41c2696b9df
parentc2f99db8b4d8f021b29a4e3aae483ba715936a66 (diff)
Add yardstick report for each task
JIRA: YARDSTICK-784 Currently we have yardstick report in GUI. But if users do not use GUI, they can't see this report. So we need generate a report each task. After run each test case, we can see report: http://ip:port/report/report.html Change-Id: Ic76cf57f55aa6680b91272e210135136f0225373 Signed-off-by: chenjiankun <chenjiankun1@huawei.com>
-rwxr-xr-xdocker/nginx.sh4
-rw-r--r--yardstick/benchmark/core/task.py10
-rw-r--r--yardstick/common/constants.py1
-rw-r--r--yardstick/common/html_template.py60
4 files changed, 75 insertions, 0 deletions
diff --git a/docker/nginx.sh b/docker/nginx.sh
index 26937d134..74009f5bd 100755
--- a/docker/nginx.sh
+++ b/docker/nginx.sh
@@ -26,6 +26,10 @@ server {
location /gui/ {
alias /etc/nginx/yardstick/gui/;
}
+
+ location /report/ {
+ alias /tmp/;
+ }
}
EOF
fi
diff --git a/yardstick/benchmark/core/task.py b/yardstick/benchmark/core/task.py
index dd35bd4f4..ea3239edf 100644
--- a/yardstick/benchmark/core/task.py
+++ b/yardstick/benchmark/core/task.py
@@ -25,6 +25,7 @@ import errno
import collections
from six.moves import filter
+from jinja2 import Environment
from yardstick.benchmark.contexts.base import Context
from yardstick.benchmark.runners import base as base_runner
@@ -33,6 +34,7 @@ from yardstick.common.task_template import TaskTemplate
from yardstick.common.utils import source_env
from yardstick.common import utils
from yardstick.common import constants
+from yardstick.common.html_template import report_template
output_file_default = "/tmp/yardstick.out"
config_file = '/etc/yardstick/yardstick.conf'
@@ -146,6 +148,7 @@ class Task(object): # pragma: no cover
result = self._get_format_result(testcases)
self._do_output(output_config, result)
+ self._generate_reporting(result)
total_end_time = time.time()
LOG.info("total finished in %d secs",
@@ -158,6 +161,13 @@ class Task(object): # pragma: no cover
print("Done, exiting")
return result
+ def _generate_reporting(self, result):
+ env = Environment()
+ with open(constants.REPORTING_FILE, 'w') as f:
+ f.write(env.from_string(report_template).render(result))
+
+ LOG.info('yardstick reporting generate in %s', constants.REPORTING_FILE)
+
def _set_log(self):
log_format = '%(asctime)s %(name)s %(filename)s:%(lineno)d %(levelname)s %(message)s'
log_formatter = logging.Formatter(log_format)
diff --git a/yardstick/common/constants.py b/yardstick/common/constants.py
index f80e10488..fe394fd4d 100644
--- a/yardstick/common/constants.py
+++ b/yardstick/common/constants.py
@@ -91,6 +91,7 @@ LOAD_IMAGES_SCRIPT = get_param('file.load_image_script',
LOAD_IMAGES_SCRIPT = join(REPOS_DIR, LOAD_IMAGES_SCRIPT)
DEFAULT_OUTPUT_FILE = get_param('file.output_file', '/tmp/yardstick.out')
DEFAULT_HTML_FILE = get_param('file.html_file', '/tmp/yardstick.htm')
+REPORTING_FILE = get_param('file.reporting_file', '/tmp/report.html')
# influxDB
INFLUXDB_IP = get_param('influxdb.ip', SERVER_IP)
diff --git a/yardstick/common/html_template.py b/yardstick/common/html_template.py
index 4b46e77a0..f030a2f6c 100644
--- a/yardstick/common/html_template.py
+++ b/yardstick/common/html_template.py
@@ -131,3 +131,63 @@ $(function() {
</body>
</html>"""
+
+report_template = """
+<html>
+ <head>
+ <title>Yardstick Report</title>
+ <link href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css\
+/bootstrap.min.css" rel="stylesheet">
+ </head>
+ <div class="content">
+ <h3>Yardstick Report </h3>
+ <hr/>
+ <div>
+
+ <div>Task ID : {{result.task_id}} </div>
+ <div style="margin-top:5px;">Criteria :
+ <font> {{result.criteria}}</font>
+ </div>
+ <hr/>
+
+ <caption>Information</caption>
+ <table class="table table-striped">
+ <tr>
+ <th>#</th>
+ <th>key</th>
+ <th>value</th>
+ </tr>
+ <tbody>
+ {% for key, value in result.info.iteritems() %}
+ <tr>
+ <td>{{ loop.index }}</td>
+ <td>{{key}}</td>
+ <td>{{value}}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ <hr/>
+
+ <caption>Test Cases</caption>
+ <table class="table table-striped">
+ <tr>
+ <th>#</th>
+ <th>key</th>
+ <th>value</th>
+ </tr>
+ <tbody>
+ {% for key, value in result.testcases.iteritems() %}
+ <tr>
+ <td>{{ loop.index }}</td>
+ <td>{{key}}</td>
+ <td>{{value.criteria}}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+
+ </div>
+ </div>
+</html>
+"""