Skip to content

Commit 98769ab

Browse files
committed
Ignore the statusInfo when filtering the application list
Since the healthIndicator for Hystrix lists all discovered services, it looks like the filtering is broken. So we need to ignore the status information when filtering the application list. fixes codecentric#438
1 parent a8355c9 commit 98769ab

File tree

2 files changed

+77
-54
lines changed

2 files changed

+77
-54
lines changed

spring-boot-admin-server-ui/modules/applications/controllers/applicationsCtrl.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
'use strict';
1717

1818
var angular = require('angular');
19-
module.exports = function ($rootScope, $scope, $state, NotificationFilters) {
19+
module.exports = function ($rootScope, $scope, $state, NotificationFilters, $filter) {
2020
'ngInject';
2121
$scope.notificationFilters = null;
2222
$scope.notificationFiltersSupported = false;
@@ -62,4 +62,14 @@ module.exports = function ($rootScope, $scope, $state, NotificationFilters) {
6262
});
6363
};
6464
$scope.loadFilters();
65+
66+
$scope.doFilter = function (value) {
67+
if (!$scope.searchFilter) {
68+
return true;
69+
}
70+
var projection = angular.copy(value);
71+
delete projection.statusInfo;
72+
delete projection.group;
73+
return $filter('filter')([projection], $scope.searchFilter).length > 0;
74+
};
6575
};
Lines changed: 66 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,68 @@
11
<div class="container-fluid">
2-
<h3>Spring Boot applications</h3>
3-
<div>
4-
<input placeholder="Filter" class="input-xxlarge" type="search" ng-model="searchFilter" />
5-
</div>
6-
<table class="table application-list">
7-
<thead>
8-
<tr>
9-
<th class="group-column" title="{{expandAll ? 'collapse' : 'expand'}} all" ng-click="toggleExpandAll()"><i class="fa" ng-class="{'fa-plus': !expandAll, 'fa-minus': expandAll}"></i></th>
10-
<th class="name-column"><span class="sortable" ng-class="orderByCssClass('name')" ng-click="orderBy('name')">Application</span> / <span class="sortable"
11-
ng-class="orderByCssClass('healthUrl')" ng-click="orderBy('healthUrl')">URL</span></th>
12-
<th class="version-column"><span class="sortable" ng-class="orderByCssClass('info.build.version')" ng-click="orderBy('info.build.version')">Version</span></th>
13-
<th class="info-column">Info</th>
14-
<th class="status-column">Status</th>
15-
</tr>
16-
</thead>
17-
<tbody>
18-
<tr ng-repeat-start="application in filteredApps = (applicationGroups.applications|orderBy:order.column:order.descending|orderBy:'group.status':false|filter:searchFilter) track by application.id"
19-
ng-show="application.group.applicationCount > 1 &amp;&amp; (application.group.collapsed || application.group.collapsed == undefined) &amp;&amp; ($first || filteredApps[$index - 1].group.name != application.group.name) &amp;&amp; (searchFilter == '' || searchFilter == undefined)">
20-
<td class="group-column" ng-click="application.group.collapsed = false"><i class="fa fa-plus"></i></td>
21-
<td class="name-column" ng-bind="application.group.name"></td>
22-
<td class="version-column"><span ng-bind="application.group.version"></span></td>
23-
<td colspan="2">
24-
<span ng-repeat-start="(status, count) in application.group.statusCounter track by status" class="status-{{status}}" ng-bind="count + ' ' + status"></span>
25-
<span ng-repeat-end ng-hide="$last"> / </span>
26-
</td>
27-
</tr>
28-
<tr ng-repeat-end ng-show="(!application.group.collapsed &amp;&amp; application.group.collapsed != undefined ) || application.group.applicationCount == 1 || (searchFilter != '' &amp;&amp; searchFilter != undefined)">
29-
<td class="group-column" ng-class="{'hidden': !($first || filteredApps[$index - 1].group.name != application.group.name) &amp;&amp; (searchFilter == '' || searchFilter == undefined) }"
30-
rowspan="{{ (searchFilter != '' &amp;&amp; searchFilter != undefined) ? 1 : application.group.applicationCount }}"
31-
ng-click="application.group.collapsed = application.group.applicationCount > 1"><i ng-show="application.group.applicationCount > 1 &amp;&amp; (searchFilter == '' || searchFilter == undefined)"
32-
class="fa fa-minus"></i></td>
33-
<td class="name-column">{{ application.name }} ({{ application.id }})<br/>
34-
<span class="muted" ng-bind="application.serviceUrl || application.managementUrl || application.healthUrl"></span></td>
35-
<td class="version-column" ng-bind="application.info.build.version || application.info.version"></td>
36-
<td class="info-column scroll">
37-
<sba-limited-text max-lines="3" bind-html="application.info | yaml | linkify:60"></sba-limited-text>
38-
</td>
39-
<td class="status-column">
40-
<div>
41-
<sba-status-info status-info="application.statusInfo"></sba-status-info>
42-
<span ng-show="application.refreshing"><i class="fa fa-spinner fa-pulse fa-lg"></i></span>
43-
</div>
44-
<div>
45-
<sba-notification-settings ng-show="notificationFilters" application="application" filters="notificationFilters" refresh-callback="loadFilters()"></sba-notification-settings>
46-
<sba-btn-detail-views details-for="application"></sba-btn-detail-views>
47-
<div class="btn-group" title="remove" ng-show="application.source == 'http-api'">
48-
<a class="btn btn-danger" ng-click="remove(application)"><i class="fa fa-times"></i></a>
49-
</div>
50-
</div>
51-
</td>
52-
</tr>
53-
</tbody>
54-
</table>
2+
<h3>Spring Boot applications</h3>
3+
<div>
4+
<input placeholder="Filter" class="input-xxlarge" type="search" ng-model="searchFilter"/>
5+
</div>
6+
<table class="table application-list">
7+
<thead>
8+
<tr>
9+
<th class="group-column" title="{{expandAll ? 'collapse' : 'expand'}} all" ng-click="toggleExpandAll()"><i
10+
class="fa" ng-class="{'fa-plus': !expandAll, 'fa-minus': expandAll}"></i></th>
11+
<th class="name-column"><span class="sortable" ng-class="orderByCssClass('name')"
12+
ng-click="orderBy('name')">Application</span> / <span class="sortable"
13+
ng-class="orderByCssClass('healthUrl')"
14+
ng-click="orderBy('healthUrl')">URL</span>
15+
</th>
16+
<th class="version-column"><span class="sortable" ng-class="orderByCssClass('info.build.version')"
17+
ng-click="orderBy('info.build.version')">Version</span></th>
18+
<th class="info-column">Info</th>
19+
<th class="status-column">Status</th>
20+
</tr>
21+
</thead>
22+
<tbody>
23+
<tr ng-repeat-start="application in filteredApps = (applicationGroups.applications|orderBy:order.column:order.descending|orderBy:'group.status':false|filter:doFilter) track by application.id"
24+
ng-show="application.group.applicationCount > 1 &amp;&amp; (application.group.collapsed || application.group.collapsed == undefined) &amp;&amp; ($first || filteredApps[$index - 1].group.name != application.group.name) &amp;&amp; (searchFilter == '' || searchFilter == undefined)">
25+
<td class="group-column" ng-click="application.group.collapsed = false"><i class="fa fa-plus"></i></td>
26+
<td class="name-column" ng-bind="application.group.name"></td>
27+
<td class="version-column"><span ng-bind="application.group.version"></span></td>
28+
<td colspan="2">
29+
<span ng-repeat-start="(status, count) in application.group.statusCounter track by status"
30+
class="status-{{status}}" ng-bind="count + ' ' + status"></span>
31+
<span ng-repeat-end ng-hide="$last"> / </span>
32+
</td>
33+
</tr>
34+
<tr ng-repeat-end
35+
ng-show="(!application.group.collapsed &amp;&amp; application.group.collapsed != undefined ) || application.group.applicationCount == 1 || (searchFilter != '' &amp;&amp; searchFilter != undefined)">
36+
<td class="group-column"
37+
ng-class="{'hidden': !($first || filteredApps[$index - 1].group.name != application.group.name) &amp;&amp; (searchFilter == '' || searchFilter == undefined) }"
38+
rowspan="{{ (searchFilter != '' &amp;&amp; searchFilter != undefined) ? 1 : application.group.applicationCount }}"
39+
ng-click="application.group.collapsed = application.group.applicationCount > 1"><i
40+
ng-show="application.group.applicationCount > 1 &amp;&amp; (searchFilter == '' || searchFilter == undefined)"
41+
class="fa fa-minus"></i></td>
42+
<td class="name-column">{{ application.name }} ({{ application.id }})<br/>
43+
<span class="muted"
44+
ng-bind="application.serviceUrl || application.managementUrl || application.healthUrl"></span>
45+
</td>
46+
<td class="version-column" ng-bind="application.info.build.version || application.info.version"></td>
47+
<td class="info-column scroll">
48+
<sba-limited-text max-lines="3" bind-html="application.info | yaml | linkify:60"></sba-limited-text>
49+
</td>
50+
<td class="status-column">
51+
<div>
52+
<sba-status-info status-info="application.statusInfo"></sba-status-info>
53+
<span ng-show="application.refreshing"><i class="fa fa-spinner fa-pulse fa-lg"></i></span>
54+
</div>
55+
<div>
56+
<sba-notification-settings ng-show="notificationFilters" application="application"
57+
filters="notificationFilters"
58+
refresh-callback="loadFilters()"></sba-notification-settings>
59+
<sba-btn-detail-views details-for="application"></sba-btn-detail-views>
60+
<div class="btn-group" title="remove" ng-show="application.source == 'http-api'">
61+
<a class="btn btn-danger" ng-click="remove(application)"><i class="fa fa-times"></i></a>
62+
</div>
63+
</div>
64+
</td>
65+
</tr>
66+
</tbody>
67+
</table>
5568
</div>

0 commit comments

Comments
 (0)