[oe-commits] [openembedded-core] 01/20: resulttool: Add option to dump all ptest logs

git at git.openembedded.org git at git.openembedded.org
Wed May 8 21:49:42 UTC 2019


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master-next
in repository openembedded-core.

commit 9041cba5bef33ec2b63b87b96bb4f92b9f042b9f
Author: Joshua Watt <jpewhacker at gmail.com>
AuthorDate: Wed May 8 11:16:23 2019 -0500

    resulttool: Add option to dump all ptest logs
    
    Adds an option to dump all the ptest logs to individual files in a
    specified directory. If multiple test runs are present, the
    '--prepend-run' argument will create separate directories for each test
    run under the target directory and put the logs there to prevent each
    test run from clobbering the others.
    
    [YOCTO #13331]
    
    Signed-off-by: Joshua Watt <JPEWhacker at gmail.com>
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 scripts/lib/resulttool/log.py         | 54 ++++++++++++++++++++++++-----------
 scripts/lib/resulttool/resultutils.py | 16 +++++++++++
 2 files changed, 54 insertions(+), 16 deletions(-)

diff --git a/scripts/lib/resulttool/log.py b/scripts/lib/resulttool/log.py
index 5584f2d..4981635 100644
--- a/scripts/lib/resulttool/log.py
+++ b/scripts/lib/resulttool/log.py
@@ -11,6 +11,7 @@
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 # more details.
 #
+import os
 import resulttool.resultutils as resultutils
 
 def show_ptest(result, ptest, logger):
@@ -24,22 +25,38 @@ def show_ptest(result, ptest, logger):
 
 def log(args, logger):
     results = resultutils.load_resultsdata(args.source)
-    for path in results:
-        for res in results[path]:
-            if 'result' not in results[path][res]:
-                continue
-            r = results[path][res]['result']
-
-            if args.raw:
-                if 'ptestresult.rawlogs' in r:
-                    print(r['ptestresult.rawlogs']['log'])
-                else:
-                    print('Raw logs not found')
-                    return 1
-
-            for ptest in args.ptest:
-                if not show_ptest(r, ptest, logger):
-                    return 1
+
+    ptest_count = sum(1 for _, _, _, r in resultutils.test_run_results(results) if 'ptestresult.sections' in r)
+    if ptest_count > 1 and not args.prepend_run:
+        print("%i ptest sections found. '--prepend-run' is required" % ptest_count)
+        return 1
+
+    for _, run_name, _, r in resultutils.test_run_results(results):
+        if args.dump_ptest:
+            if 'ptestresult.sections' in r:
+                for name, ptest in r['ptestresult.sections'].items():
+                    if 'log' in ptest:
+                        dest_dir = args.dump_ptest
+                        if args.prepend_run:
+                            dest_dir = os.path.join(dest_dir, run_name)
+
+                        os.makedirs(dest_dir, exist_ok=True)
+
+                        dest = os.path.join(dest_dir, '%s.log' % name)
+                        print(dest)
+                        with open(dest, 'w') as f:
+                            f.write(ptest['log'])
+
+        if args.raw:
+            if 'ptestresult.rawlogs' in r:
+                print(r['ptestresult.rawlogs']['log'])
+            else:
+                print('Raw logs not found')
+                return 1
+
+        for ptest in args.ptest:
+            if not show_ptest(r, ptest, logger):
+                return 1
 
 def register_commands(subparsers):
     """Register subcommands from this plugin"""
@@ -51,6 +68,11 @@ def register_commands(subparsers):
             help='the results file/directory/URL to import')
     parser.add_argument('--ptest', action='append', default=[],
             help='show logs for a ptest')
+    parser.add_argument('--dump-ptest', metavar='DIR',
+            help='Dump all ptest log files to the specified directory.')
+    parser.add_argument('--prepend-run', action='store_true',
+            help='''Dump ptest results to a subdirectory named after the test run when using --dump-ptest.
+                    Required if more than one test run is present in the result file''')
     parser.add_argument('--raw', action='store_true',
             help='show raw logs')
 
diff --git a/scripts/lib/resulttool/resultutils.py b/scripts/lib/resulttool/resultutils.py
index 8d17c7c..07dab4c 100644
--- a/scripts/lib/resulttool/resultutils.py
+++ b/scripts/lib/resulttool/resultutils.py
@@ -167,3 +167,19 @@ def git_get_result(repo, tags):
         append_resultsdata(results, obj)
 
     return results
+
+def test_run_results(results):
+    """
+    Convenient generator function that iterates over all test runs that have a
+    result section.
+
+    Generates a tuple of:
+        (result json file path, test run name, test run (dict), test run "results" (dict))
+    for each test run that has a "result" section
+    """
+    for path in results:
+        for run_name, test_run in results[path].items():
+            if not 'result' in test_run:
+                continue
+            yield path, run_name, test_run, test_run['result']
+

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list