Refactor the related command of task report and export

1.Use report plugins instead of separated reports,
  however, we still save old report command.
2.New report command
   rally task report --html --uuid <uuid> --out <dest>
  we can use --html and --html-static, and deprecate --junit,
  we have move junit to `rally task export` command.

  Example:
     rally task report --html --uuid xxxxxx --out /home/report.html
3.Change `rally task export` format, and deprecate old Exporter plugin.
    rally task export --uuid <uuid> --type <type> --to <dest>

  Example:
    rally task export --uuid xxxx --type junit-xml --to xxxxx

4.Remove FileExporter plugin.

Change-Id: I44cafccb8d6c6c3cc704fb6e3ff2f49a756209ef
This commit is contained in:
chenhb 2017-04-27 11:17:09 +08:00
parent 040b6c5196
commit 8adfcb3ce3
3 changed files with 73 additions and 57 deletions

View File

@ -31,10 +31,10 @@ _rally()
OPTS["task_abort"]="--uuid --soft" OPTS["task_abort"]="--uuid --soft"
OPTS["task_delete"]="--force --uuid" OPTS["task_delete"]="--force --uuid"
OPTS["task_detailed"]="--uuid --iterations-data" OPTS["task_detailed"]="--uuid --iterations-data"
OPTS["task_export"]="--uuid --connection" OPTS["task_export"]="--uuid --type --to"
OPTS["task_import"]="--file --deployment --tag" OPTS["task_import"]="--file --deployment --tag"
OPTS["task_list"]="--deployment --all-deployments --status --uuids-only" OPTS["task_list"]="--deployment --all-deployments --status --uuids-only"
OPTS["task_report"]="--tasks --out --open --html --html-static --junit" OPTS["task_report"]="--out --open --html --html-static --uuid"
OPTS["task_results"]="--uuid" OPTS["task_results"]="--uuid"
OPTS["task_sla-check"]="--uuid --json" OPTS["task_sla-check"]="--uuid --json"
OPTS["task_sla_check"]="--uuid --json" OPTS["task_sla_check"]="--uuid --json"

View File

@ -135,8 +135,10 @@ function run () {
gzip -9 rally-plot/detailed.txt gzip -9 rally-plot/detailed.txt
rally task detailed --iterations-data > rally-plot/detailed_with_iterations.txt rally task detailed --iterations-data > rally-plot/detailed_with_iterations.txt
gzip -9 rally-plot/detailed_with_iterations.txt gzip -9 rally-plot/detailed_with_iterations.txt
rally task report --out rally-plot/results.html rally task report --html --out rally-plot/results.html
gzip -9 rally-plot/results.html gzip -9 rally-plot/results.html
rally task export --type junit-xml --to rally-plot/junit.xml
gzip -9 rally-plot/junit.xml
# NOTE(stpierre): if the sla check fails, we still want osresources.py # NOTE(stpierre): if the sla check fails, we still want osresources.py
# to run, so we turn off -e and save the return value # to run, so we turn off -e and save the return value

View File

@ -204,6 +204,8 @@ class TaskTestCase(unittest.TestCase):
rally = utils.Rally() rally = utils.Rally()
self.assertRaises(utils.RallyCliError, self.assertRaises(utils.RallyCliError,
rally, "task report --tasks %s" % FAKE_TASK_UUID) rally, "task report --tasks %s" % FAKE_TASK_UUID)
self.assertRaises(utils.RallyCliError,
rally, "task report --uuid %s" % FAKE_TASK_UUID)
def test_sla_check_with_wrong_task_id(self): def test_sla_check_with_wrong_task_id(self):
rally = utils.Rally() rally = utils.Rally()
@ -233,16 +235,22 @@ class TaskTestCase(unittest.TestCase):
cfg = self._get_sample_task_config() cfg = self._get_sample_task_config()
config = utils.TaskConfig(cfg) config = utils.TaskConfig(cfg)
rally("task start --task %s" % config.filename) rally("task start --task %s" % config.filename)
rally("task report --out %s" % rally.gen_report_path(extension="html"))
html_report = rally.gen_report_path(extension="html") html_report = rally.gen_report_path(extension="html")
rally("task report --out %s" % html_report)
self.assertTrue(os.path.exists(html_report)) self.assertTrue(os.path.exists(html_report))
self._assert_html_report_libs_are_embedded(html_report, False) self._assert_html_report_libs_are_embedded(html_report, False)
self.assertRaises(utils.RallyCliError, self.assertRaises(utils.RallyCliError,
rally, "task report --report %s" % FAKE_TASK_UUID) rally, "task report --report %s" % FAKE_TASK_UUID)
rally("task report --junit --out %s" %
rally.gen_report_path(extension="junit")) def test_new_report_one_uuid(self):
self.assertTrue(os.path.exists( rally = utils.Rally()
rally.gen_report_path(extension="junit"))) 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_report)
self.assertTrue(os.path.exists(html_report))
self._assert_html_report_libs_are_embedded(html_report, False)
self.assertRaises(utils.RallyCliError, self.assertRaises(utils.RallyCliError,
rally, "task report --report %s" % FAKE_TASK_UUID) rally, "task report --report %s" % FAKE_TASK_UUID)
@ -262,6 +270,21 @@ class TaskTestCase(unittest.TestCase):
self.assertTrue(os.path.exists(html_report)) self.assertTrue(os.path.exists(html_report))
self._assert_html_report_libs_are_embedded(html_report, False) self._assert_html_report_libs_are_embedded(html_report, False)
def test_new_report_bunch_uuids(self):
rally = utils.Rally()
cfg = self._get_sample_task_config()
config = utils.TaskConfig(cfg)
task_uuids = []
for i in range(3):
res = rally("task start --task %s" % config.filename)
for line in res.splitlines():
if "finished" in line:
task_uuids.append(line.split(" ")[1][:-1])
html_report = rally.gen_report_path(extension="html")
rally("task report --uuid %s --out %s" % (" ".join(task_uuids),
html_report))
self.assertTrue(os.path.exists(html_report))
def test_report_bunch_files(self): def test_report_bunch_files(self):
rally = utils.Rally() rally = utils.Rally()
cfg = self._get_sample_task_config() cfg = self._get_sample_task_config()
@ -289,7 +312,8 @@ class TaskTestCase(unittest.TestCase):
task_result_file = "/tmp/report_42.json" task_result_file = "/tmp/report_42.json"
if os.path.exists(task_result_file): if os.path.exists(task_result_file):
os.remove(task_result_file) os.remove(task_result_file)
rally("task results", report_path=task_result_file, raw=True) rally("task results", report_path=task_result_file,
raw=True)
task_run_output = rally( task_run_output = rally(
"task start --task %s" % config.filename).splitlines() "task start --task %s" % config.filename).splitlines()
@ -319,6 +343,16 @@ class TaskTestCase(unittest.TestCase):
self.assertTrue(os.path.exists(html_report)) self.assertTrue(os.path.exists(html_report))
self._assert_html_report_libs_are_embedded(html_report) self._assert_html_report_libs_are_embedded(html_report)
def test_new_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_trends(self): def test_trends(self):
cfg1 = { cfg1 = {
"Dummy.dummy": [ "Dummy.dummy": [
@ -865,58 +899,38 @@ class TaskTestCase(unittest.TestCase):
r"(?P<task_id>[0-9a-f\-]{36}): started", output) r"(?P<task_id>[0-9a-f\-]{36}): started", output)
self.assertIsNotNone(result) self.assertIsNotNone(result)
def test_export(self): def test_export_one_uuid(self):
rally = utils.Rally() rally = utils.Rally()
cfg = { cfg = self._get_sample_task_config()
"Dummy.dummy": [
{
"runner": {
"type": "constant",
"times": 100,
"concurrency": 5
}
}
]
}
config = utils.TaskConfig(cfg) config = utils.TaskConfig(cfg)
output = rally("task start --task %s" % config.filename) rally("task start --task %s" % config.filename)
uuid = re.search( html_report = rally.gen_report_path(extension="html")
r"(?P<uuid>[0-9a-f\-]{36}): started", output).group("uuid") rally("task export --type html --to %s" % html_report)
connection = ( self.assertTrue(os.path.exists(html_report))
"file-exporter:///" + rally.gen_report_path(extension="json")) self._assert_html_report_libs_are_embedded(html_report, False)
output = rally("task export --uuid %s --connection %s" % (
uuid, connection))
expected = (
"Task %(uuid)s results was successfully exported to %("
"connection)s using file-exporter plugin." % {
"uuid": uuid,
"connection": connection,
})
self.assertIn(expected, output)
def test_export_with_wrong_connection(self): rally("task export --type html-static --to %s" % html_report)
self.assertTrue(os.path.exists(html_report))
self._assert_html_report_libs_are_embedded(html_report)
junit_report = rally.gen_report_path(extension="junit")
rally("task export --type junit-xml --to %s" % junit_report)
self.assertTrue(os.path.exists(junit_report))
def test_export_bunch_uuids(self):
rally = utils.Rally() rally = utils.Rally()
cfg = { cfg = self._get_sample_task_config()
"Dummy.dummy": [
{
"runner": {
"type": "constant",
"times": 100,
"concurrency": 5
}
}
]
}
config = utils.TaskConfig(cfg) config = utils.TaskConfig(cfg)
output = rally("task start --task %s" % config.filename) task_uuids = []
uuid = re.search( for i in range(3):
r"(?P<uuid>[0-9a-f\-]{36}): started", output).group("uuid") res = rally("task start --task %s" % config.filename)
connection = ( for line in res.splitlines():
"fake:///" + rally.gen_report_path(extension="json")) if "finished" in line:
self.assertRaises(utils.RallyCliError, task_uuids.append(line.split(" ")[1][:-1])
rally, html_report = rally.gen_report_path(extension="html")
"task export --uuid %s --connection %s" % ( rally("task export --uuid %s --type html --to %s" % (
uuid, connection)) " ".join(task_uuids), html_report))
self.assertTrue(os.path.exists(html_report))
class SLATestCase(unittest.TestCase): class SLATestCase(unittest.TestCase):