206 lines
10 KiB
HTML
206 lines
10 KiB
HTML
<header class="bs-header">
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
<h1 class="page-header">
|
|
OpenStack Health
|
|
<small>
|
|
is a dashboard for visualizing test results of OpenStack CI jobs.
|
|
</small>
|
|
</h1>
|
|
<crumb-menu show-group-key="true"
|
|
show-resolution="true"
|
|
show-period="true"></crumb-menu>
|
|
<loading-indicator></loading-indicator>
|
|
<fresh-check></fresh-check>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
<div class="panel panel-default">
|
|
<div class="panel-heading panel-controls">
|
|
<h3 class="panel-title">Total Jobs</h3>
|
|
<div class="input-group">
|
|
<div class="input-group-addon"><i class="fa fa-search"></i></div>
|
|
<input type="text" class="form-control"
|
|
placeholder="Search for {{ home.groupKey }} with regex"
|
|
ng-model="home.searchProject"
|
|
ng-model-options="{debounce: 250}"
|
|
ng-change="home.onSearchChange()"
|
|
uib-tooltip="You can see {{home.projects.length}} {{ home.groupKey }}(s). Details are at the bottom.">
|
|
</div>
|
|
</div>
|
|
<div class="panel-body">
|
|
<chart width="100%" height="250px">
|
|
<chart-axis name="x" opposes="y" type="time"
|
|
path=".x" align="bottom" orient="horizontal"
|
|
granular-format="%x %X"></chart-axis>
|
|
<chart-axis name="y" opposes="x" type="linear"
|
|
path=".y" align="left" orient="vertical"
|
|
draw="true"></chart-axis>
|
|
|
|
<chart-dataset name="passes"
|
|
title="Passes"
|
|
data="home.passes"></chart-dataset>
|
|
<chart-dataset name="failures"
|
|
title="Failures"
|
|
data="home.failures"></chart-dataset>
|
|
|
|
<chart-canvas-line dataset="passes"
|
|
axes="x y"
|
|
stroke="blue"
|
|
line-width="1"></chart-canvas-line>
|
|
<chart-canvas-line dataset="failures"
|
|
axes="x y"
|
|
stroke="red"
|
|
line-width="1"></chart-canvas-line>
|
|
|
|
<chart-tooltip primary="x" secondary="y"></chart-tooltip>
|
|
</chart>
|
|
</div>
|
|
</div>
|
|
<div class="panel panel-default">
|
|
<div class="panel-heading panel-controls">
|
|
<h3 class="panel-title">Job Failure Rate</h3>
|
|
<div class="input-group">
|
|
<div class="input-group-addon"><i class="fa fa-search"></i></div>
|
|
<input type="text" class="form-control"
|
|
placeholder="Search for {{ home.groupKey }} with regex"
|
|
ng-model="home.searchProject"
|
|
ng-model-options="{debounce: 250}"
|
|
ng-change="home.onSearchChange()"
|
|
uib-tooltip="You can see {{home.projects.length}} {{ home.groupKey }}(s). Details are at the bottom.">
|
|
</div>
|
|
</div>
|
|
<div class="panel-body">
|
|
<chart width="100%" height="250px">
|
|
<chart-axis name="x" type="time" path=".x" opposes="y"
|
|
align="bottom" orient="horizontal"
|
|
granular-format="%x %X"></chart-axis>
|
|
<chart-axis name="y" type="linear" path=".y" opposes="x"
|
|
align="left" orient="vertical"
|
|
domain="[0, 1]" draw="true"
|
|
granular-format=".3f"></chart-axis>
|
|
|
|
<chart-dataset name="rate"
|
|
title="% Failures"
|
|
data="home.failRate"></chart-dataset>
|
|
|
|
<chart-canvas-line dataset="rate" axes="x y"
|
|
stroke="red"
|
|
line-width="1"></chart-canvas-line>
|
|
|
|
<chart-tooltip primary="x" secondary="y"></chart-tooltip>
|
|
</chart>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
<div class="panel panel-default table-responsive">
|
|
<div class="panel-heading">
|
|
<h3 class="panel-title">Failed Tests in Last 10 Failed Runs</h3>
|
|
</div>
|
|
<table class="table table-hover default-cols">
|
|
<thead>
|
|
<tr>
|
|
<th class="tiny"></th>
|
|
<th>Job</th>
|
|
<th>Artifacts Link</th>
|
|
<th># Failed</th>
|
|
<th>Likely Bugs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr nest="templates/run-details.html"
|
|
ng-repeat="(key, value) in home.recentRuns">
|
|
|
|
<td><span nest-toggle nest-indicator></span></td>
|
|
<td><a href nest-toggle>{{key | split:'/' | last:2 | pick:0}}</a></td>
|
|
<td>
|
|
<a target="_blank" href="{{ key }}">
|
|
{{key | split:'/' | last:2 | pick:1}}
|
|
<fa name="external-link"></fa>
|
|
</a>
|
|
</td>
|
|
<td>{{ value.fails.length }}</td>
|
|
<td>
|
|
<span ng-if="!!value.bugs">
|
|
<a ng-repeat="bug in value.bugs"
|
|
href="https://launchpad.net/bugs/{{bug}}"
|
|
uib-tooltip="Launchpad Bugs: {{bug}}"
|
|
target="_blank">{{bug}} <fa name="external-link"></fa>
|
|
</a>
|
|
</span>
|
|
<span ng-if="!value.bugs">-</span>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
<div class="panel panel-default table-responsive">
|
|
<div class="panel-heading panel-controls">
|
|
<h3 class="panel-title">{{home.groupKey | replace:'_':' ' | camelcase}} Status</h3>
|
|
<div class="input-group">
|
|
<div class="input-group-addon"><i class="fa fa-search"></i></div>
|
|
<input type="text" class="form-control"
|
|
placeholder="Search for {{ home.groupKey }} with regex"
|
|
ng-model="home.searchProject"
|
|
ng-model-options="{debounce: 250}"
|
|
ng-change="home.onSearchChange()">
|
|
</div>
|
|
</div>
|
|
<table table-sort class="table table-hover status-table" data="home.projects"
|
|
uib-popover-template="'templates/context-legend.html'"
|
|
popover-placement="top"
|
|
popover-trigger="mouseenter">
|
|
<thead>
|
|
<tr>
|
|
<th field="number" class="text-center">#</th>
|
|
<th sort-field="name" class="text-center">Name</a></th>
|
|
<th sort-field="passes" class="text-center">Passes</th>
|
|
<th sort-field="failures" class="text-center">Failures</th>
|
|
<th sort-field="passRate" class="text-center">% Passes</th>
|
|
<th sort-default sort-field="failRate" class="text-center">% Failures</th>
|
|
<th class="text-center">Bar Graph</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr table-ref="table" ng-repeat="p in home.projects | regex:'name':home.searchProject"
|
|
ng-class="p.failRate | ctxcls">
|
|
<td class="text-right">{{$index+1}}</td>
|
|
<td class="text-left">
|
|
<a ui-sref="groupedRuns({ runMetadataKey: home.groupKey, name: p.name })">{{p.name}}</a>
|
|
<span ng-if="!!home.apiRoot">
|
|
<a href="{{ home.apiRoot }}/runs/key/{{ home.groupKey }}/{{ p.name }}/recent/rss"
|
|
target="_blank">
|
|
<fa name="rss-square"></fa>
|
|
</a>
|
|
</span>
|
|
</td>
|
|
<td class="text-right">{{p.passes|number}}</td>
|
|
<td class="text-right">{{p.failures|number}}</td>
|
|
<td class="text-right">{{p.passRate*100|number:2}}</td>
|
|
<td class="text-right">{{p.failRate*100|number:2}}</td>
|
|
<td uib-tooltip-html="p.tooltip" tooltip-placement="top" tooltip-animation="false">
|
|
<chart-gauge-horizontal value="1 - p.failRate"
|
|
width="300"
|
|
height="20"></chart-gauge-horizontal>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|