Fix array reduce bug

This commit is contained in:
Jeffrey Morgan
2015-02-15 22:27:46 -08:00
parent 5110b5c144
commit 403d805b12
3 changed files with 36 additions and 91 deletions

View File

@@ -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 = <div className="state state-downloading"><div style={style} className="downloading-arrow"></div></div>;
} else if (container.State.Running && !container.State.Paused) {
state = <div className="state state-running"><div style={style} className="runningwave"></div></div>;

View File

@@ -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);
});
},

View File

@@ -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) {