From 12742fe3b02f909da3b304cc8e9e44bdcd558305 Mon Sep 17 00:00:00 2001 From: Lucas Meneghel Rodrigues Date: Mon, 11 Aug 2014 14:25:48 -0300 Subject: [PATCH] avocado: Make job ID more prominent in avocado Make some changes to bring the concept of job ID as a user visible information: * Make the human output to display the job ID * Make the json output to have the job ID * Record the job id in a file inside the results dir Adapt functional tests to that new schema. Signed-off-by: Lucas Meneghel Rodrigues --- avocado/core/output.py | 4 +++- avocado/job.py | 8 +++++++- avocado/plugins/jsonresult.py | 2 ++ avocado/result.py | 3 ++- selftests/all/functional/avocado/output_tests.py | 4 ++-- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/avocado/core/output.py b/avocado/core/output.py index 47a80526..8f9dc953 100644 --- a/avocado/core/output.py +++ b/avocado/core/output.py @@ -219,13 +219,15 @@ class OutputManager(object): extra = {'skip_newline': skip_newline} self.console_log.log(level=level, msg=msg, extra=extra) - def start_file_logging(self, logfile, loglevel): + def start_file_logging(self, logfile, loglevel, unique_id): """ Start the main file logging. :param logfile: Path to file that will receive logging. :param loglevel: Level of the logger. Example: :mod:`logging.DEBUG`. + :param unique_id: job.Job() unique id attribute. """ + self.job_unique_id = unique_id self.debuglog = logfile self.file_handler = logging.FileHandler(filename=logfile) self.file_handler.setLevel(loglevel) diff --git a/avocado/job.py b/avocado/job.py index cc5d6920..4096fa0b 100644 --- a/avocado/job.py +++ b/avocado/job.py @@ -243,6 +243,11 @@ class Job(object): self.unique_id = str(uuid.uuid4()) self.logdir = data_dir.get_job_logs_dir(self.args, self.unique_id) self.logfile = os.path.join(self.logdir, "job.log") + self.idfile = os.path.join(self.logdir, "id") + + with open(self.idfile, 'w') as id_file_obj: + id_file_obj.write("%s\n" % self.unique_id) + if self.args is not None: self.loglevel = args.log_level or logging.DEBUG self.multiplex_file = args.multiplex_file @@ -381,7 +386,8 @@ class Job(object): self._make_test_runner() self.output_manager.start_file_logging(self.logfile, - self.loglevel) + self.loglevel, + self.unique_id) self.output_manager.logfile = self.logfile failures = self.test_runner.run(params_list) self.output_manager.stop_file_logging() diff --git a/avocado/plugins/jsonresult.py b/avocado/plugins/jsonresult.py index a002cbc6..52c6d15b 100644 --- a/avocado/plugins/jsonresult.py +++ b/avocado/plugins/jsonresult.py @@ -50,6 +50,8 @@ class JSONTestResult(TestResult): :type state: dict """ TestResult.end_test(self, state) + if 'job_id' not in self.json: + self.json['job_id'] = state['job_unique_id'] t = {'test': state['tagged_name'], 'url': state['name'], 'time': state['time_elapsed'], diff --git a/avocado/result.py b/avocado/result.py index a5fb49ba..ae65fcc3 100644 --- a/avocado/result.py +++ b/avocado/result.py @@ -244,8 +244,9 @@ class HumanTestResult(TestResult): Called once before any tests are executed. """ TestResult.start_tests(self) + self.stream.log_header("JOB ID : %s" % self.stream.job_unique_id) self.stream.log_header("JOB LOG: %s" % self.stream.logfile) - self.stream.log_header("TESTS: %s" % self.tests_total) + self.stream.log_header("TESTS : %s" % self.tests_total) def end_tests(self): """ diff --git a/selftests/all/functional/avocado/output_tests.py b/selftests/all/functional/avocado/output_tests.py index 4bbcab04..3fe3783d 100644 --- a/selftests/all/functional/avocado/output_tests.py +++ b/selftests/all/functional/avocado/output_tests.py @@ -165,8 +165,8 @@ class OutputPluginTest(unittest.TestCase): "Avocado did not return rc %d:\n%s" % (expected_rc, result)) output_lines = output.splitlines() - first_line = output_lines[0] - debug_log = first_line.split()[-1] + second_line = output_lines[1] + debug_log = second_line.split()[-1] self.check_output_files(debug_log) -- GitLab