[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