[Reports] Add an option for embedding JS/CSS libs into report

This change allows running command `report' with `--html-static'
option so all required JS/CSS will be embedded to HTML file.
Having all required CSS/JS loaded directly from HTML makes
report working without access to the Internet.

Added third-party libraries files:
    rally/ui/templates/libs/nv.d3.1.1.15-beta.min.css
    rally/ui/templates/libs/angular.1.3.3.min.js
    rally/ui/templates/libs/nv.d3.1.1.15-beta.min.js
    rally/ui/templates/libs/d3.3.4.13.min.js

Notes about licenses compatibility:
    https://angularjs.org/
    https://github.com/angular/angular.js/blob/master/LICENSE
    The MIT License
    compatible with Apache License Version 2.0
    according to http://www.apache.org/legal/resolved.html

    http://d3js.org/
    https://github.com/mbostock/d3/blob/master/LICENSE
    BSD 3-clause License
    compatible with Apache License Version 2.0
    according to http://www.apache.org/legal/resolved.html

    http://nvd3.org/
    https://github.com/novus/nvd3/blob/master/LICENSE.md
    Apache License Version 2.0

Change-Id: I8913ecc585ee17affb1d8a0b29bb475c1e07427f
Closes-Bug: #1505533
This commit is contained in:
Alexander Maretskiy 2015-10-15 16:03:04 +03:00
parent 6d548e633c
commit 081daa9cff
2 changed files with 40 additions and 13 deletions

View File

@ -39,7 +39,7 @@ _rally()
OPTS["task_delete"]="--force --uuid"
OPTS["task_detailed"]="--uuid --iterations-data"
OPTS["task_list"]="--deployment --all-deployments --status --uuids-only"
OPTS["task_report"]="--tasks --out --open --html --junit"
OPTS["task_report"]="--tasks --out --open --html --html-static --junit"
OPTS["task_results"]="--uuid"
OPTS["task_sla_check"]="--uuid --json"
OPTS["task_start"]="--deployment --task --task-args --task-args-file --tag --no-use --abort-on-sla-failure"

View File

@ -186,14 +186,28 @@ class TaskTestCase(unittest.TestCase):
self.assertRaises(utils.RallyCliError,
rally, "task status --uuid %s" % FAKE_TASK_UUID)
def _assert_html_report_libs_are_embedded(self, file_path, expected=True):
embedded_signatures = ["Copyright (c) 2011-2014 Novus Partners, Inc.",
"AngularJS v1.3.3",
"Copyright (c) 2010-2015, Michael Bostock"]
external_signatures = ["<script type=\"text/javascript\" src=",
"<link rel=\"stylesheet\" href="]
html = open(file_path).read()
result_embedded = all([sig in html for sig in embedded_signatures])
result_external = all([sig in html for sig in external_signatures])
self.assertEqual(expected, result_embedded)
self.assertEqual(not expected, result_external)
def test_report_one_uuid(self):
rally = utils.Rally()
cfg = self._get_sample_task_config()
config = utils.TaskConfig(cfg)
rally("task start --task %s" % config.filename)
rally("task report --out %s" % rally.gen_report_path(extension="html"))
self.assertTrue(os.path.exists(
rally.gen_report_path(extension="html")))
html_report = rally.gen_report_path(extension="html")
self.assertTrue(os.path.exists(html_report))
self._assert_html_report_libs_are_embedded(html_report, False)
self.assertRaises(utils.RallyCliError,
rally, "task report --report %s" % FAKE_TASK_UUID)
rally("task report --junit --out %s" %
@ -213,10 +227,11 @@ class TaskTestCase(unittest.TestCase):
for line in res.splitlines():
if "finished" in line:
task_uuids.append(line.split(" ")[1][:-1])
rally("task report --tasks %s --out %s" % (
" ".join(task_uuids), rally.gen_report_path(extension="html")))
self.assertTrue(os.path.exists(
rally.gen_report_path(extension="html")))
html_report = rally.gen_report_path(extension="html")
rally("task report --tasks %s --out %s" % (" ".join(task_uuids),
html_report))
self.assertTrue(os.path.exists(html_report))
self._assert_html_report_libs_are_embedded(html_report, False)
def test_report_bunch_files(self):
rally = utils.Rally()
@ -231,10 +246,11 @@ class TaskTestCase(unittest.TestCase):
os.remove(path)
rally("task results", report_path=path, raw=True)
html_report = rally.gen_report_path(extension="html")
rally("task report --tasks %s --out %s" % (
" ".join(files), rally.gen_report_path(extension="html")))
self.assertTrue(os.path.exists(
rally.gen_report_path(extension="html")))
" ".join(files), html_report))
self.assertTrue(os.path.exists(html_report))
self._assert_html_report_libs_are_embedded(html_report, False)
def test_report_one_uuid_one_file(self):
rally = utils.Rally()
@ -255,13 +271,24 @@ class TaskTestCase(unittest.TestCase):
else:
return 1
html_report = rally.gen_report_path(extension="html")
rally("task report --tasks"
" %s %s --out %s" % (task_result_file, task_uuid,
rally.gen_report_path(extension="html")))
self.assertTrue(os.path.exists(
rally.gen_report_path(extension="html")))
html_report))
self.assertTrue(os.path.exists(html_report))
self.assertRaises(utils.RallyCliError,
rally, "task report --report %s" % FAKE_TASK_UUID)
self._assert_html_report_libs_are_embedded(html_report, False)
def test_report_one_uuid_with_static_libs(self):
rally = utils.Rally()
cfg = self._get_sample_task_config()
config = utils.TaskConfig(cfg)
rally("task start --task %s" % config.filename)
html_report = rally.gen_report_path(extension="html")
rally("task report --out %s --html-static" % html_report)
self.assertTrue(os.path.exists(html_report))
self._assert_html_report_libs_are_embedded(html_report)
def test_delete(self):
rally = utils.Rally()