Skip to content

Commit c53773b

Browse files
author
OpenShift Bot
authored
Merge pull request openshift#245 from benjaminapetersen/interesting-builds
Merged by openshift-bot
2 parents 785f6c5 + 87b0236 commit c53773b

File tree

3 files changed

+137
-57
lines changed

3 files changed

+137
-57
lines changed

app/scripts/controllers/overview.js

+12-18
Original file line numberDiff line numberDiff line change
@@ -306,31 +306,25 @@ angular.module('openshiftConsole')
306306
});
307307
};
308308

309-
var isRecentBuild = $filter('isRecentBuild');
310309
var groupBuilds = function() {
311-
if (!builds) {
310+
if(!builds) {
312311
return;
313312
}
314-
313+
// reset these maps
315314
$scope.recentPipelinesByDC = {};
316315
$scope.recentBuildsByOutputImage = {};
317-
318-
_.each(builds, function(build) {
319-
// Only show recent builds on the overview.
320-
if (!isRecentBuild(build)) {
321-
return;
322-
}
323-
324-
if (!isJenkinsPipelineStrategy(build)) {
325-
groupBuildByOutputImage(build);
326-
return;
327-
}
328-
329-
// Handle pipeline builds.
330-
groupPipelineByDC(build);
331-
});
316+
_.each(
317+
BuildsService.interestingBuilds(builds),
318+
function(build) {
319+
if(!isJenkinsPipelineStrategy(build)) {
320+
groupBuildByOutputImage(build);
321+
return;
322+
}
323+
groupPipelineByDC(build);
324+
});
332325
};
333326

327+
334328
// Show the "Get Started" message if the project is empty.
335329
var updateShowGetStarted = function() {
336330
// Check if there is any data visible in the overview.

app/scripts/services/builds.js

+61-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ angular.module("openshiftConsole")
55

66
var annotation = $filter('annotation');
77
var buildConfigForBuild = $filter('buildConfigForBuild');
8+
var isIncompleteBuild = $filter('isIncompleteBuild');
9+
var isNewer = $filter('isNewerResource');
810

911
var startBuild = function(buildConfigName, context) {
1012
var req = {
@@ -90,7 +92,6 @@ angular.module("openshiftConsole")
9092
});
9193
};
9294

93-
var isNewer = $filter('isNewerResource');
9495
var latestBuildByConfig = function(builds, /* optional */ filter) {
9596
var latestByConfig = {};
9697
_.each(builds, function(build) {
@@ -145,6 +146,60 @@ angular.module("openshiftConsole")
145146
return moment(endTimestamp).diff(moment(startTimestamp));
146147
};
147148

149+
var incompleteBuilds = function(builds) {
150+
return _.map(builds, function(build) {
151+
return isIncompleteBuild(build);
152+
});
153+
};
154+
155+
var completeBuilds = function(builds) {
156+
return _.map(builds, function(build) {
157+
return !isIncompleteBuild(build);
158+
});
159+
};
160+
161+
var lastCompleteByBuildConfig = function(builds) {
162+
return _.reduce(
163+
builds,
164+
function(result, build) {
165+
if(isIncompleteBuild(build)) {
166+
return result;
167+
}
168+
var bc = $filter('annotation')(build, 'buildConfig');
169+
if(isNewer(build, result[bc])) {
170+
result[bc] = build;
171+
}
172+
return result;
173+
}, {});
174+
175+
};
176+
177+
// result: incomplete builds + the single latest build for each build config.
178+
var interestingBuilds = function(builds) {
179+
var latestCompleteByConfig = {};
180+
var incompleteBuilds = _.filter(
181+
builds,
182+
function(build) {
183+
if(isIncompleteBuild(build)) {
184+
return true;
185+
}
186+
// for efficiency, since we have a loop, if the build is
187+
// complete we can build a map of latest complete builds by bcs
188+
var bc = $filter('annotation')(build, 'buildConfig');
189+
if(isNewer(build, latestCompleteByConfig[bc])) {
190+
latestCompleteByConfig[bc] = build;
191+
}
192+
});
193+
// in the end we want a single list for ng-repeating
194+
return incompleteBuilds
195+
.concat(
196+
_.map(
197+
latestCompleteByConfig,
198+
function(build) {
199+
return build;
200+
}));
201+
};
202+
148203
return {
149204
startBuild: startBuild,
150205
cancelBuild: cancelBuild,
@@ -156,6 +211,10 @@ angular.module("openshiftConsole")
156211
latestBuildByConfig: latestBuildByConfig,
157212
getBuildNumber: getBuildNumber,
158213
getStartTimestsamp: getStartTimestsamp,
159-
getDuration: getDuration
214+
getDuration: getDuration,
215+
incompleteBuilds: incompleteBuilds,
216+
completeBuilds: completeBuilds,
217+
lastCompleteByBuildConfig: lastCompleteByBuildConfig,
218+
interestingBuilds: interestingBuilds
160219
};
161220
});

dist/scripts/scripts.js

+64-37
Original file line numberDiff line numberDiff line change
@@ -2022,7 +2022,7 @@ c.image && (b[c.dockerImageReference] = a.metadata.name + "@" + c.image);
20222022
} ]), angular.module("openshiftConsole").factory("BaseHref", [ "$document", function(a) {
20232023
return a.find("base").attr("href") || "/";
20242024
} ]), angular.module("openshiftConsole").factory("BuildsService", [ "DataService", "$filter", function(a, b) {
2025-
var c = b("annotation"), d = b("buildConfigForBuild"), e = function(b, c) {
2025+
var c = b("annotation"), d = b("buildConfigForBuild"), e = b("isIncompleteBuild"), f = b("isNewerResource"), g = function(b, c) {
20262026
var d = {
20272027
kind:"BuildRequest",
20282028
apiVersion:"v1",
@@ -2031,10 +2031,10 @@ name:b
20312031
}
20322032
};
20332033
return a.create("buildconfigs/instantiate", b, d, c);
2034-
}, f = function(b, c, d) {
2034+
}, h = function(b, c, d) {
20352035
var e = angular.copy(b);
20362036
return e.status.cancelled = !0, a.update("builds", e.metadata.name, e, d);
2037-
}, g = function(b, c) {
2037+
}, i = function(b, c) {
20382038
var d = {
20392039
kind:"BuildRequest",
20402040
apiVersion:"v1",
@@ -2043,11 +2043,11 @@ name:b
20432043
}
20442044
};
20452045
return a.create("builds/clone", b, d, c);
2046-
}, h = function(a) {
2047-
return "true" === c(a, "openshift.io/build-config.paused");
2048-
}, i = function(a) {
2049-
return !!a && (!a.metadata.deletionTimestamp && !h(a));
20502046
}, j = function(a) {
2047+
return "true" === c(a, "openshift.io/build-config.paused");
2048+
}, k = function(a) {
2049+
return !!a && (!a.metadata.deletionTimestamp && !j(a));
2050+
}, l = function(a) {
20512051
var b = c(a, "pipeline.alpha.openshift.io/uses");
20522052
if (!b) return [];
20532053
try {
@@ -2059,42 +2059,69 @@ var e = [];
20592059
return _.each(b, function(b) {
20602060
b.name && (b.namespace && b.namespace !== _.get(a, "metadata.namespace") || "DeploymentConfig" === b.kind && e.push(b.name));
20612061
}), e;
2062-
}, k = function(a, b) {
2062+
}, m = function(a, b) {
20632063
return _.pick(b, function(b) {
20642064
var d = c(b, "buildConfig");
20652065
return !d || d === a;
20662066
});
2067-
}, l = b("isNewerResource"), m = function(a, b) {
2067+
}, n = function(a, b) {
20682068
var c = {};
20692069
return _.each(a, function(a) {
20702070
var e = d(a) || "";
2071-
b && !b(a) || l(a, c[e]) && (c[e] = a);
2071+
b && !b(a) || f(a, c[e]) && (c[e] = a);
20722072
}), c;
2073-
}, n = function(a) {
2073+
}, o = function(a) {
20742074
var b = c(a, "buildNumber") || parseInt(a.metadata.name.match(/(\d+)$/), 10);
20752075
return isNaN(b) ? null :b;
2076-
}, o = function(a) {
2077-
return a.status.startTimestamp || a.metadata.creationTimestamp;
20782076
}, p = function(a) {
2079-
return _.round(a / 1e3 / 1e3);
2077+
return a.status.startTimestamp || a.metadata.creationTimestamp;
20802078
}, q = function(a) {
2079+
return _.round(a / 1e3 / 1e3);
2080+
}, r = function(a) {
20812081
var b = _.get(a, "status.duration");
2082-
if (b) return p(b);
2083-
var c = o(a), d = a.status.completionTimestamp;
2082+
if (b) return q(b);
2083+
var c = p(a), d = a.status.completionTimestamp;
20842084
return c && d ? moment(d).diff(moment(c)) :0;
2085+
}, s = function(a) {
2086+
return _.map(a, function(a) {
2087+
return e(a);
2088+
});
2089+
}, t = function(a) {
2090+
return _.map(a, function(a) {
2091+
return !e(a);
2092+
});
2093+
}, u = function(a) {
2094+
return _.reduce(a, function(a, c) {
2095+
if (e(c)) return a;
2096+
var d = b("annotation")(c, "buildConfig");
2097+
return f(c, a[d]) && (a[d] = c), a;
2098+
}, {});
2099+
}, v = function(a) {
2100+
var c = {}, d = _.filter(a, function(a) {
2101+
if (e(a)) return !0;
2102+
var d = b("annotation")(a, "buildConfig");
2103+
f(a, c[d]) && (c[d] = a);
2104+
});
2105+
return d.concat(_.map(c, function(a) {
2106+
return a;
2107+
}));
20852108
};
20862109
return {
2087-
startBuild:e,
2088-
cancelBuild:f,
2089-
cloneBuild:g,
2090-
isPaused:h,
2091-
canBuild:i,
2092-
usesDeploymentConfigs:j,
2093-
validatedBuildsForBuildConfig:k,
2094-
latestBuildByConfig:m,
2095-
getBuildNumber:n,
2096-
getStartTimestsamp:o,
2097-
getDuration:q
2110+
startBuild:g,
2111+
cancelBuild:h,
2112+
cloneBuild:i,
2113+
isPaused:j,
2114+
canBuild:k,
2115+
usesDeploymentConfigs:l,
2116+
validatedBuildsForBuildConfig:m,
2117+
latestBuildByConfig:n,
2118+
getBuildNumber:o,
2119+
getStartTimestsamp:p,
2120+
getDuration:r,
2121+
incompleteBuilds:s,
2122+
completeBuilds:t,
2123+
lastCompleteByBuildConfig:u,
2124+
interestingBuilds:v
20982125
};
20992126
} ]), angular.module("openshiftConsole").factory("DeploymentsService", [ "DataService", "$filter", "LabelFilter", function(a, b, c) {
21002127
function d() {}
@@ -3209,11 +3236,11 @@ c.recentPipelinesByDC[b] = c.recentPipelinesByDC[b] || [], c.recentPipelinesByDC
32093236
});
32103237
}
32113238
}
3212-
}, Z = a("isRecentBuild"), $ = function() {
3213-
u && (c.recentPipelinesByDC = {}, c.recentBuildsByOutputImage = {}, _.each(u, function(a) {
3214-
if (Z(a)) return z(a) ? void Y(a) :void W(a);
3239+
}, Z = function() {
3240+
u && (c.recentPipelinesByDC = {}, c.recentBuildsByOutputImage = {}, _.each(e.interestingBuilds(u), function(a) {
3241+
return z(a) ? void Y(a) :void W(a);
32153242
}));
3216-
}, aa = function() {
3243+
}, $ = function() {
32173244
var a = _.isEmpty(p) && _.isEmpty(s) && _.isEmpty(r) && _.isEmpty(q), b = p && s && r && q;
32183245
c.renderOptions.showGetStarted = b && a, c.renderOptions.showLoading = !b && a;
32193246
};
@@ -3228,19 +3255,19 @@ return g.isScalable(a, q, c.hpaByDC, c.hpaByRC, c.scalableDeploymentByConfig);
32283255
c.showMetrics = a;
32293256
}), j.get(b.project).then(_.spread(function(a, b) {
32303257
c.project = a, y.push(f.watch("pods", b, function(a) {
3231-
s = a.by("metadata.name"), O(), aa(), h.log("pods", s);
3258+
s = a.by("metadata.name"), O(), $(), h.log("pods", s);
32323259
})), y.push(f.watch("services", b, function(a) {
3233-
c.services = p = a.by("metadata.name"), U(), O(), I(), L(), V(), aa(), h.log("services (list)", p);
3260+
c.services = p = a.by("metadata.name"), U(), O(), I(), L(), V(), $(), h.log("services (list)", p);
32343261
})), y.push(f.watch("builds", b, function(a) {
3235-
u = a.by("metadata.name"), $(), aa(), h.log("builds (list)", u);
3262+
u = a.by("metadata.name"), Z(), $(), h.log("builds (list)", u);
32363263
})), y.push(f.watch("buildConfigs", b, function(a) {
3237-
t = a.by("metadata.name"), $(), h.log("builds (list)", u);
3264+
t = a.by("metadata.name"), Z(), h.log("builds (list)", u);
32383265
})), y.push(f.watch("routes", b, function(a) {
32393266
o = a.by("metadata.name"), H(), U(), V(), h.log("routes (subscribe)", c.routesByService);
32403267
})), y.push(f.watch("replicationcontrollers", b, function(a) {
3241-
r = a.by("metadata.name"), L(), O(), $(), aa(), h.log("replicationcontrollers (subscribe)", r);
3268+
r = a.by("metadata.name"), L(), O(), Z(), $(), h.log("replicationcontrollers (subscribe)", r);
32423269
})), y.push(f.watch("deploymentconfigs", b, function(a) {
3243-
q = a.by("metadata.name"), I(), L(), aa(), h.log("deploymentconfigs (subscribe)", c.deploymentConfigs);
3270+
q = a.by("metadata.name"), I(), L(), $(), h.log("deploymentconfigs (subscribe)", c.deploymentConfigs);
32443271
})), y.push(f.watch({
32453272
group:"extensions",
32463273
resource:"horizontalpodautoscalers"

0 commit comments

Comments
 (0)