From 403d805b12a8a284999004b9646f21fa0df04dfc Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Sun, 15 Feb 2015 22:27:46 -0800 Subject: [PATCH] Fix array reduce bug --- src/ContainerListItem.react.js | 16 +---- src/ContainerStore.js | 108 ++++++++++----------------------- src/ContainerUtil.js | 3 + 3 files changed, 36 insertions(+), 91 deletions(-) diff --git a/src/ContainerListItem.react.js b/src/ContainerListItem.react.js index bf69e31ccd..bd371ca423 100644 --- a/src/ContainerListItem.react.js +++ b/src/ContainerListItem.react.js @@ -30,19 +30,7 @@ var ContainerListItem = React.createClass({ render: function () { var self = this; var container = this.props.container; - var downloadingImage = null, downloading = false; - var env = container.Config.Env; - if (env.length) { - var obj = _.object(env.map(function (e) { - return e.split('='); - })); - if (obj.KITEMATIC_DOWNLOADING) { - downloading = true; - } - downloadingImage = obj.KITEMATIC_DOWNLOADING_IMAGE || null; - } - - var imageName = downloadingImage || container.Config.Image; + var imageName = container.Config.Image; // Synchronize all animations var style = { @@ -50,7 +38,7 @@ var ContainerListItem = React.createClass({ }; var state; - if (downloading) { + if (container.State.Downloading) { state =
; } else if (container.State.Running && !container.State.Paused) { state =
; diff --git a/src/ContainerStore.js b/src/ContainerStore.js index 6c84e0f9fb..b7bdc00a4d 100644 --- a/src/ContainerStore.js +++ b/src/ContainerStore.js @@ -7,6 +7,7 @@ var docker = require('./Docker'); var registry = require('./Registry'); var ContainerUtil = require('./ContainerUtil'); +var _placeholders = {}; var _containers = {}; var _progress = {}; var _muted = {}; @@ -15,26 +16,6 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), { CLIENT_CONTAINER_EVENT: 'client_container_event', SERVER_CONTAINER_EVENT: 'server_container_event', SERVER_PROGRESS_EVENT: 'server_progress_event', - _pullScratchImage: function (callback) { - var image = docker.client().getImage('scratch:latest'); - image.inspect(function (err, data) { - if (!data) { - docker.client().pull('scratch:latest', function (err, stream) { - if (err) { - callback(err); - return; - } - stream.setEncoding('utf8'); - stream.on('data', function () {}); - stream.on('end', function () { - callback(); - }); - }); - } else { - callback(); - } - }); - }, _pullImage: function (repository, tag, callback, progressCallback) { registry.layers(repository, tag, function (err, layerSizes) { @@ -64,7 +45,6 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), { stream.on('data', function (str) { var data = JSON.parse(str); - console.log(data); if (data.status === 'Already exists') { layerProgress[data.id] = 1; @@ -81,7 +61,7 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), { var totalReceived = chunks.reduce(function (pv, sv) { return pv + sv; - }); + }, 0); var totalProgress = totalReceived / totalBytes; progressCallback(totalProgress); @@ -104,14 +84,8 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), { if (containerData.Config && containerData.Config.Image) { containerData.Image = containerData.Config.Image; } - existing.kill(function (err) { - if (err) { - console.log(err); - } - existing.remove(function (err) { - if (err) { - console.log(err); - } + existing.kill(function () { + existing.remove(function () { docker.client().getImage(containerData.Image).inspect(function (err, data) { if (err) { callback(err); @@ -147,31 +121,6 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), { }); }); }, - _createPlaceholderContainer: function (imageName, name, callback) { - var self = this; - this._pullScratchImage(function (err) { - if (err) { - callback(err); - return; - } - docker.client().createContainer({ - Image: 'scratch:latest', - Tty: false, - Env: [ - 'KITEMATIC_DOWNLOADING=true', - 'KITEMATIC_DOWNLOADING_IMAGE=' + imageName - ], - Cmd: 'placeholder', - name: name - }, function (err) { - if (err) { - callback(err); - return; - } - self.fetchContainer(name, callback); - }); - }); - }, _generateName: function (repository) { var base = _.last(repository.split('/')); var count = 1; @@ -296,28 +245,33 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), { var self = this; var imageName = repository + ':' + tag; var containerName = this._generateName(repository); - // Pull image - self._createPlaceholderContainer(imageName, containerName, function (err, container) { - if (err) { - callback(err); - return; + + _placeholders[containerName] = { + Name: containerName, + Image: imageName, + Config: { + Image: imageName, + }, + State: { + Downloading: true } - _containers[containerName] = container; - self.emit(self.CLIENT_CONTAINER_EVENT, containerName, 'create'); - _muted[containerName] = true; - _progress[containerName] = 0; - self._pullImage(repository, tag, function () { - self._createContainer(containerName, {Image: imageName}, function () { - delete _progress[containerName]; - _muted[containerName] = false; - self.emit(self.CLIENT_CONTAINER_EVENT, containerName); - }); - }, function (progress) { - _progress[containerName] = progress; - self.emit(self.SERVER_PROGRESS_EVENT, containerName); + }; + + self.emit(self.CLIENT_CONTAINER_EVENT, containerName, 'create'); + _muted[containerName] = true; + _progress[containerName] = 0; + self._pullImage(repository, tag, function () { + delete _placeholders[containerName]; + self._createContainer(containerName, {Image: imageName}, function () { + delete _progress[containerName]; + _muted[containerName] = false; + self.emit(self.CLIENT_CONTAINER_EVENT, containerName); }); - callback(null, containerName); + }, function (progress) { + _progress[containerName] = progress; + self.emit(self.SERVER_PROGRESS_EVENT, containerName); }); + callback(null, containerName); }, updateContainer: function (name, data, callback) { _muted[name] = true; @@ -377,13 +331,13 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), { } }, containers: function() { - return _containers; + return _.extend(_placeholders, _containers); }, container: function (name) { - return _containers[name]; + return this.containers()[name]; }, sorted: function () { - return _.values(_containers).sort(function (a, b) { + return _.values(this.containers()).sort(function (a, b) { return a.Name.localeCompare(b.Name); }); }, diff --git a/src/ContainerUtil.js b/src/ContainerUtil.js index 044ba1652a..9fef385b68 100644 --- a/src/ContainerUtil.js +++ b/src/ContainerUtil.js @@ -13,6 +13,9 @@ var ContainerUtil = { })); }, ports: function (container) { + if (!container.NetworkSettings) { + return {}; + } var res = {}; var ip = docker.host; _.each(container.NetworkSettings.Ports, function (value, key) {