[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [sysadmin/gerrit-ci-matrix] /: Stuff has been working for some while, sweet
From: Jan_Kundrát <jkt () flaska ! net>
Date: 2016-10-01 0:45:38
Message-ID: E1bq8Qs-0003GL-BW () code ! kde ! org
[Download RAW message or body]
Git commit 4918549590dedfc80ba03df22886095005f59da1 by Jan Kundrát.
Committed on 10/06/2015 at 20:00.
Pushed by jkt into branch 'master'.
Stuff has been working for some while, sweet
A +149 -0 matrix.html
M +1 -1 reports.json
http://commits.kde.org/sysadmin/gerrit-ci-matrix/4918549590dedfc80ba03df22886095005f59da1
diff --git a/matrix.html b/matrix.html
new file mode 100644
index 0000000..24a5469
--- /dev/null
+++ b/matrix.html
@@ -0,0 +1,149 @@
+<html>
+<head>
+<title>CI Status Matrix</title>
+<style type="text/css">
+ body { background: white; text-color: black; }
+ tr.heading { font-weight: bold; }
+ .hidden { display: none; }
+ td { border: 1px solid #222222; }
+ table { border-collapse: collapse; }
+ td.SUCCESS { background-color: #aaffaa; }
+ td.FAILURE { background-color: #ffaaaa; }
+ td.not-run { background-color: #dddddd; }
+</style>
+<script src="jquery-1.11.3.min.js" type="text/javascript"></script>
+<script type="text/javascript">
+
+var allTestJobs = new Object;
+var allRequests = [];
+var allResults = new Object;
+
+function format_duration(seconds, words) {
+ // shamelessly stolen from OpenStack Gerrit's hideci.js, Apache license
+ if (seconds == null) {
+ return "unknown";
+ }
+ var minutes = Math.floor(seconds/60);
+ var hours = Math.floor(minutes/60);
+ seconds = Math.floor(seconds % 60);
+ minutes = Math.floor(minutes % 60);
+ r = '';
+ if (words) {
+ if (hours) {
+ r += hours;
+ r += ' hr ';
+ }
+ r += minutes + ' min';
+ } else {
+ if (hours < 10) r += '0';
+ r += hours + ':';
+ if (minutes < 10) r += '0';
+ r += minutes + ':';
+ if (seconds < 10) r += '0';
+ r += seconds;
+ }
+ return r;
+}
+
+function loadCI(jQuery) {
+
+ $('#loading').html('Loading projects...');
+
+ $.getJSON("http://ci-logs.kde.flaska.net/ci-status/all-projects",
+ function(data) {
+ $('#loading').html('Loading test results...');
+ var allProjects = [];
+ $.each(data.rows, function(rowNum){
+ var row = data.rows[rowNum];
+ allProjects.push(row.key);
+ });
+ allProjects.sort();
+
+ var tr = $('<tr>').addClass('heading');
+ tr.append($('<td>').text('Project'));
+ $('#matrix').append(tr);
+
+ for (var i = 0; i < allProjects.length; ++i) {
+ var projectName = allProjects[i];
+ allRequests.push(projectRow(projectName));
+ var tr = $('<tr>').addClass('row-proj-' + projectName);
+ tr.append($('<td>').text(projectName));
+ $('#matrix').append(tr);
+ }
+
+ $.when.apply(null, allRequests).done(function() {
+ $('#loading').addClass('hidden');
+ var jobNames = Object.keys(allTestJobs);
+ jobNames.sort();
+
+ var prefixes = ['rebuilddep-', 'kf5-', 'trojita-'];
+ for (var j = 0; j < jobNames.length; ++j) {
+ var name = jobNames[j];
+ for (var i = 0; i < prefixes.length; ++i) {
+ var prefix = prefixes[i];
+ if (name.lastIndexOf(prefix, 0) === 0) {
+ name = name.substr(prefix.length);
+ }
+ }
+ var td = $('<td>').text(name);
+ $('tr.heading').append(td);
+ }
+
+ for (var i = 0; i < allProjects.length; ++i) {
+ var projectName = allProjects[i];
+ var tr = $('tr.row-proj-' + projectName);
+ for (var j = 0; j < jobNames.length; ++j) {
+ var jobName = jobNames[j];
+ var td = $('<td>');
+ if (allResults[projectName][jobName]) {
+ var job = allResults[projectName][jobName];
+ var res = job.result;
+ td.append(res);
+ td.append(' ');
+ var consoleLink = job.url.replace(/\/index\.html$/, \
'/shell_output.log'); + if (consoleLink != job.url) {
+ td.append($('<a>').attr('href', consoleLink).text('console'));
+ td.append(', ');
+ }
+ td.append($('<a>').attr('href', job.url).text('logs'));
+ td.attr('title', format_duration(job.duration) + '\non ' + new \
Date(job.time * 1000)); + if (res == 'SUCCESS') {
+ td.addClass(res);
+ } else {
+ td.addClass('FAILURE');
+ }
+ } else {
+ td.addClass('not-run');
+ }
+ tr.append(td);
+ };
+ }
+ })
+ });
+}
+
+function projectRow(project) {
+ return $.getJSON("http://ci-logs.kde.flaska.net/ci-status/for-project/" + \
project).done(function(data) { + var res = new Object;
+ $.each(data.rows, function(rowNum){
+ var row = data.rows[rowNum];
+ var timestamp = row.key[1];
+ $.each(row.value, function(buildJob) {
+ var job = row.value[buildJob];
+ res[buildJob] = job;
+ allTestJobs[buildJob] = null;
+ });
+ });
+ allResults[project] = res;
+ });
+}
+
+$(document).ready(loadCI);
+</script>
+</head>
+<body>
+ <h1>CI Status Matrix</h1>
+ <p id="loading">Loading scripts...</p>
+ <table id="matrix"></table>
+</body>
+</html>
diff --git a/reports.json b/reports.json
index 2732615..fbc6d2a 100644
--- a/reports.json
+++ b/reports.json
@@ -1 +1 @@
-{"_id":"_design/reports","_rev":"7-ecb657a4ee1f353ea8190d6f30625c90","language":"javascript","views":{"all-projects":{"map":"function(doc) \
{\n if (doc.pipeline && doc.pipeline == 'rebuilddep' && doc.project) {\n \
emit(doc.project, null);\n }\n}","reduce":"_count"},"latest":{"map":"function(doc) \
{\n if (doc.pipeline && doc.pipeline == 'rebuilddep' && doc.project) {\n var \
result = {};\n for (var jobNum in doc.jobs) {\n var job = doc.jobs[jobNum];\n \
result[job.name] = {'result': job.result, 'url': job.url, 'duration': job.end_time - \
job.start_time};\n }\n emit([doc.project, doc.enqueue_time], result);\n \
}\n}"}}} +{"_id":"_design/reports","_rev":"8-6ee5447fc9ad2c209d5bca52bee342d4","language":"javascript","views":{"all-projects":{"map":"function(doc) \
{\n if (doc.pipeline && doc.pipeline == 'rebuilddep' && doc.project) {\n \
emit(doc.project, null);\n }\n}","reduce":"_count"},"latest":{"map":"function(doc) \
{\n if (doc.pipeline && doc.pipeline == 'rebuilddep' && doc.project) {\n var \
result = {};\n for (var jobNum in doc.jobs) {\n var job = doc.jobs[jobNum];\n \
result[job.name] = {'result': job.result, 'url': job.url, 'duration': job.end_time - \
job.start_time, 'time': job.launch_time};\n }\n emit([doc.project, \
doc.enqueue_time], result);\n }\n}"}}}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic