Fixed app state syncing bugs.

This commit is contained in:
Sean Li 2014-09-30 14:20:13 -07:00
parent f69ddb1251
commit 61418d86a9
2 changed files with 41 additions and 39 deletions

View File

@ -6,12 +6,8 @@ var convert = new Convert();
AppUtil = {}; AppUtil = {};
AppUtil.create = function () {
};
AppUtil.run = function (app) { AppUtil.run = function (app) {
var image = Images.findOne({'docker.Id': app.docker.Image}); var image = Images.findOne({_id: app.imageId});
// Delete old container if one already exists // Delete old container if one already exists
Docker.removeContainer(app.name, function (err) { Docker.removeContainer(app.name, function (err) {
if (err) { console.error(err); } if (err) { console.error(err); }
@ -181,7 +177,6 @@ AppUtil.sync = function () {
_.each(apps, function (app) { _.each(apps, function (app) {
if (app.docker && app.docker.Id) { if (app.docker && app.docker.Id) {
Docker.getContainerData(app.docker.Id, function (err, data) { Docker.getContainerData(app.docker.Id, function (err, data) {
console.log(data);
var status = 'STARTING'; var status = 'STARTING';
if (data.State.Running) { if (data.State.Running) {
status = 'READY'; status = 'READY';
@ -198,7 +193,9 @@ AppUtil.sync = function () {
} }
}); });
var dockerIds = _.map(apps, function (app) { var dockerIds = _.map(apps, function (app) {
return app.docker.Id; if (app.docker && app.docker.Id) {
return app.docker.Id;
}
}); });
var containerIds = _.map(containers, function (container) { var containerIds = _.map(containers, function (container) {
return container.Id; return container.Id;
@ -206,7 +203,7 @@ AppUtil.sync = function () {
var diffApps = _.difference(dockerIds, containerIds); var diffApps = _.difference(dockerIds, containerIds);
_.each(diffApps, function (appContainerId) { _.each(diffApps, function (appContainerId) {
var app = Apps.findOne({'docker.Id': appContainerId}); var app = Apps.findOne({'docker.Id': appContainerId});
if (app) { if (app && app.status !== 'STARTING') {
AppUtil.remove(app._id); AppUtil.remove(app._id);
} }
}); });
@ -215,38 +212,43 @@ AppUtil.sync = function () {
}); });
_.each(diffContainers, function (container) { _.each(diffContainers, function (container) {
var appName = container.Name.substring(1); var appName = container.Name.substring(1);
var appPath = path.join(Util.KITE_PATH, appName); var startingApp = _.find(apps, function (app) {
if (!fs.existsSync(appPath)) { return app.status === 'STARTING' && app.name === appName;
console.log('Created Kite ' + appName + ' directory.');
fs.mkdirSync(appPath, function (err) {
if (err) { throw err; }
});
}
var envVars = container.Config.Env;
var config = {};
_.each(envVars, function (envVar) {
var eqPos = envVar.indexOf('=');
var envKey = envVar.substring(0, eqPos);
var envVal = envVar.substring(eqPos + 1);
config[envKey] = envVal;
}); });
var status = 'STARTING'; if (!startingApp) {
if (container.State.Running) { var appPath = path.join(Util.KITE_PATH, appName);
status = 'READY'; if (!fs.existsSync(appPath)) {
} else { console.log('Created Kite ' + appName + ' directory.');
status = 'ERROR'; fs.mkdirSync(appPath, function (err) {
if (err) { throw err; }
});
}
var envVars = container.Config.Env;
var config = {};
_.each(envVars, function (envVar) {
var eqPos = envVar.indexOf('=');
var envKey = envVar.substring(0, eqPos);
var envVal = envVar.substring(eqPos + 1);
config[envKey] = envVal;
});
var status = 'STARTING';
if (container.State.Running) {
status = 'READY';
} else {
status = 'ERROR';
}
var appObj = {
name: appName,
docker: container,
status: status,
config: config,
path: appPath,
logs: [],
createdAt: new Date()
};
console.log(appObj);
Apps.insert(appObj);
} }
var appObj = {
name: appName,
docker: container,
status: status,
config: config,
path: appPath,
logs: [],
createdAt: new Date()
};
console.log(appObj);
Apps.insert(appObj);
}); });
} }
}); });

View File

@ -1,5 +1,5 @@
Template.dashboard_apps.helpers({ Template.dashboard_apps.helpers({
apps: function () { apps: function () {
return Apps.find({}, {sort: {createdAt: -1}}); return Apps.find({name: {$ne: 'kite-dns'}}, {sort: {createdAt: -1}});
} }
}); });