-
Notifications
You must be signed in to change notification settings - Fork 5
/
build-factory.js
70 lines (55 loc) · 2.17 KB
/
build-factory.js
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
angular.module('buildApp').factory('buildFactory', function($http) {
var factory = {};
var getBuildTypes = function() {
return $http.get('http://tc/guestAuth/app/rest/buildTypes?locator=start:0,count:100');
};
var getBuildStatus = function(id) {
return $http.get('http://tc/guestAuth/app/rest/builds?locator=buildType:' + id + ',start:0,count:1&fields=build(id,status,state,buildType(name,id,projectName,paused))');
};
factory.getRunningBuilds = function() {
return $http.get('http://tc/guestAuth/app/rest/builds?locator=running:true');
};
factory.getBuilds = function() {
return getBuildTypes().then(function getBuildStatuses(data){
var gets = data.data.buildType.map(function(currentBuildType) {
return getBuildStatus(currentBuildType.id)
});
return Promise.all(gets)
})
};
factory.decodeBuild = function(build, runningBuilds) {
var state = build.state;
if(runningBuilds.indexOf(build.buildType.id) >= 0) {
state = 'running';
}
return {
'id': build.id,
'name': build.buildType.name,
'status': build.status,
'state': state,
'project': build.buildType.projectName,
'paused': build.buildType.paused,
'projectGroup': build.buildType.projectName.split('::')[0].trim()
}
};
factory.generateTiles = function(builds) {
var grouped = groupBy(builds, function(x) { return x.projectGroup });
var tiles = []
grouped.forEach(function(group) {
var badChildren = group.filter(function(b) { return !b.paused && b.status == 'FAILURE' })
var goodChildren = group.filter(function(b) { return b.paused || b.status != 'FAILURE' })
badChildren.forEach(function(b) { tiles.push(b) })
if(goodChildren.length > 1) {
var state = goodChildren[0].state;
goodChildren.filter(function(b) { return b.state == 'running' }).forEach(function(x) { state = x.state });
var tile = jQuery.extend(goodChildren[0], {'name': goodChildren[0].projectGroup, 'project': goodChildren[0].projectGroup, 'buildCount': goodChildren.length, 'state': state});
tiles.push(tile);
}
else {
goodChildren.forEach(function(b) { tiles.push(b) });
}
});
return tiles
};
return factory;
});