adds start time information to application data to allow ordering by launch time
diff --git a/ui-modules/app-inspector/app/components/entity-tree/entity-tree.directive.js b/ui-modules/app-inspector/app/components/entity-tree/entity-tree.directive.js
index 76183e7..ed11b0f 100644
--- a/ui-modules/app-inspector/app/components/entity-tree/entity-tree.directive.js
+++ b/ui-modules/app-inspector/app/components/entity-tree/entity-tree.directive.js
@@ -43,19 +43,25 @@
return {
restrict: 'E',
template: entityTreeTemplate,
- controller: ['$scope', '$state', 'applicationApi', 'iconService', 'brWebNotifications', controller],
+ controller: ['$scope', '$state', 'applicationApi', 'entityApi', 'iconService', 'brWebNotifications', controller],
controllerAs: 'vm'
};
- function controller($scope, $state, applicationApi, iconService, brWebNotifications) {
+ function controller($scope, $state, applicationApi, entityApi, iconService, brWebNotifications) {
$scope.$emit(HIDE_INTERSTITIAL_SPINNER_EVENT);
let vm = this;
let observers = [];
+ let timeData = [];
+
applicationApi.applicationsTree().then((response)=> {
vm.applications = response.data;
+ vm.applications.forEach(app => {
+ getTimeData(app);
+ });
+
observers.push(response.subscribe((response)=> {
response.data
@@ -75,7 +81,17 @@
});
});
- vm.applications = response.data;
+ //Unless an app has just been loaded the start time information will be held locally in 'timeData'
+ vm.applications = response.data.map(app => {
+ const appStartData = timeData.find( item => item.applicationId === app.applicationId);
+ if (!appStartData) {
+ getTimeData (app)
+ }
+ return {
+ ...app,
+ startTimeUtc: appStartData ? appStartData.startTimeUtc : Date.now()
+ }
+ });
function spawnNotification(app, opts) {
iconService.get(app).then((icon)=> {
@@ -87,6 +103,24 @@
});
}
}));
+
+ //retrieves start time of the app from the entity api.
+ function getTimeData(app) {
+ //remove entries from timeData relating to apps that have been undeployed
+ timeData = timeData.filter(item => vm.applications.find(app => app.applicationId === item.applicationId))
+ entityApi.entityActivities(app.applicationId, app.applicationId).then( response => {
+ if ((response.data.length === 0) || (timeData.find(item => item.applicationId === app.applicationId))) {
+ return;
+ };
+ timeData.push({
+ applicationId: app.applicationId,
+ startTimeUtc: response.data[0].startTimeUtc
+ });
+ app.startTimeUtc = response.data[0].startTimeUtc
+ }).catch((error) => {
+ console.log(error);
+ });
+ }
});
$scope.$on('$destroy', ()=> {
diff --git a/ui-modules/app-inspector/app/components/entity-tree/entity-tree.html b/ui-modules/app-inspector/app/components/entity-tree/entity-tree.html
index a6c1a01..a26aada 100644
--- a/ui-modules/app-inspector/app/components/entity-tree/entity-tree.html
+++ b/ui-modules/app-inspector/app/components/entity-tree/entity-tree.html
@@ -16,7 +16,7 @@
specific language governing permissions and limitations
under the License.
-->
-<entity-node ng-repeat="application in vm.applications track by application.id" entity="application" application-id="application.id"></entity-node>
+<entity-node ng-repeat="application in vm.applications | orderBy: '-startTimeUtc' track by application.id" entity="application" application-id="application.id"></entity-node>
<p class="expand-tree-message text-center" ng-if="vm.applications.length > 0"><small><kbd>shift</kbd> + <kbd>{{navigator.appVersion.indexOf("Mac") !== -1 ? '⌘' : '⊞'}}</kbd> + click to expand all children</small></p>
<div class="empty-tree text-muted text-center" ng-if="vm.applications.length === 0">
<hr />