From 2113da56fa1a6d0c7d4b68ec4fc6778be6d95dce Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 10:13:33 +0300 Subject: [PATCH 01/36] feat(engine-details): replace engine view with host view --- app/docker/__module.js | 11 +++++------ .../dockerSidebarContent/dockerSidebarContent.html | 2 +- .../views/{engine/engine.html => host/host.html} | 2 +- app/docker/views/host/host.js | 4 ++++ .../engineController.js => host/hostController.js} | 2 +- 5 files changed, 12 insertions(+), 9 deletions(-) rename app/docker/views/{engine/engine.html => host/host.html} (97%) create mode 100644 app/docker/views/host/host.js rename app/docker/views/{engine/engineController.js => host/hostController.js} (86%) diff --git a/app/docker/__module.js b/app/docker/__module.js index ffd451fbd..e3f1cd3b6 100644 --- a/app/docker/__module.js +++ b/app/docker/__module.js @@ -129,13 +129,12 @@ angular.module('portainer.docker', ['portainer.app']) } }; - var engine = { - name: 'docker.engine', - url: '/engine', + var host = { + name: 'docker.host', + url: '/host', views: { 'content@': { - templateUrl: 'app/docker/views/engine/engine.html', - controller: 'EngineController' + component: 'hostView' } } }; @@ -428,7 +427,7 @@ angular.module('portainer.docker', ['portainer.app']) $stateRegistryProvider.register(containerStats); $stateRegistryProvider.register(docker); $stateRegistryProvider.register(dashboard); - $stateRegistryProvider.register(engine); + $stateRegistryProvider.register(host); $stateRegistryProvider.register(events); $stateRegistryProvider.register(images); $stateRegistryProvider.register(image); diff --git a/app/docker/components/dockerSidebarContent/dockerSidebarContent.html b/app/docker/components/dockerSidebarContent/dockerSidebarContent.html index 870c959ed..2e0eeb497 100644 --- a/app/docker/components/dockerSidebarContent/dockerSidebarContent.html +++ b/app/docker/components/dockerSidebarContent/dockerSidebarContent.html @@ -35,5 +35,5 @@ Swarm diff --git a/app/docker/views/engine/engine.html b/app/docker/views/host/host.html similarity index 97% rename from app/docker/views/engine/engine.html rename to app/docker/views/host/host.html index 73b1248b2..64eea8833 100644 --- a/app/docker/views/engine/engine.html +++ b/app/docker/views/host/host.html @@ -1,6 +1,6 @@ - + diff --git a/app/docker/views/host/host.js b/app/docker/views/host/host.js new file mode 100644 index 000000000..44c481189 --- /dev/null +++ b/app/docker/views/host/host.js @@ -0,0 +1,4 @@ +angular.module('portainer.docker').component('hostView', { + templateUrl: 'app/docker/views/host/host.html', + controller: 'HostController' +}); diff --git a/app/docker/views/engine/engineController.js b/app/docker/views/host/hostController.js similarity index 86% rename from app/docker/views/engine/engineController.js rename to app/docker/views/host/hostController.js index f106273a5..14b6405b4 100644 --- a/app/docker/views/engine/engineController.js +++ b/app/docker/views/host/hostController.js @@ -1,5 +1,5 @@ angular.module('portainer.docker') -.controller('EngineController', ['$q', '$scope', 'SystemService', 'Notifications', +.controller('HostController', ['$q', '$scope', 'SystemService', 'Notifications', function ($q, $scope, SystemService, Notifications) { function initView() { From 96b7169125d9e35c18ee1578ae6fef3911a32f5b Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 10:16:33 +0300 Subject: [PATCH 02/36] feat(engine-details): remove old panels --- app/docker/views/host/host.html | 110 +------------------------------- 1 file changed, 2 insertions(+), 108 deletions(-) diff --git a/app/docker/views/host/host.html b/app/docker/views/host/host.html index 64eea8833..7094c10b6 100644 --- a/app/docker/views/host/host.html +++ b/app/docker/views/host/host.html @@ -1,5 +1,5 @@ - + @@ -7,112 +7,6 @@ Docker -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Version{{ version.Version }}
API version{{ version.ApiVersion }}
Go version{{ version.GoVersion }}
OS type{{ version.Os }}
OS{{ info.OperatingSystem }}
Architecture{{ version.Arch }}
Kernel version{{ version.KernelVersion }}
-
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Total CPU{{ info.NCPU }}
Total memory{{ info.MemTotal|humansize }}
Docker root directory{{ info.DockerRootDir }}
Storage driver{{ info.Driver }}
Logging driver{{ info.LoggingDriver }}
Cgroup driver{{ info.CgroupDriver }}
Execution driver{{ info.ExecutionDriver }}
-
-
-
-
-
-
- - - - - - - - - - - - - - - - - - -
Volume{{ info.Plugins.Volume|arraytostr: ', '}}
Network{{ info.Plugins.Network|arraytostr: ', '}}
Authorization{{ info.Plugins.Authorization|arraytostr: ', '}}
-
-
-
-
+ From 483c8641d8de7f32661f8c053181e87fa637c252 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 11:27:21 +0300 Subject: [PATCH 03/36] feat(engine-details): add basic engine-details-panel component --- .../engine-details-panel-controller.js | 5 +++ .../engine-details-panel.html | 37 +++++++++++++++++++ .../engine-details-panel.js | 8 ++++ 3 files changed, 50 insertions(+) create mode 100644 app/docker/components/host-view-panels/engine-details-panel/engine-details-panel-controller.js create mode 100644 app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html create mode 100644 app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.js diff --git a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel-controller.js b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel-controller.js new file mode 100644 index 000000000..de3077f0e --- /dev/null +++ b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel-controller.js @@ -0,0 +1,5 @@ +angular + .module('portainer.docker') + .controller('EngineDetailsPanelController', [ + function EngineDetailsPanelController() {} + ]); diff --git a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html new file mode 100644 index 000000000..c44a585af --- /dev/null +++ b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html @@ -0,0 +1,37 @@ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Version{{ $ctrl.engine.releaseVersion }}; {{ $ctrl.engine.apiVersion }}
Root directory{{ $ctrl.engine.rootDirectory }}
Storage Driver{{ $ctrl.engine.storageDriver }}
Logging Driver{{ $ctrl.engine.loggingDriver }}
Volume Plugins{{ $ctrl.engine.volumePlugins }}
Network Plugins{{ $ctrl.engine.networkPlugins }}
+
+
+
+
\ No newline at end of file diff --git a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.js b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.js new file mode 100644 index 000000000..05326c5b1 --- /dev/null +++ b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.js @@ -0,0 +1,8 @@ +angular.module('portainer.docker').component('engineDetailsPanel', { + templateUrl: + 'app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html', + controller: 'EngineDetailsPanelController', + bindings: { + engine: '<' + } +}); From f1f798b7ebc3e7d184fd2b2cf58be60da4bcd9f7 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 11:38:26 +0300 Subject: [PATCH 04/36] feat(engine-details): pass details to the different components --- app/docker/views/host/host.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/docker/views/host/host.html b/app/docker/views/host/host.html index 7094c10b6..127def22b 100644 --- a/app/docker/views/host/host.html +++ b/app/docker/views/host/host.html @@ -1,5 +1,5 @@ - + @@ -7,6 +7,8 @@ Docker + + - + \ No newline at end of file From 47f49b1e5dc673c94ff10470ad0924cfd9a9c22a Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 11:40:51 +0300 Subject: [PATCH 05/36] feat(engine-details): replace host-view with host-overview --- .../host-overview/host-overview-controller.js} | 4 ++-- .../host-overview/host-overview.html} | 0 app/docker/components/host-overview/host-overview.js | 10 ++++++++++ app/docker/views/host/host.js | 4 ---- 4 files changed, 12 insertions(+), 6 deletions(-) rename app/docker/{views/host/hostController.js => components/host-overview/host-overview-controller.js} (73%) rename app/docker/{views/host/host.html => components/host-overview/host-overview.html} (100%) create mode 100644 app/docker/components/host-overview/host-overview.js delete mode 100644 app/docker/views/host/host.js diff --git a/app/docker/views/host/hostController.js b/app/docker/components/host-overview/host-overview-controller.js similarity index 73% rename from app/docker/views/host/hostController.js rename to app/docker/components/host-overview/host-overview-controller.js index 14b6405b4..d5714e2de 100644 --- a/app/docker/views/host/hostController.js +++ b/app/docker/components/host-overview/host-overview-controller.js @@ -1,6 +1,6 @@ angular.module('portainer.docker') -.controller('HostController', ['$q', '$scope', 'SystemService', 'Notifications', -function ($q, $scope, SystemService, Notifications) { +.controller('HostOverviewController', ['$q', '$scope', 'SystemService', 'Notifications', +function HostOverviewController($q, $scope, SystemService, Notifications) { function initView() { $q.all({ diff --git a/app/docker/views/host/host.html b/app/docker/components/host-overview/host-overview.html similarity index 100% rename from app/docker/views/host/host.html rename to app/docker/components/host-overview/host-overview.html diff --git a/app/docker/components/host-overview/host-overview.js b/app/docker/components/host-overview/host-overview.js new file mode 100644 index 000000000..76cb3a451 --- /dev/null +++ b/app/docker/components/host-overview/host-overview.js @@ -0,0 +1,10 @@ +angular.module('portainer.docker').component('hostOverview', { + templateUrl: 'app/docker/components/host-overview/host-overview.html', + controller: 'HostOverviewController', + bindings: { + hostDetails: '<', + engineDetails: '<', + nodeDetails: '<', + isSwarm: '<' + } +}); diff --git a/app/docker/views/host/host.js b/app/docker/views/host/host.js deleted file mode 100644 index 44c481189..000000000 --- a/app/docker/views/host/host.js +++ /dev/null @@ -1,4 +0,0 @@ -angular.module('portainer.docker').component('hostView', { - templateUrl: 'app/docker/views/host/host.html', - controller: 'HostController' -}); From 65f542f72212d943610bc6d2c0f341ef29865157 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 12:22:25 +0300 Subject: [PATCH 06/36] feat(engine-details): add commaseperated filter --- .../engine-details-panel/engine-details-panel.html | 4 ++-- app/docker/filters/filters.js | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html index c44a585af..0737755b3 100644 --- a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html +++ b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html @@ -23,11 +23,11 @@ Volume Plugins - {{ $ctrl.engine.volumePlugins }} + {{ $ctrl.engine.volumePlugins | commaSeperated }} Network Plugins - {{ $ctrl.engine.networkPlugins }} + {{ $ctrl.engine.networkPlugins | commaSeperated }} diff --git a/app/docker/filters/filters.js b/app/docker/filters/filters.js index a07f1be0d..0822a4104 100644 --- a/app/docker/filters/filters.js +++ b/app/docker/filters/filters.js @@ -269,4 +269,13 @@ angular.module('portainer.docker') } return _.split(imageName, '@sha256')[0]; }; +}) +.filter('commaSeperated', function commaSeperatedFilter() { + 'use strict'; + return function commaSeperated(list) { + if (!list) { + return list; + } + return list.join(', '); + }; }); From d612ec9cee22e06f07e0f542229219a0cd640255 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 12:23:30 +0300 Subject: [PATCH 07/36] feat(engine-details): add host-view container component --- .../host-overview/host-overview-controller.js | 25 ++-------- app/docker/views/host/host-view-controller.js | 49 +++++++++++++++++++ app/docker/views/host/host-view.html | 4 ++ app/docker/views/host/host-view.js | 4 ++ 4 files changed, 60 insertions(+), 22 deletions(-) create mode 100644 app/docker/views/host/host-view-controller.js create mode 100644 app/docker/views/host/host-view.html create mode 100644 app/docker/views/host/host-view.js diff --git a/app/docker/components/host-overview/host-overview-controller.js b/app/docker/components/host-overview/host-overview-controller.js index d5714e2de..e5d0d56be 100644 --- a/app/docker/components/host-overview/host-overview-controller.js +++ b/app/docker/components/host-overview/host-overview-controller.js @@ -1,22 +1,3 @@ -angular.module('portainer.docker') -.controller('HostOverviewController', ['$q', '$scope', 'SystemService', 'Notifications', -function HostOverviewController($q, $scope, SystemService, Notifications) { - - function initView() { - $q.all({ - version: SystemService.version(), - info: SystemService.info() - }) - .then(function success(data) { - $scope.version = data.version; - $scope.info = data.info; - }) - .catch(function error(err) { - $scope.info = {}; - $scope.version = {}; - Notifications.error('Failure', err, 'Unable to retrieve engine details'); - }); - } - - initView(); -}]); +angular + .module('portainer.docker') + .controller('HostOverviewController', [function HostOverviewController() {}]); diff --git a/app/docker/views/host/host-view-controller.js b/app/docker/views/host/host-view-controller.js new file mode 100644 index 000000000..7361e5b5e --- /dev/null +++ b/app/docker/views/host/host-view-controller.js @@ -0,0 +1,49 @@ +angular.module('portainer.docker').controller('HostViewController', [ + '$q', + '$scope', + 'SystemService', + 'Notifications', + function HostViewController($q, $scope, SystemService, Notifications) { + var ctrl = this; + this.$onInit = initView; + + this.engineDetails = {}; + this.hostDetails = {}; + + function initView() { + $q.all({ + version: SystemService.version(), + info: SystemService.info() + }) + .then(function success(data) { + ctrl.engineDetails = buildEngineDetails(data); + ctrl.hostDetails = buildHostDetails(data); + }) + .catch(function error(err) { + Notifications.error( + 'Failure', + err, + 'Unable to retrieve engine details' + ); + }); + } + + function buildEngineDetails(data) { + var versionDetails = data.version; + var info = data.info; + return { + releaseVersion: versionDetails.Version, + apiVersion: versionDetails.ApiVersion, + rootDirectory: info.DockerRootDir, + storageDriver: info.Driver, + loggingDriver: info.LoggingDriver, + volumePlugins: info.Plugins.Volume, + networkPlugins: info.Plugins.Network + }; + } + + function buildHostDetails() { + return {}; + } + } +]); diff --git a/app/docker/views/host/host-view.html b/app/docker/views/host/host-view.html new file mode 100644 index 000000000..13cea0a2e --- /dev/null +++ b/app/docker/views/host/host-view.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/app/docker/views/host/host-view.js b/app/docker/views/host/host-view.js new file mode 100644 index 000000000..e321dccb4 --- /dev/null +++ b/app/docker/views/host/host-view.js @@ -0,0 +1,4 @@ +angular.module('portainer.docker').component('hostView', { + templateUrl: 'app/docker/views/host/host-view.html', + controller: 'HostViewController' +}); From 1f16eb446bc8462171f7835d41ae50df3260384a Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 12:23:53 +0300 Subject: [PATCH 08/36] feat(engine-details): add host-details component --- .../host-details-panel-controller.js | 4 ++ .../host-details-panel.html | 45 +++++++++++++++++++ .../host-details-panel/host-details-panel.js | 8 ++++ 3 files changed, 57 insertions(+) create mode 100644 app/docker/components/host-view-panels/host-details-panel/host-details-panel-controller.js create mode 100644 app/docker/components/host-view-panels/host-details-panel/host-details-panel.html create mode 100644 app/docker/components/host-view-panels/host-details-panel/host-details-panel.js diff --git a/app/docker/components/host-view-panels/host-details-panel/host-details-panel-controller.js b/app/docker/components/host-view-panels/host-details-panel/host-details-panel-controller.js new file mode 100644 index 000000000..c64c41a26 --- /dev/null +++ b/app/docker/components/host-view-panels/host-details-panel/host-details-panel-controller.js @@ -0,0 +1,4 @@ +angular.module('portainer.docker') +.controller('HostDetailsPanelController', [function HostDetailsPanelController(){ + +}]); diff --git a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html new file mode 100644 index 000000000..0927f3b6c --- /dev/null +++ b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html @@ -0,0 +1,45 @@ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Hostname{{ $ctrl.host.name }}
OS Information{{ $ctrl.host.os.type }} {{$ctrl.host.os.arch}} {{$ctrl.host.os.name}}
Kernel Version{{ $ctrl.host.kernelVersion }}
Total CPU{{ $ctrl.host.totalCPU }}
Total memory{{ $ctrl.host.totalMemory }}
Physical device information{{ $ctrl.host.physicalDeviceInfo }}
Installed PCI devices{{ $ctrl.host.pciDevices }}
Physical disk{{ $ctrl.host.physicalDisk }}
+
+
+
+
\ No newline at end of file diff --git a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.js b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.js new file mode 100644 index 000000000..9cb3d6349 --- /dev/null +++ b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.js @@ -0,0 +1,8 @@ +angular.module('portainer.docker').component('hostDetailsPanel', { + templateUrl: + 'app/docker/components/host-view-panels/host-details-panel/host-details-panel.html', + controller: 'HostDetailsPanelController', + bindings: { + host: '<' + } +}); From c15ee9af7ec9f6a9aa60c60239f2eed9889c6e2e Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 12:30:40 +0300 Subject: [PATCH 09/36] feat(engine-details): build host details object --- .../host-details-panel/host-details-panel.html | 2 +- .../host-details-panel/host-details-panel.js | 3 ++- app/docker/views/host/host-view-controller.js | 16 +++++++++++++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html index 0927f3b6c..aca9a949c 100644 --- a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html +++ b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html @@ -23,7 +23,7 @@ Total memory - {{ $ctrl.host.totalMemory }} + {{ $ctrl.host.totalMemory | humansize }} Physical device information diff --git a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.js b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.js index 9cb3d6349..fbd2edfb0 100644 --- a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.js +++ b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.js @@ -3,6 +3,7 @@ angular.module('portainer.docker').component('hostDetailsPanel', { 'app/docker/components/host-view-panels/host-details-panel/host-details-panel.html', controller: 'HostDetailsPanelController', bindings: { - host: '<' + host: '<', + isAgent: '<' } }); diff --git a/app/docker/views/host/host-view-controller.js b/app/docker/views/host/host-view-controller.js index 7361e5b5e..f1ed74083 100644 --- a/app/docker/views/host/host-view-controller.js +++ b/app/docker/views/host/host-view-controller.js @@ -17,7 +17,7 @@ angular.module('portainer.docker').controller('HostViewController', [ }) .then(function success(data) { ctrl.engineDetails = buildEngineDetails(data); - ctrl.hostDetails = buildHostDetails(data); + ctrl.hostDetails = buildHostDetails(data.info); }) .catch(function error(err) { Notifications.error( @@ -42,8 +42,18 @@ angular.module('portainer.docker').controller('HostViewController', [ }; } - function buildHostDetails() { - return {}; + function buildHostDetails(info) { + return { + os: { + arch: info.Architecture, + type: info.OSType, + name: info.OperatingSystem + }, + name: info.Name, + kernelVersion: info.KernelVersion, + totalCPU: info.NCPU, + totalMemory: info.MemTotal + }; } } ]); From 871547b1188684d53857e706ac775550cd66b6f3 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 17:18:09 +0300 Subject: [PATCH 10/36] feat(engine-details): format engine version --- .../engine-details-panel/engine-details-panel.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html index 0737755b3..d9a9691cc 100644 --- a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html +++ b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html @@ -7,7 +7,7 @@ Version - {{ $ctrl.engine.releaseVersion }}; {{ $ctrl.engine.apiVersion }} + {{ $ctrl.engine.releaseVersion }} (API: {{ $ctrl.engine.apiVersion }}) Root directory From 6cbcb9f358510a6b6366b1d7b3aa6c14ea1aa3f9 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 18:07:19 +0300 Subject: [PATCH 11/36] feat(engine-details): get details for one node --- app/docker/services/nodeService.js | 59 ++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/app/docker/services/nodeService.js b/app/docker/services/nodeService.js index 706f26647..91dacb6d2 100644 --- a/app/docker/services/nodeService.js +++ b/app/docker/services/nodeService.js @@ -1,24 +1,43 @@ -angular.module('portainer.docker') -.factory('NodeService', ['$q', 'Node', function NodeServiceFactory($q, Node) { - 'use strict'; - var service = {}; +angular.module('portainer.docker').factory('NodeService', [ + '$q', 'Node', + function NodeServiceFactory($q, Node) { + 'use strict'; + var service = {}; - service.nodes = function() { - var deferred = $q.defer(); + service.nodes = nodes; + service.node = node; - Node.query({}).$promise - .then(function success(data) { - var nodes = data.map(function (item) { - return new NodeViewModel(item); - }); - deferred.resolve(nodes); - }) - .catch(function error(err) { - deferred.reject({ msg: 'Unable to retrieve nodes', err: err }); - }); + function node(id) { + var deferred = $q.defer(); + Node.get({ id: id }) + .$promise.then(function onNodeLoaded(rawNode) { + var node = new NodeViewModel(rawNode); + return deferred.resolve(node); + }) + .catch(function onFailed(err) { + deferred.reject({ msg: 'Unable to retrieve node', err: err }); + }); - return deferred.promise; - }; + return deferred.promise; + } - return service; -}]); + function nodes() { + var deferred = $q.defer(); + + Node.query({}) + .$promise.then(function success(data) { + var nodes = data.map(function(item) { + return new NodeViewModel(item); + }); + deferred.resolve(nodes); + }) + .catch(function error(err) { + deferred.reject({ msg: 'Unable to retrieve nodes', err: err }); + }); + + return deferred.promise; + } + + return service; + } +]); From d8d4b38384a80c9f6db4e1edc2a7f52edcdedcb4 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 18:07:47 +0300 Subject: [PATCH 12/36] feat(engine-details): pass is-agent from view --- app/docker/components/host-overview/host-overview.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/docker/components/host-overview/host-overview.js b/app/docker/components/host-overview/host-overview.js index 76cb3a451..bd2f27652 100644 --- a/app/docker/components/host-overview/host-overview.js +++ b/app/docker/components/host-overview/host-overview.js @@ -5,6 +5,7 @@ angular.module('portainer.docker').component('hostOverview', { hostDetails: '<', engineDetails: '<', nodeDetails: '<', - isSwarm: '<' + isSwarm: '<', + isAgent: '<' } }); From 08afe4d0842d9f36f74f01a9953c0d1dbcb749b4 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 18:08:06 +0300 Subject: [PATCH 13/36] feat(engine-details): replace old node view with a new component --- app/docker/__module.js | 3 +- .../node-details-view-controller.js | 66 +++++++++++++++++++ .../nodes/node-details/node-details-view.html | 7 ++ .../nodes/node-details/node-details-view.js | 4 ++ 4 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 app/docker/views/nodes/node-details/node-details-view-controller.js create mode 100644 app/docker/views/nodes/node-details/node-details-view.html create mode 100644 app/docker/views/nodes/node-details/node-details-view.js diff --git a/app/docker/__module.js b/app/docker/__module.js index e3f1cd3b6..23ce18433 100644 --- a/app/docker/__module.js +++ b/app/docker/__module.js @@ -238,8 +238,7 @@ angular.module('portainer.docker', ['portainer.app']) url: '/:id', views: { 'content@': { - templateUrl: 'app/docker/views/nodes/edit/node.html', - controller: 'NodeController' + component: 'nodeDetailsView' } } }; diff --git a/app/docker/views/nodes/node-details/node-details-view-controller.js b/app/docker/views/nodes/node-details/node-details-view-controller.js new file mode 100644 index 000000000..b34cc5315 --- /dev/null +++ b/app/docker/views/nodes/node-details/node-details-view-controller.js @@ -0,0 +1,66 @@ +angular.module('portainer.docker').controller('NodeDetailsViewController', [ + '$stateParams', + 'NodeService', + function NodeDetailsViewController($stateParams, NodeService) { + var ctrl = this; + + ctrl.$onInit = initView; + + function initView() { + NodeService.node($stateParams.id).then(function(node) { + console.log(node) + ctrl.hostDetails = buildHostDetails(node); + ctrl.engineDetails = buildEngineDetails(node); + ctrl.nodeDetails = buildNodeDetails(node); + }); + } + + function buildHostDetails(node) { + return { + os: { + arch: node.PlatformArchitecture, + type: node.PlatformOS + // name: node.OperatingSystem TODO + }, + name: node.Hostname, + // kernelVersion: node.KernelVersion, + totalCPU: node.CPUs / 1e9, + totalMemory: node.Memory + }; + } + + function buildEngineDetails(node) { + return { + releaseVersion: node.EngineVersion, + // apiVersion: versionDetails.ApiVersion, TODO + // rootDirectory: node.DockerRootDir, TODO + // storageDriver: node.Driver, + // loggingDriver: node.LoggingDriver, + volumePlugins: getPlugins(node.Plugins, 'Volume'), + networkPlugins: getPlugins(node.Plugins, 'Network') + }; + } + + function buildNodeDetails(node) { + return { + name: node.Name, + role: node.Role, + managerAddress: node.ManagerAddr, + availability: node.Availability, + status: node.Status, + engineLabels: node.EngineLabels, + nodeLabels: node.Labels + }; + } + + function getPlugins(pluginsList, type) { + return pluginsList + .filter(function(plugin) { + return plugin.Type === type; + }) + .map(function(plugin) { + return plugin.Name; + }); + } + } +]); diff --git a/app/docker/views/nodes/node-details/node-details-view.html b/app/docker/views/nodes/node-details/node-details-view.html new file mode 100644 index 000000000..ccada1c29 --- /dev/null +++ b/app/docker/views/nodes/node-details/node-details-view.html @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/app/docker/views/nodes/node-details/node-details-view.js b/app/docker/views/nodes/node-details/node-details-view.js new file mode 100644 index 000000000..5b1c76e2b --- /dev/null +++ b/app/docker/views/nodes/node-details/node-details-view.js @@ -0,0 +1,4 @@ +angular.module('portainer.docker').component('nodeDetailsView', { + templateUrl: 'app/docker/views/nodes/node-details/node-details-view.html', + controller: 'NodeDetailsViewController' +}); From 28deb2237fce6ff4a2d1d1ada261a2612a391b8e Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 18:34:13 +0300 Subject: [PATCH 14/36] feat(engine-details): add swarm-node-details component --- .../swarm-node-details-panel-controller.js | 19 ++++++++++ .../swarm-node-details-panel.html | 37 +++++++++++++++++++ .../swarm-node-details-panel.js | 8 ++++ 3 files changed, 64 insertions(+) create mode 100644 app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js create mode 100644 app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html create mode 100644 app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js new file mode 100644 index 000000000..0d2eda943 --- /dev/null +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js @@ -0,0 +1,19 @@ +angular + .module('portainer.docker') + .controller('SwarmNodeDetailsPanelController', [ + function SwarmNodeDetailsPanelController() { + this.$onInit = initView; + this.state = { + managerAddress: '' + }; + + var managerRole = 'manager'; + + function initView() { + if (this.details.role === managerRole) { + this.state.managerAddress = + '(Manager address: ' + this.details.managerAddress + ')'; + } + } + } + ]); diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html new file mode 100644 index 000000000..3dd61877a --- /dev/null +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html @@ -0,0 +1,37 @@ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Node name{{ $ctrl.details.name }}
Role{{ $ctrl.details.role }} {{ $ctrl.state.managerAddress }}
Availability{{ $ctrl.details.availability }}
Status{{ $ctrl.details.status }}
Engine Labels{{ $ctrl.details.engineLabels | commaSeperated }}
Node Labels{{ $ctrl.details.nodeLabels | commaSeperated }}
+
+
+
+
\ No newline at end of file diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js new file mode 100644 index 000000000..36c7dd752 --- /dev/null +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js @@ -0,0 +1,8 @@ +angular.module('portainer.docker').component('swarmNodeDetailsPanel', { + templateUrl: + 'app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html', + controller: 'SwarmNodeDetailsPanelController', + bindings: { + details: '<' + } +}); From c349aac7d2b39b123feb4e016fd184bdf74c9727 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 5 Sep 2018 18:34:49 +0300 Subject: [PATCH 15/36] feat(engine-details): remove isSwarm binding --- app/docker/components/host-overview/host-overview.html | 2 +- app/docker/components/host-overview/host-overview.js | 1 - .../views/nodes/node-details/node-details-view-controller.js | 1 - app/docker/views/nodes/node-details/node-details-view.html | 1 - 4 files changed, 1 insertion(+), 4 deletions(-) diff --git a/app/docker/components/host-overview/host-overview.html b/app/docker/components/host-overview/host-overview.html index 127def22b..1bfc58b22 100644 --- a/app/docker/components/host-overview/host-overview.html +++ b/app/docker/components/host-overview/host-overview.html @@ -11,4 +11,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/docker/components/host-overview/host-overview.js b/app/docker/components/host-overview/host-overview.js index bd2f27652..fbf2096d5 100644 --- a/app/docker/components/host-overview/host-overview.js +++ b/app/docker/components/host-overview/host-overview.js @@ -5,7 +5,6 @@ angular.module('portainer.docker').component('hostOverview', { hostDetails: '<', engineDetails: '<', nodeDetails: '<', - isSwarm: '<', isAgent: '<' } }); diff --git a/app/docker/views/nodes/node-details/node-details-view-controller.js b/app/docker/views/nodes/node-details/node-details-view-controller.js index b34cc5315..d5a4305cd 100644 --- a/app/docker/views/nodes/node-details/node-details-view-controller.js +++ b/app/docker/views/nodes/node-details/node-details-view-controller.js @@ -8,7 +8,6 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ function initView() { NodeService.node($stateParams.id).then(function(node) { - console.log(node) ctrl.hostDetails = buildHostDetails(node); ctrl.engineDetails = buildEngineDetails(node); ctrl.nodeDetails = buildNodeDetails(node); diff --git a/app/docker/views/nodes/node-details/node-details-view.html b/app/docker/views/nodes/node-details/node-details-view.html index ccada1c29..ccd060769 100644 --- a/app/docker/views/nodes/node-details/node-details-view.html +++ b/app/docker/views/nodes/node-details/node-details-view.html @@ -1,5 +1,4 @@ Date: Thu, 6 Sep 2018 11:41:20 +0300 Subject: [PATCH 16/36] feat(engine-details): remove node-details and include in parent --- app/docker/components/host-overview/host-overview.html | 2 +- app/docker/components/host-overview/host-overview.js | 3 ++- .../views/nodes/node-details/node-details-view.html | 8 ++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/docker/components/host-overview/host-overview.html b/app/docker/components/host-overview/host-overview.html index 1bfc58b22..e1a6e175a 100644 --- a/app/docker/components/host-overview/host-overview.html +++ b/app/docker/components/host-overview/host-overview.html @@ -11,4 +11,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/docker/components/host-overview/host-overview.js b/app/docker/components/host-overview/host-overview.js index fbf2096d5..ad21a44ef 100644 --- a/app/docker/components/host-overview/host-overview.js +++ b/app/docker/components/host-overview/host-overview.js @@ -6,5 +6,6 @@ angular.module('portainer.docker').component('hostOverview', { engineDetails: '<', nodeDetails: '<', isAgent: '<' - } + }, + transclude: true }); diff --git a/app/docker/views/nodes/node-details/node-details-view.html b/app/docker/views/nodes/node-details/node-details-view.html index ccd060769..9a9fd6ba5 100644 --- a/app/docker/views/nodes/node-details/node-details-view.html +++ b/app/docker/views/nodes/node-details/node-details-view.html @@ -2,5 +2,9 @@ is-agent="$ctrl.state.isAgent" host-details="$ctrl.hostDetails" engine-details="$ctrl.engineDetails" - node-details="$ctrl.nodeDetails" -> \ No newline at end of file +> + + \ No newline at end of file From 2f4b68e043a3f87279ffa06238e563122d589e8f Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Thu, 6 Sep 2018 11:41:54 +0300 Subject: [PATCH 17/36] feat(engine-details): add labels-table component --- .../node-labels-table-controller.js | 24 +++++++++ .../node-labels-table/node-labels-table.html | 53 +++++++++++++++++++ .../node-labels-table/node-labels-table.js | 9 ++++ 3 files changed, 86 insertions(+) create mode 100644 app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js create mode 100644 app/docker/components/host-view-panels/node-labels-table/node-labels-table.html create mode 100644 app/docker/components/host-view-panels/node-labels-table/node-labels-table.js diff --git a/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js b/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js new file mode 100644 index 000000000..e80dc3d0d --- /dev/null +++ b/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js @@ -0,0 +1,24 @@ +angular.module('portainer.docker').controller('NodeLabelsTableController', [ + function NodeLabelsTableController() { + var ctrl = this; + ctrl.removeLabel = removeLabel; + ctrl.updateLabel = updateLabel; + + function removeLabel(index) { + var removedElement = ctrl.labels.splice(index, 1); + if (removedElement !== null) { + console.log(ctrl.labels); + ctrl.onChangedLabels({labels: ctrl.labels}); + } + } + + function updateLabel(label) { + if ( + label.value !== label.originalValue || + label.key !== label.originalKey + ) { + ctrl.onChangedLabels({labels: ctrl.labels}); + } + } + } +]); diff --git a/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html b/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html new file mode 100644 index 000000000..e8076f265 --- /dev/null +++ b/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html @@ -0,0 +1,53 @@ +
+ There are no labels for this node. +
+ + + + + + + + + + + + + + + + + + +
LabelValue
+
+ Name + +
+
+
+ Value + + + + +
+
+ +
\ No newline at end of file diff --git a/app/docker/components/host-view-panels/node-labels-table/node-labels-table.js b/app/docker/components/host-view-panels/node-labels-table/node-labels-table.js new file mode 100644 index 000000000..5d6d6c320 --- /dev/null +++ b/app/docker/components/host-view-panels/node-labels-table/node-labels-table.js @@ -0,0 +1,9 @@ +angular.module('portainer.docker').component('nodeLabelsTable', { + templateUrl: + 'app/docker/components/host-view-panels/node-labels-table/node-labels-table.html', + controller: 'NodeLabelsTableController', + bindings: { + labels: '<', + onChangedLabels: '&' + } +}); From 79878cfb858c10deffe78e6eddb3689b866ca923 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Thu, 6 Sep 2018 16:35:22 +0300 Subject: [PATCH 18/36] feat(engine-details): add update node service --- app/docker/services/nodeService.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/docker/services/nodeService.js b/app/docker/services/nodeService.js index 91dacb6d2..5ebfeeee4 100644 --- a/app/docker/services/nodeService.js +++ b/app/docker/services/nodeService.js @@ -6,6 +6,7 @@ angular.module('portainer.docker').factory('NodeService', [ service.nodes = nodes; service.node = node; + service.updateNode = updateNode; function node(id) { var deferred = $q.defer(); @@ -38,6 +39,10 @@ angular.module('portainer.docker').factory('NodeService', [ return deferred.promise; } + function updateNode(node) { + return Node.update({ id: node.Id, version: node.Version }, node).$promise; + } + return service; } ]); From 50ef742c6333cc95be2fd4001cf6a77ca75bae6d Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Thu, 6 Sep 2018 16:38:28 +0300 Subject: [PATCH 19/36] feat(engine-details): add update label functionality --- .../node-labels-table-controller.js | 30 ++++++++++-- .../node-labels-table/node-labels-table.html | 4 +- .../swarm-node-details-panel-controller.js | 26 ++++++++++- .../swarm-node-details-panel.html | 15 +++++- .../swarm-node-details-panel.js | 3 +- .../node-details-view-controller.js | 46 ++++++++++++++++++- 6 files changed, 110 insertions(+), 14 deletions(-) diff --git a/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js b/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js index e80dc3d0d..ec00f1fa2 100644 --- a/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js +++ b/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js @@ -3,12 +3,14 @@ angular.module('portainer.docker').controller('NodeLabelsTableController', [ var ctrl = this; ctrl.removeLabel = removeLabel; ctrl.updateLabel = updateLabel; + ctrl.save = save; + ctrl.hasChanges = false; + ctrl.cancelChanges = cancelChanges; function removeLabel(index) { - var removedElement = ctrl.labels.splice(index, 1); - if (removedElement !== null) { - console.log(ctrl.labels); - ctrl.onChangedLabels({labels: ctrl.labels}); + var label = ctrl.labels.splice(index, 1); + if (label !== null) { + ctrl.hasChanges = true; } } @@ -17,8 +19,26 @@ angular.module('portainer.docker').controller('NodeLabelsTableController', [ label.value !== label.originalValue || label.key !== label.originalKey ) { - ctrl.onChangedLabels({labels: ctrl.labels}); + ctrl.hasChanges = true; } } + + function save() { + ctrl.onChangedLabels({ labels: ctrl.labels }); + } + + function cancelChanges() { + ctrl.labels = ctrl.labels + .filter(function(label) { + return label.originalValue || label.originalKey; + }) + .map(function(label) { + return Object.assign(label, { + value: label.originalValue, + key: label.originalKey + }); + }); + ctrl.hasChanges = false; + } } ]); diff --git a/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html b/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html index e8076f265..aceaff848 100644 --- a/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html +++ b/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html @@ -36,14 +36,14 @@ diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js index 0d2eda943..12365ceac 100644 --- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js @@ -2,18 +2,40 @@ angular .module('portainer.docker') .controller('SwarmNodeDetailsPanelController', [ function SwarmNodeDetailsPanelController() { - this.$onInit = initView; this.state = { managerAddress: '' }; - + this.$onInit = initView; + this.$onChanges = $onChanges; + this.addLabel = addLabel; + this.updateNodeLabels = updateNodeLabels; var managerRole = 'manager'; function initView() { + + } + + function $onChanges() { + if (!this.details) { + return; + } if (this.details.role === managerRole) { this.state.managerAddress = '(Manager address: ' + this.details.managerAddress + ')'; } } + + function addLabel() { + this.details.nodeLabels.push({ + key: '', + value: '', + originalValue: '', + originalKey: '' + }); + } + + function updateNodeLabels(labels) { + this.onChangedLabels({labels: labels}); + } } ]); diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html index 3dd61877a..830ece9f5 100644 --- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html @@ -26,8 +26,19 @@ {{ $ctrl.details.engineLabels | commaSeperated }} - Node Labels - {{ $ctrl.details.nodeLabels | commaSeperated }} + + + Node Labels + + + + diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js index 36c7dd752..8785f956e 100644 --- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js @@ -3,6 +3,7 @@ angular.module('portainer.docker').component('swarmNodeDetailsPanel', { 'app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html', controller: 'SwarmNodeDetailsPanelController', bindings: { - details: '<' + details: '<', + onChangedLabels: '&' } }); diff --git a/app/docker/views/nodes/node-details/node-details-view-controller.js b/app/docker/views/nodes/node-details/node-details-view-controller.js index d5a4305cd..eeed1dc3e 100644 --- a/app/docker/views/nodes/node-details/node-details-view-controller.js +++ b/app/docker/views/nodes/node-details/node-details-view-controller.js @@ -1,13 +1,26 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ '$stateParams', 'NodeService', - function NodeDetailsViewController($stateParams, NodeService) { + 'NodeHelper', + 'LabelHelper', + 'Notifications', + '$state', + function NodeDetailsViewController( + $stateParams, + NodeService, + NodeHelper, + LabelHelper, + Notifications, + $state + ) { var ctrl = this; - + var originalNode; ctrl.$onInit = initView; + ctrl.updateLabels = updateLabels; function initView() { NodeService.node($stateParams.id).then(function(node) { + originalNode = node; ctrl.hostDetails = buildHostDetails(node); ctrl.engineDetails = buildEngineDetails(node); ctrl.nodeDetails = buildNodeDetails(node); @@ -52,6 +65,35 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ }; } + function updateLabels(labels) { + originalNode.labels = labels; + updateNode(originalNode); + } + + function updateNode(node) { + var config = { + Name: node.Name, + Availability: node.Availability, + Role: node.Role, + Labels: LabelHelper.fromKeyValueToLabelHash(node.Labels), + Id: node.Id, + Version: node.Version + }; + + NodeService.updateNode(config) + .then(onUpdateSuccess) + .catch(notifyOnError); + + function onUpdateSuccess() { + Notifications.success('Node successfully updated', 'Node updated'); + $state.go('docker.nodes.node', { id: node.Id }, { reload: true }); + } + + function notifyOnError(error) { + Notifications.error('Failure', error, 'Failed to update node'); + } + } + function getPlugins(pluginsList, type) { return pluginsList .filter(function(plugin) { From 7436ac508b401355d3a55bf45dbd0c78425b21cc Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Thu, 6 Sep 2018 16:39:20 +0300 Subject: [PATCH 20/36] style(engine-details): remove whitespaces --- .../node-details-view-controller.js | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/app/docker/views/nodes/node-details/node-details-view-controller.js b/app/docker/views/nodes/node-details/node-details-view-controller.js index eeed1dc3e..a52d5c64a 100644 --- a/app/docker/views/nodes/node-details/node-details-view-controller.js +++ b/app/docker/views/nodes/node-details/node-details-view-controller.js @@ -1,20 +1,9 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ - '$stateParams', - 'NodeService', - 'NodeHelper', - 'LabelHelper', - 'Notifications', - '$state', - function NodeDetailsViewController( - $stateParams, - NodeService, - NodeHelper, - LabelHelper, - Notifications, - $state - ) { + '$stateParams', 'NodeService', 'LabelHelper', 'Notifications', '$state', + function NodeDetailsViewController($stateParams, NodeService, LabelHelper, Notifications, $state) { var ctrl = this; var originalNode; + ctrl.$onInit = initView; ctrl.updateLabels = updateLabels; From cf6be6f596628d7756845c6aaae2befdd4982872 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Thu, 6 Sep 2018 16:41:33 +0300 Subject: [PATCH 21/36] feat(engine-details): remove old node page --- app/docker/views/nodes/edit/node.html | 243 ------------------ app/docker/views/nodes/edit/nodeController.js | 96 ------- 2 files changed, 339 deletions(-) delete mode 100644 app/docker/views/nodes/edit/node.html delete mode 100644 app/docker/views/nodes/edit/nodeController.js diff --git a/app/docker/views/nodes/edit/node.html b/app/docker/views/nodes/edit/node.html deleted file mode 100644 index b7d733206..000000000 --- a/app/docker/views/nodes/edit/node.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - - - Swarm nodes > {{ node.Hostname }} - - - -
-
-
- Loading... -
- - - - -

It looks like the node you wish to inspect does not exist.

-
-
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Name - -
Host name{{ node.Hostname }}
Role{{ node.Role }}
Availability -
- -
-
Status{{ node.Status }}
-
- -

- View the Docker Swarm mode Node documentation here. -

- -
-
-
-
- -
-
- - - - - - - - - - - - - - - - - - -
Leader - Yes - No -
Reachability{{ node.Reachability }}
Manager address{{ node.ManagerAddr }}
-
-
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - -
CPU{{ node.CPUs / 1000000000 }}
Memory{{ node.Memory|humansize: 2 }}
Platform{{ node.PlatformOS }} {{ node.PlatformArchitecture }}
Docker Engine version{{ node.EngineVersion }}
-
-
-
-
- -
-
- - - -

There are no engine labels for this node.

-
- - - - - - - - - - - - - - -
LabelValue
{{ engineLabel.key }}{{ engineLabel.value }}
-
-
-
-
- -
-
- - - - - -

There are no labels for this node.

-
- - - - - - - - - - - - - - -
LabelValue
-
- name - -
-
-
- value - - - - -
-
-
- - - -
-
-
- -
-
- -
-
diff --git a/app/docker/views/nodes/edit/nodeController.js b/app/docker/views/nodes/edit/nodeController.js deleted file mode 100644 index 30f210b2a..000000000 --- a/app/docker/views/nodes/edit/nodeController.js +++ /dev/null @@ -1,96 +0,0 @@ -angular.module('portainer.docker') -.controller('NodeController', ['$scope', '$state', '$transition$', 'LabelHelper', 'Node', 'NodeHelper', 'Task', 'Notifications', -function ($scope, $state, $transition$, LabelHelper, Node, NodeHelper, Task, Notifications) { - - $scope.loading = true; - $scope.tasks = []; - - var originalNode = {}; - var editedKeys = []; - - $scope.updateNodeAttribute = function updateNodeAttribute(node, key) { - editedKeys.push(key); - }; - $scope.addLabel = function addLabel(node) { - node.Labels.push({ key: '', value: '', originalValue: '', originalKey: '' }); - $scope.updateNodeAttribute(node, 'Labels'); - }; - $scope.removeLabel = function removeLabel(node, index) { - var removedElement = node.Labels.splice(index, 1); - if (removedElement !== null) { - $scope.updateNodeAttribute(node, 'Labels'); - } - }; - $scope.updateLabel = function updateLabel(node, label) { - if (label.value !== label.originalValue || label.key !== label.originalKey) { - $scope.updateNodeAttribute(node, 'Labels'); - } - }; - - $scope.hasChanges = function(node, elements) { - if (!elements) { - elements = Object.keys(originalNode); - } - var hasChanges = false; - elements.forEach(function(key) { - hasChanges = hasChanges || ((editedKeys.indexOf(key) >= 0) && node[key] !== originalNode[key]); - }); - return hasChanges; - }; - - $scope.cancelChanges = function(node) { - editedKeys.forEach(function(key) { - node[key] = originalNode[key]; - }); - editedKeys = []; - }; - - $scope.updateNode = function updateNode(node) { - var config = NodeHelper.nodeToConfig(node.Model); - config.Name = node.Name; - config.Availability = node.Availability; - config.Role = node.Role; - config.Labels = LabelHelper.fromKeyValueToLabelHash(node.Labels); - - Node.update({ id: node.Id, version: node.Version }, config, function () { - Notifications.success('Node successfully updated', 'Node updated'); - $state.go('docker.nodes.node', {id: node.Id}, {reload: true}); - }, function (e) { - Notifications.error('Failure', e, 'Failed to update node'); - }); - }; - - function loadNodeAndTasks() { - $scope.loading = true; - if ($scope.applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE') { - Node.get({ id: $transition$.params().id}, function(d) { - if (d.message) { - Notifications.error('Failure', e, 'Unable to inspect the node'); - } else { - var node = new NodeViewModel(d); - originalNode = angular.copy(node); - $scope.node = node; - getTasks(d); - } - $scope.loading = false; - }); - } else { - $scope.loading = false; - } - } - - function getTasks(node) { - if (node) { - Task.query({filters: {node: [node.ID]}}, function (tasks) { - $scope.tasks = tasks.map(function (task) { - return new TaskViewModel(task); - }); - }, function (e) { - Notifications.error('Failure', e, 'Unable to retrieve tasks associated to the node'); - }); - } - } - - loadNodeAndTasks(); - -}]); From 6a9e389b7c34b65aa5789d32c037dee5be0e945e Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Thu, 6 Sep 2018 17:02:13 +0300 Subject: [PATCH 22/36] feat(engine-details): pass is agent to host details --- .../components/host-overview/host-overview.html | 2 +- .../host-details-panel/host-details-panel.html | 4 ++-- .../node-details/node-details-view-controller.js | 16 +++++++++++----- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/docker/components/host-overview/host-overview.html b/app/docker/components/host-overview/host-overview.html index e1a6e175a..e57ab71d8 100644 --- a/app/docker/components/host-overview/host-overview.html +++ b/app/docker/components/host-overview/host-overview.html @@ -7,7 +7,7 @@ Docker
- + diff --git a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html index aca9a949c..8c1bae1ca 100644 --- a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html +++ b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html @@ -25,7 +25,7 @@ Total memory {{ $ctrl.host.totalMemory | humansize }} - + diff --git a/app/docker/views/nodes/node-details/node-details-view-controller.js b/app/docker/views/nodes/node-details/node-details-view-controller.js index a52d5c64a..c4f82e0fe 100644 --- a/app/docker/views/nodes/node-details/node-details-view-controller.js +++ b/app/docker/views/nodes/node-details/node-details-view-controller.js @@ -1,11 +1,14 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ - '$stateParams', 'NodeService', 'LabelHelper', 'Notifications', '$state', - function NodeDetailsViewController($stateParams, NodeService, LabelHelper, Notifications, $state) { + '$stateParams', 'NodeService', 'LabelHelper', 'Notifications', '$state', 'StateManager', + function NodeDetailsViewController($stateParams, NodeService, LabelHelper, Notifications, $state, StateManager) { var ctrl = this; var originalNode; ctrl.$onInit = initView; ctrl.updateLabels = updateLabels; + ctrl.state = { + isAgent: false + }; function initView() { NodeService.node($stateParams.id).then(function(node) { @@ -14,6 +17,9 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ ctrl.engineDetails = buildEngineDetails(node); ctrl.nodeDetails = buildNodeDetails(node); }); + + var applicationState = StateManager.getState(); + ctrl.state.isAgent = applicationState.endpoint.mode.agentProxy; } function buildHostDetails(node) { @@ -37,8 +43,8 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ // rootDirectory: node.DockerRootDir, TODO // storageDriver: node.Driver, // loggingDriver: node.LoggingDriver, - volumePlugins: getPlugins(node.Plugins, 'Volume'), - networkPlugins: getPlugins(node.Plugins, 'Network') + volumePlugins: transformPlugins(node.Plugins, 'Volume'), + networkPlugins: transformPlugins(node.Plugins, 'Network') }; } @@ -83,7 +89,7 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ } } - function getPlugins(pluginsList, type) { + function transformPlugins(pluginsList, type) { return pluginsList .filter(function(plugin) { return plugin.Type === type; From 42497ab60cfcf46f39817853fe5918e4de5b59ee Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 12 Sep 2018 10:16:28 +0300 Subject: [PATCH 23/36] feat(host-details): hide missing info --- .../engine-details-panel.html | 10 +++++----- .../host-details-panel/host-details-panel.html | 18 +++++++++--------- .../swarm-node-details-panel-controller.js | 2 +- .../swarm-node-details-panel.html | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html index d9a9691cc..76e87e6a9 100644 --- a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html +++ b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html @@ -5,19 +5,19 @@ - + - + - + - + - + diff --git a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html index 8c1bae1ca..6713ae681 100644 --- a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html +++ b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html @@ -5,38 +5,38 @@
Version{{ $ctrl.engine.releaseVersion }} (API: {{ $ctrl.engine.apiVersion }}){{ $ctrl.engine.releaseVersion }} (API: {{ $ctrl.engine.apiVersion }})
Root directory {{ $ctrl.engine.rootDirectory }}
Storage Driver {{ $ctrl.engine.storageDriver }}
Logging Driver {{ $ctrl.engine.loggingDriver }}
- + - + - + - + - + - +
Hostname {{ $ctrl.host.name }}
OS Information {{ $ctrl.host.os.type }} {{$ctrl.host.os.arch}} {{$ctrl.host.os.name}}
Kernel Version {{ $ctrl.host.kernelVersion }}
Total CPU {{ $ctrl.host.totalCPU }}
Total memory {{ $ctrl.host.totalMemory | humansize }}
diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js index 12365ceac..c2ae18175 100644 --- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js @@ -21,7 +21,7 @@ angular } if (this.details.role === managerRole) { this.state.managerAddress = - '(Manager address: ' + this.details.managerAddress + ')'; + '(' + this.details.managerAddress + ')'; } } diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html index 830ece9f5..036da9772 100644 --- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html @@ -5,7 +5,7 @@ - + From 10b904a13bb175e0a065abf1eb9fc72560df7df1 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 12 Sep 2018 12:32:39 +0300 Subject: [PATCH 24/36] feat(host-details): update node availability --- .../node-availability-select-controller.js | 27 +++++++++++++++++++ .../node-availability-select.html | 21 +++++++++++++++ .../node-availability-select.js | 10 +++++++ .../swarm-node-details-panel-controller.js | 15 +++++------ .../swarm-node-details-panel.html | 9 +++++-- .../swarm-node-details-panel.js | 3 ++- .../node-details-view-controller.js | 7 +++++ .../nodes/node-details/node-details-view.html | 1 + 8 files changed, 82 insertions(+), 11 deletions(-) create mode 100644 app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js create mode 100644 app/docker/components/host-view-panels/node-availability-select/node-availability-select.html create mode 100644 app/docker/components/host-view-panels/node-availability-select/node-availability-select.js diff --git a/app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js b/app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js new file mode 100644 index 000000000..fc3e84165 --- /dev/null +++ b/app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js @@ -0,0 +1,27 @@ +angular + .module('portainer.docker') + .controller('NodeAvailabilitySelectController', [ + function NodeAvailabilitySelectController() { + this.state = { + hasChanges: false + }; + this.onChange = onChange; + this.save = save; + this.cancelChanges = cancelChanges; + + function onChange() { + this.state.hasChanges = this.originalValue !== this.availability; + } + + function save() { + this.onSave({ availability: this.availability }); + } + + function cancelChanges() { + this.state.hasChanges = false; + this.availability = this.originalValue; + } + + + } + ]); diff --git a/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html b/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html new file mode 100644 index 000000000..c07917efd --- /dev/null +++ b/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html @@ -0,0 +1,21 @@ +
+ + +
\ No newline at end of file diff --git a/app/docker/components/host-view-panels/node-availability-select/node-availability-select.js b/app/docker/components/host-view-panels/node-availability-select/node-availability-select.js new file mode 100644 index 000000000..b09730f37 --- /dev/null +++ b/app/docker/components/host-view-panels/node-availability-select/node-availability-select.js @@ -0,0 +1,10 @@ +angular.module('portainer.docker').component('nodeAvailabilitySelect', { + templateUrl: + 'app/docker/components/host-view-panels/node-availability-select/node-availability-select.html', + controller: 'NodeAvailabilitySelectController', + bindings: { + availability: '<', + originalValue: '<', + onSave: '&' + } +}); diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js index c2ae18175..58677c583 100644 --- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js @@ -5,23 +5,18 @@ angular this.state = { managerAddress: '' }; - this.$onInit = initView; this.$onChanges = $onChanges; this.addLabel = addLabel; this.updateNodeLabels = updateNodeLabels; + this.updateNodeAvailability = updateNodeAvailability; var managerRole = 'manager'; - function initView() { - - } - function $onChanges() { if (!this.details) { return; } if (this.details.role === managerRole) { - this.state.managerAddress = - '(' + this.details.managerAddress + ')'; + this.state.managerAddress = '(' + this.details.managerAddress + ')'; } } @@ -35,7 +30,11 @@ angular } function updateNodeLabels(labels) { - this.onChangedLabels({labels: labels}); + this.onChangedLabels({ labels: labels }); + } + + function updateNodeAvailability(availability) { + this.onChangedAvailability({ availability: availability }); } } ]); diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html index 036da9772..2a442942e 100644 --- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html @@ -15,11 +15,16 @@
- + - + diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js index 8785f956e..275b44240 100644 --- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js @@ -4,6 +4,7 @@ angular.module('portainer.docker').component('swarmNodeDetailsPanel', { controller: 'SwarmNodeDetailsPanelController', bindings: { details: '<', - onChangedLabels: '&' + onChangedLabels: '&', + onChangedAvailability: '&' } }); diff --git a/app/docker/views/nodes/node-details/node-details-view-controller.js b/app/docker/views/nodes/node-details/node-details-view-controller.js index c4f82e0fe..35d4ed427 100644 --- a/app/docker/views/nodes/node-details/node-details-view-controller.js +++ b/app/docker/views/nodes/node-details/node-details-view-controller.js @@ -6,6 +6,8 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ ctrl.$onInit = initView; ctrl.updateLabels = updateLabels; + ctrl.updateAvailability = updateAvailability; + ctrl.state = { isAgent: false }; @@ -65,6 +67,11 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ updateNode(originalNode); } + function updateAvailability(availability) { + originalNode.Availability = availability; + updateNode(originalNode); + } + function updateNode(node) { var config = { Name: node.Name, diff --git a/app/docker/views/nodes/node-details/node-details-view.html b/app/docker/views/nodes/node-details/node-details-view.html index 9a9fd6ba5..92815fe3e 100644 --- a/app/docker/views/nodes/node-details/node-details-view.html +++ b/app/docker/views/nodes/node-details/node-details-view.html @@ -6,5 +6,6 @@ \ No newline at end of file From e75be92c37a611d6893b5977b35f0a335e52a19f Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 12 Sep 2018 12:36:44 +0300 Subject: [PATCH 25/36] style(host-details): remove obsolete event object --- .../node-availability-select/node-availability-select.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html b/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html index c07917efd..e41bc4e9f 100644 --- a/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html +++ b/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html @@ -1,6 +1,6 @@
diff --git a/app/docker/views/nodes/node-details/node-details-view-controller.js b/app/docker/views/nodes/node-details/node-details-view-controller.js index 35d4ed427..f419a51c1 100644 --- a/app/docker/views/nodes/node-details/node-details-view-controller.js +++ b/app/docker/views/nodes/node-details/node-details-view-controller.js @@ -63,7 +63,7 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ } function updateLabels(labels) { - originalNode.labels = labels; + originalNode.Labels = labels; updateNode(originalNode); } From e791e0a9c8bc2e494db53d786cd63e26e6463fe5 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Wed, 12 Sep 2018 13:55:23 +0300 Subject: [PATCH 27/36] feat(host-details): remove flags for hiding data --- .../engine-details-panel/engine-details-panel.html | 2 +- .../host-details-panel/host-details-panel.html | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html index 76e87e6a9..bfeda09b2 100644 --- a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html +++ b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html @@ -5,7 +5,7 @@
Node name {{ $ctrl.details.name }}
Availability{{ $ctrl.details.availability }} + +
Status{{ $ctrl.details.status }}{{ $ctrl.details.status }}
Engine Labels + on-changed-labels="$ctrl.updateNodeLabels(labels)">
- + diff --git a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html index 6713ae681..a8cbcc027 100644 --- a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html +++ b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html @@ -5,7 +5,7 @@
Version {{ $ctrl.engine.releaseVersion }} (API: {{ $ctrl.engine.apiVersion }})
- + @@ -17,11 +17,11 @@ - + - + From 6751fab987fb0fcaf92ebbe0ef8f0d24153c0306 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Thu, 13 Sep 2018 11:48:30 +0300 Subject: [PATCH 28/36] feat(host-details): create mock call to server for agent host info --- app/agent/services/agentService.js | 53 ++++++++++++------- .../host-details-panel.html | 2 +- .../node-details-view-controller.js | 29 +++++++--- 3 files changed, 57 insertions(+), 27 deletions(-) diff --git a/app/agent/services/agentService.js b/app/agent/services/agentService.js index 5f011d01c..a1eb96681 100644 --- a/app/agent/services/agentService.js +++ b/app/agent/services/agentService.js @@ -1,24 +1,39 @@ -angular.module('portainer.agent') -.factory('AgentService', ['$q', 'Agent', function AgentServiceFactory($q, Agent) { - 'use strict'; - var service = {}; +angular.module('portainer.agent').factory('AgentService', [ + '$q', 'Agent', + function AgentServiceFactory($q, Agent) { + 'use strict'; + var service = {}; - service.agents = function() { - var deferred = $q.defer(); + service.agents = agents; + service.hostInfo = hostInfo; - Agent.query({}).$promise - .then(function success(data) { - var agents = data.map(function (item) { - return new AgentViewModel(item); + function hostInfo() { + return $q.when({ + PhysicalDeviceVendor: 'hello', + DeviceVersion: '1.9', + DeviceSerialNumber: '144f', + InstalledPCIDevices: ['usb', 'printer'], + PhysicalDisk: 'none' }); - deferred.resolve(agents); - }) - .catch(function error(err) { - deferred.reject({ msg: 'Unable to retrieve agents', err: err }); - }); + } - return deferred.promise; - }; + function agents() { + var deferred = $q.defer(); - return service; -}]); + Agent.query({}) + .$promise.then(function success(data) { + var agents = data.map(function(item) { + return new AgentViewModel(item); + }); + deferred.resolve(agents); + }) + .catch(function error(err) { + deferred.reject({ msg: 'Unable to retrieve agents', err: err }); + }); + + return deferred.promise; + } + + return service; + } +]); diff --git a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html index a8cbcc027..f4e481b6c 100644 --- a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html +++ b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html @@ -31,7 +31,7 @@ - + diff --git a/app/docker/views/nodes/node-details/node-details-view-controller.js b/app/docker/views/nodes/node-details/node-details-view-controller.js index f419a51c1..c20bb8947 100644 --- a/app/docker/views/nodes/node-details/node-details-view-controller.js +++ b/app/docker/views/nodes/node-details/node-details-view-controller.js @@ -1,9 +1,9 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ - '$stateParams', 'NodeService', 'LabelHelper', 'Notifications', '$state', 'StateManager', - function NodeDetailsViewController($stateParams, NodeService, LabelHelper, Notifications, $state, StateManager) { + '$stateParams', 'NodeService', 'LabelHelper', 'Notifications', '$state', 'StateManager', 'AgentService', + function NodeDetailsViewController($stateParams, NodeService, LabelHelper, Notifications, $state, StateManager, AgentService) { var ctrl = this; var originalNode; - + ctrl.$onInit = initView; ctrl.updateLabels = updateLabels; ctrl.updateAvailability = updateAvailability; @@ -13,15 +13,30 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ }; function initView() { - NodeService.node($stateParams.id).then(function(node) { + var applicationState = StateManager.getState(); + ctrl.state.isAgent = applicationState.endpoint.mode.agentProxy; + + var nodeId = $stateParams.id; + NodeService.node(nodeId).then(function(node) { originalNode = node; ctrl.hostDetails = buildHostDetails(node); ctrl.engineDetails = buildEngineDetails(node); ctrl.nodeDetails = buildNodeDetails(node); + if (ctrl.state.isAgent) { + AgentService.hostInfo(nodeId).then(function onHostInfoLoad(agentHostInfo) { + console.log(agentHostInfo); + enhanceHostDetails(ctrl.hostDetails, agentHostInfo); + }); + } }); - var applicationState = StateManager.getState(); - ctrl.state.isAgent = applicationState.endpoint.mode.agentProxy; + + } + + function enhanceHostDetails(hostDetails, agentHostInfo) { + hostDetails.physicalDeviceInfo = agentHostInfo.PhysicalDeviceInfo; + hostDetails.pciDevices = agentHostInfo.InstalledPCIDevices; + hostDetails.physicalDisk = agentHostInfo.PhysicalDisk; } function buildHostDetails(node) { @@ -81,7 +96,7 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ Id: node.Id, Version: node.Version }; - + NodeService.updateNode(config) .then(onUpdateSuccess) .catch(notifyOnError); From dc1ab3ffc3bded9e0ae12daf440db1cd10fd8bea Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Thu, 13 Sep 2018 11:49:24 +0300 Subject: [PATCH 29/36] style(host-details): fix spelling mistake in filter's name --- .../engine-details-panel/engine-details-panel.html | 4 ++-- .../host-details-panel/host-details-panel.html | 2 +- .../swarm-node-details-panel/swarm-node-details-panel.html | 2 +- app/docker/filters/filters.js | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html index bfeda09b2..03c0c8780 100644 --- a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html +++ b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html @@ -23,11 +23,11 @@ - + - +
Hostname {{ $ctrl.host.name }}
Kernel Version {{ $ctrl.host.kernelVersion }}
Total CPU {{ $ctrl.host.totalCPU }}
Total memory {{ $ctrl.host.totalMemory | humansize }}
Installed PCI devices{{ $ctrl.host.pciDevices }}{{ $ctrl.host.pciDevices |commaSeperated }}
Physical disk
Volume Plugins{{ $ctrl.engine.volumePlugins | commaSeperated }}{{ $ctrl.engine.volumePlugins | commaSeparated }}
Network Plugins{{ $ctrl.engine.networkPlugins | commaSeperated }}{{ $ctrl.engine.networkPlugins | commaSeparated }}
diff --git a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html index f4e481b6c..1279f4c84 100644 --- a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html +++ b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html @@ -31,7 +31,7 @@ Installed PCI devices - {{ $ctrl.host.pciDevices |commaSeperated }} + {{ $ctrl.host.pciDevices |commaSeparated }} Physical disk diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html index 5d3c194a4..277704d2c 100644 --- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html @@ -28,7 +28,7 @@ Engine Labels - {{ $ctrl.details.engineLabels | commaSeperated }} + {{ $ctrl.details.engineLabels | commaSeparated }} diff --git a/app/docker/filters/filters.js b/app/docker/filters/filters.js index 0822a4104..03872b529 100644 --- a/app/docker/filters/filters.js +++ b/app/docker/filters/filters.js @@ -270,9 +270,9 @@ angular.module('portainer.docker') return _.split(imageName, '@sha256')[0]; }; }) -.filter('commaSeperated', function commaSeperatedFilter() { +.filter('commaSeparated', function commaSeparatedFilter() { 'use strict'; - return function commaSeperated(list) { + return function commaSeparated(list) { if (!list) { return list; } From 50e69917454c4f00302916c99241e46c3bdf65d7 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Sun, 16 Sep 2018 12:38:38 +0300 Subject: [PATCH 30/36] feat(host-details): get info from agent --- app/agent/rest/host.js | 15 +++++++++++++++ app/agent/services/agentService.js | 15 +++++---------- .../node-details/node-details-view-controller.js | 3 +-- 3 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 app/agent/rest/host.js diff --git a/app/agent/rest/host.js b/app/agent/rest/host.js new file mode 100644 index 000000000..e2f002f21 --- /dev/null +++ b/app/agent/rest/host.js @@ -0,0 +1,15 @@ +angular.module('portainer.agent').factory('Host', [ + '$resource', 'API_ENDPOINT_ENDPOINTS', 'EndpointProvider', + function AgentFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) { + 'use strict'; + return $resource( + API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/host/:action', + { + endpointId: EndpointProvider.endpointID + }, + { + info: { method: 'GET', isArray: false, params: { action: 'info' } } + } + ); + } +]); diff --git a/app/agent/services/agentService.js b/app/agent/services/agentService.js index a1eb96681..7143e1e0f 100644 --- a/app/agent/services/agentService.js +++ b/app/agent/services/agentService.js @@ -1,20 +1,15 @@ angular.module('portainer.agent').factory('AgentService', [ - '$q', 'Agent', - function AgentServiceFactory($q, Agent) { + '$q', 'Agent','HttpRequestHelper', 'Host', + function AgentServiceFactory($q, Agent, HttpRequestHelper, Host) { 'use strict'; var service = {}; service.agents = agents; service.hostInfo = hostInfo; - function hostInfo() { - return $q.when({ - PhysicalDeviceVendor: 'hello', - DeviceVersion: '1.9', - DeviceSerialNumber: '144f', - InstalledPCIDevices: ['usb', 'printer'], - PhysicalDisk: 'none' - }); + function hostInfo(nodeName) { + HttpRequestHelper.setPortainerAgentTargetHeader(nodeName); + return Host.info().$promise; } function agents() { diff --git a/app/docker/views/nodes/node-details/node-details-view-controller.js b/app/docker/views/nodes/node-details/node-details-view-controller.js index c20bb8947..8810ce8a7 100644 --- a/app/docker/views/nodes/node-details/node-details-view-controller.js +++ b/app/docker/views/nodes/node-details/node-details-view-controller.js @@ -23,8 +23,7 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ ctrl.engineDetails = buildEngineDetails(node); ctrl.nodeDetails = buildNodeDetails(node); if (ctrl.state.isAgent) { - AgentService.hostInfo(nodeId).then(function onHostInfoLoad(agentHostInfo) { - console.log(agentHostInfo); + AgentService.hostInfo(node.Hostname).then(function onHostInfoLoad(agentHostInfo) { enhanceHostDetails(ctrl.hostDetails, agentHostInfo); }); } From 21fece80daba5e85e11e6ce2c1ff709f01f2cd8b Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Sun, 16 Sep 2018 13:18:38 +0300 Subject: [PATCH 31/36] feat(host-details): hide engine labels when empty --- .../swarm-node-details-panel/swarm-node-details-panel.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html index 277704d2c..35f73e2a1 100644 --- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html @@ -26,7 +26,7 @@ Status {{ $ctrl.details.status }} - + Engine Labels {{ $ctrl.details.engineLabels | commaSeparated }} From e09f653155ba71cabbb6ef16cf1205ccddef6115 Mon Sep 17 00:00:00 2001 From: Chaim Lando Date: Sun, 16 Sep 2018 15:25:59 +0300 Subject: [PATCH 32/36] feat(node-details): move labels table and save button --- .../node-availability-select-controller.js | 16 ---- .../node-availability-select.html | 13 --- .../node-labels-table-controller.js | 11 +-- .../node-labels-table/node-labels-table.html | 18 ---- .../swarm-node-details-panel-controller.js | 82 ++++++++++++++++--- .../swarm-node-details-panel.html | 38 +++++++-- .../swarm-node-details-panel.js | 3 +- .../node-details-view-controller.js | 43 ++-------- .../nodes/node-details/node-details-view.html | 3 +- 9 files changed, 109 insertions(+), 118 deletions(-) diff --git a/app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js b/app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js index fc3e84165..52df40cd6 100644 --- a/app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js +++ b/app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js @@ -2,26 +2,10 @@ angular .module('portainer.docker') .controller('NodeAvailabilitySelectController', [ function NodeAvailabilitySelectController() { - this.state = { - hasChanges: false - }; this.onChange = onChange; - this.save = save; - this.cancelChanges = cancelChanges; function onChange() { - this.state.hasChanges = this.originalValue !== this.availability; - } - - function save() { this.onSave({ availability: this.availability }); } - - function cancelChanges() { - this.state.hasChanges = false; - this.availability = this.originalValue; - } - - } ]); diff --git a/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html b/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html index e41bc4e9f..94e086127 100644 --- a/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html +++ b/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html @@ -5,17 +5,4 @@ - \ No newline at end of file diff --git a/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js b/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js index ec00f1fa2..44be93d7d 100644 --- a/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js +++ b/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js @@ -3,14 +3,11 @@ angular.module('portainer.docker').controller('NodeLabelsTableController', [ var ctrl = this; ctrl.removeLabel = removeLabel; ctrl.updateLabel = updateLabel; - ctrl.save = save; - ctrl.hasChanges = false; - ctrl.cancelChanges = cancelChanges; function removeLabel(index) { var label = ctrl.labels.splice(index, 1); if (label !== null) { - ctrl.hasChanges = true; + ctrl.onChangedLabels({ labels: ctrl.labels }); } } @@ -19,13 +16,11 @@ angular.module('portainer.docker').controller('NodeLabelsTableController', [ label.value !== label.originalValue || label.key !== label.originalKey ) { - ctrl.hasChanges = true; + ctrl.onChangedLabels({ labels: ctrl.labels }); } } - function save() { - ctrl.onChangedLabels({ labels: ctrl.labels }); - } + function cancelChanges() { ctrl.labels = ctrl.labels diff --git a/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html b/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html index aceaff848..86eee9356 100644 --- a/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html +++ b/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html @@ -31,23 +31,5 @@ - - - - - - \ No newline at end of file diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js index 58677c583..65e376d99 100644 --- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js @@ -1,27 +1,33 @@ angular .module('portainer.docker') .controller('SwarmNodeDetailsPanelController', [ - function SwarmNodeDetailsPanelController() { - this.state = { - managerAddress: '' + 'NodeService', 'LabelHelper', 'Notifications', '$state', + function SwarmNodeDetailsPanelController(NodeService, LabelHelper, Notifications, $state) { + var ctrl = this; + ctrl.state = { + managerAddress: '', + hasChanges: false }; - this.$onChanges = $onChanges; - this.addLabel = addLabel; - this.updateNodeLabels = updateNodeLabels; - this.updateNodeAvailability = updateNodeAvailability; + ctrl.$onChanges = $onChanges; + ctrl.addLabel = addLabel; + ctrl.updateNodeLabels = updateNodeLabels; + ctrl.updateNodeAvailability = updateNodeAvailability; + ctrl.saveChanges = saveChanges; + ctrl.cancelChanges = cancelChanges; + var managerRole = 'manager'; function $onChanges() { - if (!this.details) { + if (!ctrl.details) { return; } - if (this.details.role === managerRole) { - this.state.managerAddress = '(' + this.details.managerAddress + ')'; + if (ctrl.details.role === managerRole) { + ctrl.state.managerAddress = '(' + ctrl.details.managerAddress + ')'; } } function addLabel() { - this.details.nodeLabels.push({ + ctrl.details.nodeLabels.push({ key: '', value: '', originalValue: '', @@ -30,11 +36,61 @@ angular } function updateNodeLabels(labels) { - this.onChangedLabels({ labels: labels }); + ctrl.details.nodeLabels = labels; + ctrl.state.hasChanges = true; } function updateNodeAvailability(availability) { - this.onChangedAvailability({ availability: availability }); + ctrl.details.availability = availability; + ctrl.state.hasChanges = true; + } + + function saveChanges() { + var originalNode = ctrl.originalNode; + var config = { + Name: originalNode.Name, + Availability: ctrl.details.availability, + Role: originalNode.Role, + Labels: LabelHelper.fromKeyValueToLabelHash(ctrl.details.nodeLabels), + Id: originalNode.Id, + Version: originalNode.Version + }; + + NodeService.updateNode(config) + .then(onUpdateSuccess) + .catch(notifyOnError); + + function onUpdateSuccess() { + Notifications.success('Node successfully updated', 'Node updated'); + $state.go( + 'docker.nodes.node', + { id: originalNode.Id }, + { reload: true } + ); + } + + function notifyOnError(error) { + Notifications.error('Failure', error, 'Failed to update node'); + } + } + + function cancelChanges() { + cancelLabelChanges(); + ctrl.details.availability = ctrl.originalNode.Availability; + ctrl.state.hasChanges = false; + } + + function cancelLabelChanges() { + ctrl.details.nodeLabels = ctrl.details.nodeLabels + .filter(function(label) { + return label.originalValue || label.originalKey; + }) + .map(function(label) { + return Object.assign(label, { + value: label.originalValue, + key: label.originalKey + }); + }); } } ]); diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html index 35f73e2a1..61370725a 100644 --- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html @@ -16,15 +16,15 @@ Availability - + + Status - {{ $ctrl.details.status }} + {{ + $ctrl.details.status }} Engine Labels @@ -39,14 +39,36 @@ Node Labels - - + + + + + + + + + +
diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js index 275b44240..7eea3e708 100644 --- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js +++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js @@ -4,7 +4,6 @@ angular.module('portainer.docker').component('swarmNodeDetailsPanel', { controller: 'SwarmNodeDetailsPanelController', bindings: { details: '<', - onChangedLabels: '&', - onChangedAvailability: '&' + originalNode: '<' } }); diff --git a/app/docker/views/nodes/node-details/node-details-view-controller.js b/app/docker/views/nodes/node-details/node-details-view-controller.js index 8810ce8a7..ef914768f 100644 --- a/app/docker/views/nodes/node-details/node-details-view-controller.js +++ b/app/docker/views/nodes/node-details/node-details-view-controller.js @@ -1,12 +1,9 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ - '$stateParams', 'NodeService', 'LabelHelper', 'Notifications', '$state', 'StateManager', 'AgentService', - function NodeDetailsViewController($stateParams, NodeService, LabelHelper, Notifications, $state, StateManager, AgentService) { + '$stateParams', 'NodeService', 'StateManager', 'AgentService', + function NodeDetailsViewController($stateParams, NodeService, StateManager, AgentService) { var ctrl = this; - var originalNode; ctrl.$onInit = initView; - ctrl.updateLabels = updateLabels; - ctrl.updateAvailability = updateAvailability; ctrl.state = { isAgent: false @@ -18,7 +15,7 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ var nodeId = $stateParams.id; NodeService.node(nodeId).then(function(node) { - originalNode = node; + ctrl.originalNode = node; ctrl.hostDetails = buildHostDetails(node); ctrl.engineDetails = buildEngineDetails(node); ctrl.nodeDetails = buildNodeDetails(node); @@ -76,39 +73,9 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ }; } - function updateLabels(labels) { - originalNode.Labels = labels; - updateNode(originalNode); - } + - function updateAvailability(availability) { - originalNode.Availability = availability; - updateNode(originalNode); - } - - function updateNode(node) { - var config = { - Name: node.Name, - Availability: node.Availability, - Role: node.Role, - Labels: LabelHelper.fromKeyValueToLabelHash(node.Labels), - Id: node.Id, - Version: node.Version - }; - - NodeService.updateNode(config) - .then(onUpdateSuccess) - .catch(notifyOnError); - - function onUpdateSuccess() { - Notifications.success('Node successfully updated', 'Node updated'); - $state.go('docker.nodes.node', { id: node.Id }, { reload: true }); - } - - function notifyOnError(error) { - Notifications.error('Failure', error, 'Failed to update node'); - } - } + function transformPlugins(pluginsList, type) { return pluginsList diff --git a/app/docker/views/nodes/node-details/node-details-view.html b/app/docker/views/nodes/node-details/node-details-view.html index 92815fe3e..85c02f538 100644 --- a/app/docker/views/nodes/node-details/node-details-view.html +++ b/app/docker/views/nodes/node-details/node-details-view.html @@ -5,7 +5,6 @@ > \ No newline at end of file From db0fc1382dde5a06b4ba0a3f97cb0c75947c5064 Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Sun, 23 Sep 2018 05:02:08 +0300 Subject: [PATCH 33/36] feat(host-info): add different urls for refresh --- app/docker/components/host-overview/host-overview.html | 2 +- app/docker/components/host-overview/host-overview.js | 4 ++-- app/docker/views/host/host-view.html | 1 + app/docker/views/nodes/node-details/node-details-view.html | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/docker/components/host-overview/host-overview.html b/app/docker/components/host-overview/host-overview.html index e57ab71d8..6cef660a4 100644 --- a/app/docker/components/host-overview/host-overview.html +++ b/app/docker/components/host-overview/host-overview.html @@ -1,6 +1,6 @@ - + diff --git a/app/docker/components/host-overview/host-overview.js b/app/docker/components/host-overview/host-overview.js index ad21a44ef..c21384d04 100644 --- a/app/docker/components/host-overview/host-overview.js +++ b/app/docker/components/host-overview/host-overview.js @@ -4,8 +4,8 @@ angular.module('portainer.docker').component('hostOverview', { bindings: { hostDetails: '<', engineDetails: '<', - nodeDetails: '<', - isAgent: '<' + isAgent: '<', + refreshUrl: '@' }, transclude: true }); diff --git a/app/docker/views/host/host-view.html b/app/docker/views/host/host-view.html index 13cea0a2e..46ac1090a 100644 --- a/app/docker/views/host/host-view.html +++ b/app/docker/views/host/host-view.html @@ -1,4 +1,5 @@ \ No newline at end of file diff --git a/app/docker/views/nodes/node-details/node-details-view.html b/app/docker/views/nodes/node-details/node-details-view.html index 85c02f538..87b838b7d 100644 --- a/app/docker/views/nodes/node-details/node-details-view.html +++ b/app/docker/views/nodes/node-details/node-details-view.html @@ -2,6 +2,7 @@ is-agent="$ctrl.state.isAgent" host-details="$ctrl.hostDetails" engine-details="$ctrl.engineDetails" + refresh-url="docker.nodes.node" > Date: Tue, 25 Sep 2018 10:39:55 +0300 Subject: [PATCH 34/36] feat(host-details): show disk/devices info for agent --- .../devices-panel/devices-panel.html | 23 +++++++++++++++++++ .../devices-panel/devices-panel.js | 8 +++++++ .../disks-panel/disks-panel.html | 23 +++++++++++++++++++ .../disks-panel/disks-panel.js | 8 +++++++ .../host-details-panel.html | 15 ++---------- .../node-details-view-controller.js | 16 ++----------- .../nodes/node-details/node-details-view.html | 2 ++ 7 files changed, 68 insertions(+), 27 deletions(-) create mode 100644 app/docker/components/host-view-panels/devices-panel/devices-panel.html create mode 100644 app/docker/components/host-view-panels/devices-panel/devices-panel.js create mode 100644 app/docker/components/host-view-panels/disks-panel/disks-panel.html create mode 100644 app/docker/components/host-view-panels/disks-panel/disks-panel.js diff --git a/app/docker/components/host-view-panels/devices-panel/devices-panel.html b/app/docker/components/host-view-panels/devices-panel/devices-panel.html new file mode 100644 index 000000000..975eff062 --- /dev/null +++ b/app/docker/components/host-view-panels/devices-panel/devices-panel.html @@ -0,0 +1,23 @@ +
+
+ + + + + + + + + + + + + + + + +
NameVendor
{{device.Name}}{{device.Vendor}}
+
+
+
+
\ No newline at end of file diff --git a/app/docker/components/host-view-panels/devices-panel/devices-panel.js b/app/docker/components/host-view-panels/devices-panel/devices-panel.js new file mode 100644 index 000000000..d863e5b26 --- /dev/null +++ b/app/docker/components/host-view-panels/devices-panel/devices-panel.js @@ -0,0 +1,8 @@ +angular.module('portainer.docker').component('devicesPanel', { + templateUrl: + 'app/docker/components/host-view-panels/devices-panel/devices-panel.html', + // controller: 'DevicesPanelController' + bindings: { + devices: '<' + } +}); diff --git a/app/docker/components/host-view-panels/disks-panel/disks-panel.html b/app/docker/components/host-view-panels/disks-panel/disks-panel.html new file mode 100644 index 000000000..c72749e26 --- /dev/null +++ b/app/docker/components/host-view-panels/disks-panel/disks-panel.html @@ -0,0 +1,23 @@ +
+
+ + + + + + + + + + + + + + + + +
VendorSize
{{disk.Vendor}}{{disk.Size | humansize}}
+
+
+
+
\ No newline at end of file diff --git a/app/docker/components/host-view-panels/disks-panel/disks-panel.js b/app/docker/components/host-view-panels/disks-panel/disks-panel.js new file mode 100644 index 000000000..97639402a --- /dev/null +++ b/app/docker/components/host-view-panels/disks-panel/disks-panel.js @@ -0,0 +1,8 @@ +angular.module('portainer.docker').component('disksPanel', { + templateUrl: + 'app/docker/components/host-view-panels/disks-panel/disks-panel.html', + // controller: 'DisksPanelController' + bindings: { + disks: '<' + } +}); diff --git a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html index 1279f4c84..2ea05f88f 100644 --- a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html +++ b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.html @@ -11,7 +11,8 @@ OS Information - {{ $ctrl.host.os.type }} {{$ctrl.host.os.arch}} {{$ctrl.host.os.name}} + {{ $ctrl.host.os.type }} {{$ctrl.host.os.arch}} + {{$ctrl.host.os.name}} Kernel Version @@ -25,18 +26,6 @@ Total memory {{ $ctrl.host.totalMemory | humansize }} - - Physical device information - {{ $ctrl.host.physicalDeviceInfo }} - - - Installed PCI devices - {{ $ctrl.host.pciDevices |commaSeparated }} - - - Physical disk - {{ $ctrl.host.physicalDisk }} - diff --git a/app/docker/views/nodes/node-details/node-details-view-controller.js b/app/docker/views/nodes/node-details/node-details-view-controller.js index ef914768f..e3fc2690f 100644 --- a/app/docker/views/nodes/node-details/node-details-view-controller.js +++ b/app/docker/views/nodes/node-details/node-details-view-controller.js @@ -21,29 +21,21 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ ctrl.nodeDetails = buildNodeDetails(node); if (ctrl.state.isAgent) { AgentService.hostInfo(node.Hostname).then(function onHostInfoLoad(agentHostInfo) { - enhanceHostDetails(ctrl.hostDetails, agentHostInfo); + ctrl.devices = agentHostInfo.PCIDevices; + ctrl.disks = agentHostInfo.PhysicalDisks; }); } }); - - } - function enhanceHostDetails(hostDetails, agentHostInfo) { - hostDetails.physicalDeviceInfo = agentHostInfo.PhysicalDeviceInfo; - hostDetails.pciDevices = agentHostInfo.InstalledPCIDevices; - hostDetails.physicalDisk = agentHostInfo.PhysicalDisk; - } function buildHostDetails(node) { return { os: { arch: node.PlatformArchitecture, type: node.PlatformOS - // name: node.OperatingSystem TODO }, name: node.Hostname, - // kernelVersion: node.KernelVersion, totalCPU: node.CPUs / 1e9, totalMemory: node.Memory }; @@ -52,10 +44,6 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [ function buildEngineDetails(node) { return { releaseVersion: node.EngineVersion, - // apiVersion: versionDetails.ApiVersion, TODO - // rootDirectory: node.DockerRootDir, TODO - // storageDriver: node.Driver, - // loggingDriver: node.LoggingDriver, volumePlugins: transformPlugins(node.Plugins, 'Volume'), networkPlugins: transformPlugins(node.Plugins, 'Network') }; diff --git a/app/docker/views/nodes/node-details/node-details-view.html b/app/docker/views/nodes/node-details/node-details-view.html index 87b838b7d..af0bf2cde 100644 --- a/app/docker/views/nodes/node-details/node-details-view.html +++ b/app/docker/views/nodes/node-details/node-details-view.html @@ -4,6 +4,8 @@ engine-details="$ctrl.engineDetails" refresh-url="docker.nodes.node" > + + Date: Sun, 30 Sep 2018 09:28:45 +0300 Subject: [PATCH 35/36] feat(host-view): add loading indicator to devices-panel --- .../host-view-panels/devices-panel/devices-panel.html | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/docker/components/host-view-panels/devices-panel/devices-panel.html b/app/docker/components/host-view-panels/devices-panel/devices-panel.html index 975eff062..2de933a11 100644 --- a/app/docker/components/host-view-panels/devices-panel/devices-panel.html +++ b/app/docker/components/host-view-panels/devices-panel/devices-panel.html @@ -11,10 +11,18 @@ - + {{device.Name}} {{device.Vendor}} + + Loading... + + + + No device available. + + From 86591cf1a65964739057197d980324f82040d260 Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Sun, 30 Sep 2018 09:31:24 +0300 Subject: [PATCH 36/36] feat(host-details): add loading indicator to disks panel --- .../host-view-panels/devices-panel/devices-panel.html | 4 ++-- .../host-view-panels/disks-panel/disks-panel.html | 10 +++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/docker/components/host-view-panels/devices-panel/devices-panel.html b/app/docker/components/host-view-panels/devices-panel/devices-panel.html index 2de933a11..5279f4ac1 100644 --- a/app/docker/components/host-view-panels/devices-panel/devices-panel.html +++ b/app/docker/components/host-view-panels/devices-panel/devices-panel.html @@ -16,10 +16,10 @@ {{device.Vendor}} - Loading... + Loading... - + No device available. diff --git a/app/docker/components/host-view-panels/disks-panel/disks-panel.html b/app/docker/components/host-view-panels/disks-panel/disks-panel.html index c72749e26..632f07151 100644 --- a/app/docker/components/host-view-panels/disks-panel/disks-panel.html +++ b/app/docker/components/host-view-panels/disks-panel/disks-panel.html @@ -11,10 +11,18 @@ - + {{disk.Vendor}} {{disk.Size | humansize}} + + Loading... + + + + No disks available. + +