2016-03-10 11:36:04 -07:00
|
|
|
===================
|
|
|
|
AngularJS Front-end
|
|
|
|
===================
|
|
|
|
|
|
|
|
The AngularJS front-end uses config files generated by :code:`stackviz-export`
|
|
|
|
to display a variety of information regarding test runs. This document breaks
|
|
|
|
down the various components of the Stackviz Angular app.
|
|
|
|
|
|
|
|
Pages
|
|
|
|
=====
|
|
|
|
|
|
|
|
----
|
|
|
|
Home
|
|
|
|
----
|
|
|
|
:Path: <host>/#/
|
|
|
|
:Directive: :code:`./app/views/home.html`
|
|
|
|
:Controller: :code:`./app/js/controllers/home.js`
|
|
|
|
|
|
|
|
The landing page for Stackviz consists of two elements. The first is a summary
|
|
|
|
panel that shows statistics for the run including runtime (MM:SS), total number
|
|
|
|
of tests run, number of failed tests, and number of skipped tests. The button
|
|
|
|
in the footer of this panel links to the timeline, where individual tests can
|
|
|
|
be browsed further. The second element is a panel showing all of the failures
|
|
|
|
for the current run, including the last few lines of their tracebacks. The test
|
|
|
|
divs here link to their corresponding Test Details page.
|
|
|
|
|
|
|
|
--------
|
|
|
|
Timeline
|
|
|
|
--------
|
|
|
|
:Path: <host>/#/<run>/timeline?test=<test>/
|
|
|
|
:Directive: :code:`./app/views/timeline.html`
|
|
|
|
:Controller: :code:`./app/js/controllers/timeline.js`
|
|
|
|
|
|
|
|
The Timeline provides an overview of all the tests that were executed as part
|
|
|
|
of a run. Each lane in the timeline corresponds to one worker thread on the
|
|
|
|
host machine. Each rectangle in the timeline represents one test. When a
|
|
|
|
rectangle is selected, the details panel below the timeline is populated with
|
|
|
|
information about the test. Each test rectangle is also color-coordinated:
|
|
|
|
green is passing, blue is skipped, and red is failed.
|
|
|
|
|
|
|
|
The details panel below the timeline shows information pertaining to the
|
|
|
|
current test (it is empty if no test is selected): test class, test module,
|
|
|
|
which worker executed it, the duration, and start & finish timestamps. The
|
|
|
|
footer contains a button that links to the test details page for the selected
|
|
|
|
test.
|
|
|
|
|
|
|
|
------------
|
|
|
|
Test Details
|
|
|
|
------------
|
|
|
|
:Path: <host>/#/<run>/test-details/<test>/
|
|
|
|
:Directive: :code:`./app/views/test-details.html`
|
2016-03-24 13:32:05 -06:00
|
|
|
:Controller: :code:`./app/js/controllers/test-details.js`
|
2016-03-10 11:36:04 -07:00
|
|
|
|
|
|
|
The test details page consists of one panel that displays various log info
|
|
|
|
from one test. The first tab contains summary information similar to the info
|
|
|
|
found on the test panel on the timeline. Additional tabs in this panel
|
|
|
|
are dependent upon the logs that the test kept. Each of these tabs provides
|
|
|
|
additional information to aid debugging. The most common tabs include:
|
|
|
|
|
|
|
|
**pythonlogging**
|
|
|
|
Contains logs for API calls that were used in the test. This
|
|
|
|
log is often quite large, as it contains full headers for every request
|
|
|
|
at INFO, DEBUG, WARNING, and ERROR levels. To make searching these logs
|
|
|
|
easier, the test details page has a built in filter for parsing by log
|
|
|
|
level. In the header of the test details page, the magnifying glass
|
|
|
|
can be clicked to only show pythonlogging lines that correspond to a
|
|
|
|
certain level of detail. To find errors in pythonlogging quickly, it is
|
|
|
|
advisable to only select the WARNING and ERROR levels for display.
|
|
|
|
|
|
|
|
**reason**
|
|
|
|
Only available for skipped tests. Lists the reason for skipping the test,
|
|
|
|
usually to avoid triggering an outstanding bug.
|
|
|
|
|
|
|
|
**traceback**
|
|
|
|
Only available for failed tests. Shows the full traceback of the test
|
|
|
|
runner's error output when the test failed. This is useful in quickly
|
|
|
|
isolating the cause of a failure. There can be multiple traceback logs
|
|
|
|
(e.g. traceback, traceback1) for one test.
|
|
|
|
|
|
|
|
When enough information has been gleaned from more detailed logs, the button
|
|
|
|
in the panel filter can be used to quickly navigate back to the timeline page.
|
|
|
|
|
|
|
|
Directives
|
|
|
|
==========
|
|
|
|
|
2016-03-24 13:32:05 -06:00
|
|
|
**tempestSummary**
|
|
|
|
The tempest summary directive consists of one panel that shows stats for
|
|
|
|
one run: Duration of the run, number of tests run, number of tests skipped,
|
|
|
|
and number of tests failed. :code:`timeDiff` (the duration of the run) is
|
|
|
|
calculated from the start and end timestamps contained in summary data.
|
|
|
|
All other fields are populated directly from the summary data, via a call
|
|
|
|
to the dataset service.
|
|
|
|
|
|
|
|
**testDetailsSearch**
|
|
|
|
:code:`testDetailsSearch` uses two HTML pages to search the test details
|
|
|
|
page: :code:`test-details-search-popover.html` and :code:`test-details-search.html`.
|
|
|
|
The popover contains the filter levels for the :code:`pythonlogging` tab:
|
|
|
|
INFO, DEBUG, WARNING, ERROR. This directive is used as the template for
|
|
|
|
:code:`test-details-search`, per AngularJS popover convention. The function
|
|
|
|
used to parse the logs, :code:`parsePythonLogging` actually lives in the
|
|
|
|
controller for testDetailsSearch, and is passed through both the prior
|
|
|
|
directives' scopes. This function reads in the :code:`pythonLogging` tab
|
|
|
|
as one text object, then splits it by :code:`\n` to create an array of
|
|
|
|
lines. Each line is then added back to the :code:`pythonLogging` tab if it
|
|
|
|
contains the specific log level somewhere in the line.
|
|
|
|
|
|
|
|
**timeline**
|
|
|
|
The timeline directive is a container for the actual timeline components,
|
|
|
|
detailed below.
|
|
|
|
|
|
|
|
**timelineDetails**
|
|
|
|
|
|
|
|
**timelineDstat**
|
|
|
|
|
|
|
|
**timelineOverview**
|
|
|
|
|
|
|
|
**timelineSearch**
|
|
|
|
|
|
|
|
**timelineViewport**
|
|
|
|
|
2016-03-10 11:36:04 -07:00
|
|
|
|
|
|
|
Services
|
|
|
|
========
|
|
|
|
|
2016-03-24 13:32:05 -06:00
|
|
|
**dataset**
|
|
|
|
The dataset service is an API that provides the front-end with all of the
|
|
|
|
data generated by :code:`stackviz-export`. All data processed by
|
|
|
|
:code:`stackviz-export` ends up in the `./app/data/` directory to be called
|
|
|
|
by dataset service with :code:`$http` and :code:`$q` directives. Below is
|
|
|
|
the list of calls:
|
|
|
|
- :code:`list` returns `config.json` using GET.
|
|
|
|
- :code:`get(id)` calls :code:`list`, then iterates through all the
|
|
|
|
available datasets for the requested id number. Rejects if not found.
|
|
|
|
- :code:`raw(dataset)` returns `<dataset>_raw.json` file using GET.
|
|
|
|
- :code:`details(dataset)` returns `<dataset>_details.json` file using GET.
|
|
|
|
- :code:`tree(dataset)` returns `<dataset>_tree.json` file using GET.
|
|
|
|
- :code:`dstat(dataset)` returns `dstat_log.csv` file using GET, if available.
|
|
|
|
|
|
|
|
**progress**
|
|
|
|
A wrapper for :code:`nprogress`, a progress bar library. Used in the timeline
|
|
|
|
and test details pages to show progress in loading datasets.
|