-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathscript.js
More file actions
116 lines (95 loc) · 3.41 KB
/
script.js
File metadata and controls
116 lines (95 loc) · 3.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
(function(ko, moment, buzz) {
var tcBaseUrl = getParameterByName('tcBaseUrl');
var authToken = getParameterByName('authToken');
var newUrl = removeURLParameter(window.location.href, 'authToken');
window.history.pushState('newUrl', "Title", newUrl);
var buildConfigId = getParameterByName('buildConfigId');
var blame = getParameterByName('blame') === 'true';
var showBuildTime = getParameterByName('showBuildTime') === 'true';
var projectName = getParameterByName('projectName');
var blink = getParameterByName('blink') === 'true';
var sad = getParameterByName('sad') === 'true';
var buildStatusEndPoint = "/app/rest/latest/buildTypes/id:" + buildConfigId + "/builds/count:1";
var buildStatusApiUrl = tcBaseUrl + buildStatusEndPoint + "?overrideAccept=application/json";
var trombone = new buzz.sound("sadtrombone.mp3");
var ViewModel = function () {
var self = this;
self.buildStatus = ko.observable();
self.projectName = ko.observable();
self.offenderText = ko.observable();
self.buildStatusText = ko.observable();
self.buildTime = ko.observable();
self.blink = ko.observable(blink);
setNewBuildStatus();
setInterval(setNewBuildStatus, 10000);
function setNewBuildStatus() {
getBuildInfo(function (data) {
var oldBuildStatus = self.buildStatus();
self.buildStatus(data.status);
self.buildStatusText('BUILD ' + data.status);
self.projectName(projectName || data.buildType.projectName);
if (showBuildTime) {
var startDate = moment(data.startDate, 'YYYYMMDDTHHmmssZ');
var finishDate = moment(data.finishDate, 'YYYYMMDDTHHmmssZ');
var elapsed = moment(finishDate.diff(startDate)).format('mm[m]:[ ]ss[s]');
self.buildStatusText(self.buildStatusText() + ' (' + elapsed + ')');
}
if (data.status === 'FAILURE') {
if (blame) {
self.offenderText(data.lastChanges.change[0].username + ' broke the build');
}
if (oldBuildStatus === 'SUCCESS' && sad) {
trombone.play();
}
} else if (data.status === 'SUCCESS') {
if (oldBuildStatus === 'FAILURE') {
self.offenderText('');
}
}
});
}
function getBuildInfo(success) {
$.ajax({
url: buildStatusApiUrl,
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Basic " + authToken);
},
success: success
});
}
}
function getParameterByName(name, url) {
if (!url) {
url = window.location.href;
}
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
function removeURLParameter(url, parameter) {
//prefer to use l.search if you have a location/link object
var urlparts= url.split('?');
if (urlparts.length>=2) {
var prefix= encodeURIComponent(parameter)+'=';
var pars= urlparts[1].split(/[&;]/g);
//reverse iteration as may be destructive
for (var i= pars.length; i-- > 0;) {
//idiom for string.startsWith
if (pars[i].lastIndexOf(prefix, 0) !== -1) {
pars.splice(i, 1);
}
}
url= urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : "");
return url;
} else {
return url;
}
}
$(function () {
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
});
})(ko, moment, buzz);