From 8c68e92e748278dbedea749b0d28e557bd45eae8 Mon Sep 17 00:00:00 2001 From: Anthony Lapenna Date: Thu, 24 Aug 2017 07:53:34 +0200 Subject: [PATCH] feat(images): use containers instead of /system/df to check unused images (#1150) --- app/components/images/images.html | 6 +++--- app/components/images/imagesController.js | 2 +- .../templates/templatesController.js | 2 +- app/models/docker/image.js | 2 +- app/services/docker/containerService.js | 2 +- app/services/docker/imageService.js | 18 ++++++++++++------ 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/app/components/images/images.html b/app/components/images/images.html index 5959c0bf2..8e82ff1a6 100644 --- a/app/components/images/images.html +++ b/app/components/images/images.html @@ -70,7 +70,7 @@
- + @@ -121,12 +121,12 @@ - + {{ image.Id|truncate:20}} + ng-if="::image.ContainerCount === 0"> Unused diff --git a/app/components/images/imagesController.js b/app/components/images/imagesController.js index e8c9ca30f..6770f44a9 100644 --- a/app/components/images/imagesController.js +++ b/app/components/images/imagesController.js @@ -95,7 +95,7 @@ function ($scope, $state, ImageService, Notifications, Pagination, ModalService) $('#loadImagesSpinner').show(); var endpointProvider = $scope.applicationState.endpoint.mode.provider; var apiVersion = $scope.applicationState.endpoint.apiVersion; - ImageService.images(apiVersion >= 1.25 && endpointProvider !== 'DOCKER_SWARM' && endpointProvider !== 'VMWARE_VIC') + ImageService.images(true) .then(function success(data) { $scope.images = data; }) diff --git a/app/components/templates/templatesController.js b/app/components/templates/templatesController.js index 9a8d90455..347b11d9e 100644 --- a/app/components/templates/templatesController.js +++ b/app/components/templates/templatesController.js @@ -151,7 +151,7 @@ function ($scope, $q, $state, $stateParams, $anchorScroll, $filter, ContainerSer $q.all({ templates: TemplateService.getTemplates(templatesKey), - containers: ContainerService.getContainers(0), + containers: ContainerService.containers(0), volumes: VolumeService.getVolumes(), networks: NetworkService.networks( provider === 'DOCKER_STANDALONE' || provider === 'DOCKER_SWARM_MODE', diff --git a/app/models/docker/image.js b/app/models/docker/image.js index 43301787f..5dd073800 100644 --- a/app/models/docker/image.js +++ b/app/models/docker/image.js @@ -3,8 +3,8 @@ function ImageViewModel(data) { this.Tag = data.Tag; this.Repository = data.Repository; this.Created = data.Created; - this.Containers = data.dataUsage ? data.dataUsage.Containers : 0; this.Checked = false; this.RepoTags = data.RepoTags; this.VirtualSize = data.VirtualSize; + this.ContainerCount = data.ContainerCount; } diff --git a/app/services/docker/containerService.js b/app/services/docker/containerService.js index 001b2203d..ee946fec3 100644 --- a/app/services/docker/containerService.js +++ b/app/services/docker/containerService.js @@ -3,7 +3,7 @@ angular.module('portainer.services') 'use strict'; var service = {}; - service.getContainers = function (all) { + service.containers = function(all) { var deferred = $q.defer(); Container.query({ all: all }).$promise .then(function success(data) { diff --git a/app/services/docker/imageService.js b/app/services/docker/imageService.js index 95b0ba92e..181de81e3 100644 --- a/app/services/docker/imageService.js +++ b/app/services/docker/imageService.js @@ -1,5 +1,5 @@ angular.module('portainer.services') -.factory('ImageService', ['$q', 'Image', 'ImageHelper', 'RegistryService', 'HttpRequestHelper', 'SystemService', function ImageServiceFactory($q, Image, ImageHelper, RegistryService, HttpRequestHelper, SystemService) { +.factory('ImageService', ['$q', 'Image', 'ImageHelper', 'RegistryService', 'HttpRequestHelper', 'ContainerService', function ImageServiceFactory($q, Image, ImageHelper, RegistryService, HttpRequestHelper, ContainerService) { 'use strict'; var service = {}; @@ -24,17 +24,23 @@ angular.module('portainer.services') var deferred = $q.defer(); $q.all({ - dataUsage: withUsage ? SystemService.dataUsage() : { Images: [] }, + containers: withUsage ? ContainerService.containers(1) : [], images: Image.query({}).$promise }) .then(function success(data) { - var images = data.images.map(function(item) { - item.dataUsage = data.dataUsage.Images.find(function(usage) { - return item.Id === usage.Id; - }); + var containers = data.containers; + var images = data.images.map(function(item) { + item.ContainerCount = 0; + for (var i = 0; i < containers.length; i++) { + var container = containers[i]; + if (container.ImageID === item.Id) { + item.ContainerCount++; + } + } return new ImageViewModel(item); }); + deferred.resolve(images); }) .catch(function error(err) {