Jenkins Visualization

Fuego test results are presented in the Jenkins interface via a number of mechanisms.

built-in Jenkins status [edit section]

Jenkins automatically presents the status of the last few tests (jobs) that have been executed, on the job page for those jobs.

A list of previous builds of the job are shown in the left-hand pane of the page for the job, showing colored balls indicating the test status.

FIXTHIS - add more details here

flot plugin [edit section]

The flot plugin for Jenkins provides visualization of test results.

In Fuego 1.0 and previous (JTA), these provided plot data for Benchmark results.

See flot for more information.

Desired behavior [edit section]

Here is an outline of the desired behavior of the Jenkins visualization (Fuego charts) for the 1.2 release:

There are 4 different chart output options:

Output is controlled by a file called: chart_data.json

Inside that, there is a data structure indicating the configuration for one or more charts, called the chart_config.

This can be specified in the test directory, in the file chart_config.json

If chart_config.json is missing, then defaults are used:

(not currently implemented)The chart_config can also specify a list of tguids to process (either measures, testcases or a combination of those.

A job page shows the data for all specs and boards related to that test. e.g. min1.default.Benchmark.bonnie shows results for:

The module fuego_parser_results.py is used to generate results.json

The module prepare_chart_data.py is used to generate flat_plot_data.txt, which is then used to create chart_data.son. It uses chart_config.json to determine what results to include in chart_data.json.

The flot program mod.js is used to draw the actual plots and tables based on chart_data.json. mod.js is included in the web page for the job view by Jenkins (along with the base flot libraries and jquery library, which flot uses).

Detailed chart information [edit section]

measure_plot [edit section]

A measure_plot is a graph of measures for a benchmark, with the following attributes:
  title=<test>-<testset>
  X series=build number
  Y1 series=result
  Y1 label=<board>-<spec>-<test>-<kernel>-<tguid>
  Y2 series=ref
  Y2 label=<board>-<spec>-<test>-<kernel>-<tguid>-ref

It plots measures (y) versus build_numbers.

Here's example data for this:

FIXTHIS - add testset, and draw one plot per testset.

testcase_table [edit section]

A testcase_table is a table of testcases (usually for a functional test), with the following attributes:
  title=<board>-<spec>-<test>-<kernel>-<tguid>
  headers:
     board:
     test:
     kernel:
     tguid:
  row=(one per line with matching tguid in flat_chart_data.txt)
  columns=build_number, start_time/timestamp, duration, result

It shows testcase results by build_id (runs).

Daniel's table has:

  overall title=<test>
    chart title=<board>-<spec>-<testset>-<testcase>
    headers:
       board:
       kernel_version:
       test_spec:
       test_case:
       test_plan:
       test_set:
       toolchain:
   build number | status | start_time | duration

Cai's table has:

   overall title=<test>
   summary:
      latest total:
      latest pass:
      latest fail
      latest untest:
   table:
   "no" | <test-name>  | test time |
                               | start-time |
                               | end-time |
                               | board version |
                               | test dir |
                               | test device |
                               | filesystem |
                               | command line |
   --------------------------------------------
   testcase number | testcase     | result |

This shows the result of only one run (the latest)

Tim's testcase table has: (one table per board-testname-testset)

   overall title=<test>
   header:
     board
     kernel version
     spec?
     filesystem
     test directory?
     command line?
   --------------------------------------------
   tguid | results
         | build_number |
         | b1 | b2 | bn |
   <tguid1>|result1|result2|resultn|
        totals
   pass: |    |    |    |
   fail: |    |    |    |
   skip: |    |    |    |
   error:|    |    |    |
   --------------------------------------------

testset_summary_table [edit section]

A testset_summary_table is a table of testsets (usually for a complex functional test) with the following attributes:

  title=<board>
  headers:
     board:
     kernel(s):
  -----------------------------------------------------
                            |    counts
  build number   | test set | pass | fail| skip | err |
  <bn>           |  <ts1>   |
    (row-span    |  <ts2>   |
  as appropriate)|  <ts3>   |
  <b2n>          |  <ts1>   |
                 |  <ts2>   |

Here was the format of the first attempt:

  title=<board>-<spec>-<test>-<kernel>
  headers:
     board:
     test:
     kernel:
  -------------------------------------------------------------------------
                                                |    counts
  testset | build_number | start time| duration | pass | fail| skip | err |
  <ts>    | ...|


It shows testset summary results by runs

Here's an alternate testset summary arrangement, that I'm not using at the moment:

   --------------------------------------------
   testset | results
           | b1                      | b2    | bn    |
           | pass | fail | skip | err |p|f|s|e|p|f|s|e|
   <ts>    | <cnt>| <cnt>| <cnt>| <cnt>...            |
        totals
   --------------------------------------------

testset_summary_plot [edit section]

A testset_summary_plot is a graph of testsets (usually for a complex functional test) with the following attributes:
  title=<board>-<spec>-<test>-<kernel>
  X series=build number
  Y1 series=pass_count
  Y1 label=<board>-<spec>-<test>-<kernel>-<testset>-pass
  Y2 series=fail_count
  Y2 label=<board>-<spec>-<test>-<kernel>-<testset>-fail

It graphs testset summary results versus build_ids

structure of chart_data.json [edit section]

Here's an example:

feature deferred to a future release [edit section]

Architecture for generic charting [edit section]

Assuming you have a flat list of entries with attributes for board, testname, spec, tguid, result, etc., then you can use treat this like a sql database, and do the following:

There's a similar set of data (keys, looping) for defining plot data. With keys selecting the axes.

chart_config.json [edit section]

example [edit section]

schema [edit section]

Here is the schema for chart_config.json:

FIXTHIS - document the chart_config.json schema