========
StackViz
========
A visualization utility to help analyze the performance of DevStack setup and
Tempest executions.
Installation
============
Installation of the frontend requires Node.js and Bower. On Ubuntu::
sudo apt-get install nodejs npm nodejs-legacy
sudo npm install -g bower
Then, install the Bower components by running, from the project directory::
bower install
Lastly, install the project. Pip is recommended, like so::
sudo pip install .
Usage - Server
==============
First, install the necessary dependencies with Pip::
sudo pip install -r requirements.txt
The Django development server may then be used to view the interface. Run::
python manage.py runserver
You can then browse to the printed URL in your browser of choice.
Usage - Static Site
===================
The server can be "snapshotted" and exported to a static HTML site using the
installed :code:`stackviz-export` utility. StackViz can then be viewed using any
web browser with no requirement of any server-side processing.
To generate, run::
stackviz-export -r path/to/testrepository/ dest_dir
... where `dest_dir` is the path to a target directory where files should be
written. When finished, the :code:`index.html` file can be opened in a browser.
Note that the above gathers test data from a `testrepository` directory, though
direct subunit streams either from files or standard input are also supported.
For more information, see `stackviz-export --help`.
Note that some browsers enforce content origin policies that may disallow
XHRs when viewed directly from the local filesystem. To work around this, you
can use something like the Python :code:`SimpleHTTPServer`::
python -m SimpleHTTPServer
GZipped Data
------------
As the log data can become quite large, exported files can be compressed with
GZip to significantly reduce the size of the data files. To enable, run::
stackviz-export -r path/to/testrepository/ --gzip dest_dir
Data files will then be written in compressed form, and will be suffixed with
:code:`*.json.gz`. Note that web servers must be properly configured to serve
pre-compressed files. Notably, Python's :code:`SimpleHTTPServer` will not do
this by default. However, `Twisted `_ can be
used as a drop-in replacement as follows::
twistd -no web --path=.
Other web servers, such as Apache, should also serve these files correctly
without any extra configuration.
(Specifically, the response must have headers
:code:`Content-Type: application/json` and :code:`Content-Encoding: gzip`.)
DStat Data
----------
StackViz will also show charts generated from
`DStat logs `_, if available. Note that
console output from DStat is not sufficient - a CSV logfile must be used. Then,
provide the logfile to :code:`stackviz-export`::
stackviz-export -r testrepository/ --dstat path/to/dstat.csv dest_dir
Log Locations
=============
Log locations are configured along with normal Django settings in
:code:`stackviz/settings.py`, or specified as command-line arguments to
:code:`stackviz-export`. Several different types of logs are rendered by
StackViz are read by default from:
* Tempest (`testr` repositories): :code:`./test_data/`
* Dstat: :code:`./dstat.log`
* DevStack: *TODO*
Testing
=======
Server (Python)
---------------
Server-side tests can be run using Tox::
tox
A linter (flake8) will be run automatically and its output included in the
report.
Client (JavaScript)
-------------------
Client-side tests are run via `Karma `_.
To run, install the :code:`karma-cli` and the npm dependencies::
npm install
sudo npm install --global karma-cli
Then, run Karma::
karma start --single-run
Tests will be executed using `PhantomJS `_ by default.
Similarly, `ESLint `_ can be used to verify formatting::
eslint stackviz/static/