Add upstream run data display page
This commit is contained in:
parent
535af7b879
commit
c32375e4bc
|
@ -3,3 +3,4 @@ DjangoRestless>=0.0.10
|
|||
python-subunit>=0.0.18
|
||||
testtools>=0.9.30
|
||||
testrepository>=0.0.18
|
||||
subunit2sql>=0.7.0
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
"use strict";
|
||||
|
||||
window.addEventListener('load', function() {
|
||||
|
||||
//default panel display
|
||||
$("#runs-panel").hide();
|
||||
$("#gerrit-panel").show();
|
||||
|
||||
//Takes a list of runs and creates a pretty div for each
|
||||
function display_runs(data) {
|
||||
$("#runs-panel").show();
|
||||
for (var i in data) {
|
||||
var run_obj = data[i]
|
||||
var div = $("<div class=\"span12\" id=\"run-div-" + i + "\"></div>");
|
||||
$(div.append("<a href=" + run_obj['artifacts'] + " target=\"_blank\">" + run_obj['artifacts'] + "\n</a>"));
|
||||
$("#runs-panel").append(div);
|
||||
$("#runs-panel-heading").html("Displaying " + i + " Runs");
|
||||
}
|
||||
}
|
||||
|
||||
$('#gerrit-id').keypress(function (e) {
|
||||
if (e.which == 13) {
|
||||
$( "#gerrit-id-button" ).click();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
$('#gerrit-id-button').click(function() {
|
||||
var request = 'upstream_api_changeid_'+$("#gerrit-id").val()+'.json';
|
||||
$("#runs-panel").append("<a href=\"https://review.openstack.org/" + $("#gerrit-id").val() +
|
||||
"/\" target=\"_blank\"><h2> Change ID: " + $("#gerrit-id").val() + "</h2></a>");
|
||||
$("#gerrit-panel").html("Loading Test Runs...");
|
||||
|
||||
$.getJSON((request),function(data) {
|
||||
$("#gerrit-panel").hide();
|
||||
display_runs(data);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
});
|
|
@ -39,11 +39,11 @@
|
|||
<li>
|
||||
<a href="#"><i class="fa fa-bar-chart-o fa-fw"></i> Upstream<span class="fa arrow"></span></a>
|
||||
<ul class="nav nav-second-level">
|
||||
<li>
|
||||
<!--<li>
|
||||
<a href="upstream_test.html"><i class="fa fa-bar-chart-o fa-fw"></i> Test Stats</a>
|
||||
</li>
|
||||
</li>-->
|
||||
<li>
|
||||
<a href="upstream_run.html"><i class="fa fa-clock-o fa-fw"></i> Run Metadata</a>
|
||||
<a href="upstream_run.html"><i class="fa fa-clock-o fa-fw"></i> Run Data</a>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- /.nav-second-level -->
|
||||
|
|
|
@ -1,14 +1,36 @@
|
|||
{% extends 'template.html' %}
|
||||
{% load staticfiles %}
|
||||
|
||||
{% block title %}Upstream Run Metadata{% endblock %}
|
||||
|
||||
{% block head-extra %}<script src="{% static 'js/upstream_run.js' %}"></script>{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h1 class="page-header">Upstream Run Metadata</h1>
|
||||
<h1 class="page-header">Upstream Run Data</h1>
|
||||
</div>
|
||||
<!-- /.col-lg-12 -->
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel panel-heading" id="runs-panel-heading">Analyze Run</div>
|
||||
<div class="panel panel-body">
|
||||
<div id="gerrit-panel">
|
||||
Enter a Gerrit ChangeID: <input type="text" id="gerrit-id">
|
||||
<input id="gerrit-id-button" type="button" value="Submit">
|
||||
</div>
|
||||
<div id="runs-panel"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
|
@ -1,14 +1,42 @@
|
|||
from subunit2sql.db import api
|
||||
from subunit2sql import shell
|
||||
from subunit2sql.db import api, models
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy.orm.state import InstanceState
|
||||
from restless.views import Endpoint
|
||||
|
||||
def main():
|
||||
# Initialize subunit2sql config
|
||||
shell.parse_args([])
|
||||
db_uri = 'mysql://query:query@logstash.openstack.org:3306/subunit2sql'
|
||||
shell.CONF.set_override('connection', db_uri, group='database')
|
||||
latest_run = api.get_latest_run()
|
||||
print latest_run.id
|
||||
print latest_run.run_time
|
||||
import json
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
def _get_runs(change_id):
|
||||
'''
|
||||
When given the change_id of a Gerrit change, a connection will be made to
|
||||
the upstream subunit2sql db and query all run meta having that change_id
|
||||
:param change_id: the Gerrit change_id to query
|
||||
:return: a json dict of run_meta objects
|
||||
'''
|
||||
engine=create_engine('mysql://query:query@logstash.openstack.org:3306/subunit2sql')
|
||||
|
||||
Session = sessionmaker(bind=engine)
|
||||
|
||||
# create a Session
|
||||
session = Session()
|
||||
|
||||
list_of_runs = api.get_runs_by_key_value(key="build_change",value=change_id,
|
||||
session=session)
|
||||
ret_list = []
|
||||
|
||||
for run in list_of_runs:
|
||||
ret_list.append(run.to_dict())
|
||||
|
||||
return ret_list
|
||||
|
||||
|
||||
class GerritURLEndpoint(Endpoint):
|
||||
|
||||
def get(self, request, change_id):
|
||||
'''
|
||||
:param request:
|
||||
:param change_id:
|
||||
:return: Collection of run objects associated with a
|
||||
specific CID
|
||||
'''
|
||||
return _get_runs(change_id)
|
||||
|
|
|
@ -1,4 +1,16 @@
|
|||
from django.views.generic import TemplateView
|
||||
|
||||
# TODO Planned f(x):
|
||||
# 1. Input a run_id from an upstream run to display run info
|
||||
# 2. Compare runs by metadata
|
||||
#
|
||||
# 1.
|
||||
# EX: url for logstash=
|
||||
# http://logs.openstack.org/92/206192/2/check/gate-subunit2sql-python27/c1ff374/
|
||||
#
|
||||
# a. link between logstash and subunit2sql (urlparser)
|
||||
# b. display server-side as well as client-side logs
|
||||
#
|
||||
class RunView(TemplateView):
|
||||
template_name = 'upstream/run.html'
|
||||
template_name = 'upstream/run.html'
|
||||
|
||||
|
|
|
@ -1,4 +1,8 @@
|
|||
from django.views.generic import TemplateView
|
||||
|
||||
# TODO: Planned f(x):
|
||||
# Compare one specific test against its moving average
|
||||
#
|
||||
|
||||
class TestView(TemplateView):
|
||||
template_name = 'upstream/test.html'
|
|
@ -3,14 +3,19 @@ from django.conf.urls import patterns, include, url
|
|||
from .run import RunView
|
||||
from .test import TestView
|
||||
|
||||
from .api import GerritURLEndpoint
|
||||
|
||||
urlpatterns = patterns('',
|
||||
|
||||
url(r'^run.html$',
|
||||
RunView.as_view(),
|
||||
name='aggregate_results'),
|
||||
name='run_metadata'),
|
||||
|
||||
url(r'^test.html$',
|
||||
TestView.as_view(),
|
||||
name='summary_results')
|
||||
name='test_data'),
|
||||
|
||||
url(r'^api_changeid_(?P<change_id>\d+).json$',
|
||||
GerritURLEndpoint.as_view(),
|
||||
name='gerrit_url')
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue