2018-05-18 15:41:05 +01:00
|
|
|
.. _output_processing_api:
|
2018-01-19 10:49:56 +00:00
|
|
|
|
2018-05-18 15:41:05 +01:00
|
|
|
Output Processing API
|
|
|
|
=====================
|
2018-01-19 10:49:56 +00:00
|
|
|
|
2018-06-07 17:08:41 +01:00
|
|
|
WA3 now has an output API that can be used to post process a runs
|
|
|
|
:ref:`Output Directory Structure <output_directory>` which can be performed by using WA's
|
|
|
|
:class:`RunOutput` object.
|
2018-01-19 10:49:56 +00:00
|
|
|
|
2018-06-07 17:08:41 +01:00
|
|
|
This object provides a simple way to access the various aspects of the run. A
|
|
|
|
few of the most useful attributes of the ``RunOutput`` object are as follows:
|
2018-01-19 10:49:56 +00:00
|
|
|
|
2018-06-07 17:08:41 +01:00
|
|
|
- :confval:`jobs` - A list of all the job outputs that were generated for the
|
|
|
|
run. These can be used to used to access more detailed information about
|
|
|
|
individual jobs for example their ``status``, any ``metrics`` or ``artifacts``
|
|
|
|
that were generated etc.
|
|
|
|
- :confval:`run_config` - A :ref:`RunConfiguration <run-configuration>` object
|
|
|
|
that can be used to access all the configuration of the run itself, for
|
|
|
|
example the ``reboot_policy``, ``execution_order``, ``device_config`` etc.
|
|
|
|
- :confval:`target_info` - A :ref:`TargetInfo <target-info-api>` object which can be used to
|
|
|
|
access various information about the target that was used during the run for
|
|
|
|
example it's ``abi``, ``hostname``, ``os`` etc.
|
|
|
|
- :confval:`info` - A :ref:`RunInfo <run-info-api>` object that contains
|
|
|
|
information about the run itself for example it's duration, name, uuid etc.
|
|
|
|
- :confval:`settings` - The :ref:`Meta Configuration <meta-configuration>` used
|
|
|
|
during the run.
|
|
|
|
- :confval:`status` - The overall status of the run.
|
|
|
|
- :confval:`artifacts` - A list containing any run level artifacts (for example
|
|
|
|
logs, output generated by output processors etc.).
|
|
|
|
- :confval:`metrics` - A list of :ref:`Metrics <metrics>` that were generated
|
|
|
|
for the overall run.
|
|
|
|
- :confval:`classifiers` - A dict mapping of any run level
|
|
|
|
:ref:`classifiers <classifiers>`.
|
|
|
|
- :confval:`augmentations` - A list of the augmentations that were enabled
|
|
|
|
during the run.
|
|
|
|
- :confval:`event_summary` - A condensed summary of any events that occurred
|
|
|
|
during the run.
|
|
|
|
- :confval:`events` - A list of any events that occurred during the run like job
|
|
|
|
failures etc.
|
|
|
|
- :confval:`basepath` - The name of the base WA output directory.
|
|
|
|
- :confval:`configfile` - The relative file path to the config file generated
|
|
|
|
for the run.
|
|
|
|
- :confval:`failed_dir` - The relative file path to the directory containing any
|
|
|
|
failed jobs during the run.
|
|
|
|
- :confval:`infofile` - The file location of the json serialized file of the
|
|
|
|
:class:`RunInfo` object.
|
|
|
|
- :confval:`list_workloads()` - A method that generated a list of the workload
|
|
|
|
names that were executed during the run.
|
|
|
|
- :confval:`logfile` - A relative file path to the run log.
|
|
|
|
- :confval:`metadir` - A relative file path to the metadata directory.
|
|
|
|
- :confval:`targetfile` - The file location of the json serialized file of the
|
|
|
|
:class:`TargetInfo` object.
|
|
|
|
|
|
|
|
|
|
|
|
Output Processing API Example
|
|
|
|
------------------------------
|
|
|
|
|
|
|
|
To demonstrate how we can use the output API if we have an existing WA output
|
|
|
|
called ``wa_output`` in the current working directory we can initialize a
|
|
|
|
``RunOutput`` as follows:
|
2018-01-19 10:49:56 +00:00
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
|
|
|
In [1]: from wa import RunOutput
|
|
|
|
...:
|
2018-06-08 15:52:39 +01:00
|
|
|
...: output_directory = 'wa_output'
|
|
|
|
...: run_output = RunOutput(output_directory)
|
2018-01-19 10:49:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2018-05-14 17:21:59 +01:00
|
|
|
From here we can retrieve various information about the run. For example if we
|
2018-04-25 16:49:10 +01:00
|
|
|
want to see what the overall status of the run was, along with the runtime
|
|
|
|
parameters and the metrics recorded from the first job was we can do the following:
|
2018-01-19 10:49:56 +00:00
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
|
|
|
In [2]: run_output.status
|
|
|
|
Out[2]: OK(7)
|
|
|
|
|
2018-04-25 16:49:10 +01:00
|
|
|
# List all of the jobs for the run
|
2018-01-19 10:49:56 +00:00
|
|
|
In [3]: run_output.jobs
|
|
|
|
Out[3]:
|
|
|
|
[<wa.framework.output.JobOutput at 0x7f70358a1f10>,
|
|
|
|
<wa.framework.output.JobOutput at 0x7f70358a1150>,
|
|
|
|
<wa.framework.output.JobOutput at 0x7f7035862810>,
|
|
|
|
<wa.framework.output.JobOutput at 0x7f7035875090>]
|
|
|
|
|
2018-04-25 16:49:10 +01:00
|
|
|
# Examine the first job that was ran
|
2018-01-19 10:49:56 +00:00
|
|
|
In [4]: job_1 = run_output.jobs[0]
|
|
|
|
|
|
|
|
In [5]: job_1.label
|
|
|
|
Out[5]: u'dhrystone'
|
|
|
|
|
2018-04-25 16:49:10 +01:00
|
|
|
# Print out all the runtime parameters and their values for this job
|
|
|
|
In [6]: for k, v in job_1.spec.runtime_parameters.iteritems():
|
|
|
|
...: print (k, v)
|
|
|
|
(u'airplane_mode': False)
|
|
|
|
(u'brightness': 100)
|
|
|
|
(u'governor': 'userspace')
|
|
|
|
(u'big_frequency': 1700000)
|
|
|
|
(u'little_frequency': 1400000)
|
|
|
|
|
|
|
|
# Print out all the metrics avalible for this job
|
|
|
|
In [7]: job_1.metrics
|
|
|
|
Out[7]:
|
2018-01-19 10:49:56 +00:00
|
|
|
[<thread 0 score: 14423105 (+)>,
|
|
|
|
<thread 0 DMIPS: 8209 (+)>,
|
|
|
|
<thread 1 score: 14423105 (+)>,
|
|
|
|
<thread 1 DMIPS: 8209 (+)>,
|
|
|
|
<thread 2 score: 14423105 (+)>,
|
|
|
|
<thread 2 DMIPS: 8209 (+)>,
|
|
|
|
<thread 3 score: 18292638 (+)>,
|
|
|
|
<thread 3 DMIPS: 10411 (+)>,
|
|
|
|
<thread 4 score: 17045532 (+)>,
|
|
|
|
<thread 4 DMIPS: 9701 (+)>,
|
|
|
|
<thread 5 score: 14150917 (+)>,
|
|
|
|
<thread 5 DMIPS: 8054 (+)>,
|
|
|
|
<time: 0.184497 seconds (-)>,
|
|
|
|
<total DMIPS: 52793 (+)>,
|
|
|
|
<total score: 92758402 (+)>]
|
|
|
|
|
|
|
|
|
2018-04-25 16:49:10 +01:00
|
|
|
|
|
|
|
We can also retrieve information about the target that the run was performed on
|
|
|
|
for example:
|
2018-01-19 10:49:56 +00:00
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
2018-04-25 16:49:10 +01:00
|
|
|
# Print out the target's abi:
|
|
|
|
In [9]: run_output.target_info.abi
|
|
|
|
Out[9]: u'arm64'
|
|
|
|
|
|
|
|
# The os the target was running
|
|
|
|
In [9]: run_output.target_info.os
|
|
|
|
Out[9]: u'android'
|
2018-01-19 10:49:56 +00:00
|
|
|
|
2018-04-25 16:49:10 +01:00
|
|
|
# And other information about the os version
|
|
|
|
In [10]: run_output.target_info.os_version
|
|
|
|
Out[10]:
|
2018-01-19 10:49:56 +00:00
|
|
|
OrderedDict([(u'all_codenames', u'REL'),
|
|
|
|
(u'incremental', u'3687331'),
|
|
|
|
(u'preview_sdk', u'0'),
|
|
|
|
(u'base_os', u''),
|
|
|
|
(u'release', u'7.1.1'),
|
|
|
|
(u'codename', u'REL'),
|
|
|
|
(u'security_patch', u'2017-03-05'),
|
|
|
|
(u'sdk', u'25')])
|
|
|
|
|
|
|
|
|