diff --git a/meteor/client/lib/apputil.js b/meteor/client/lib/apputil.js index dc72553703..00e53e3bc7 100644 --- a/meteor/client/lib/apputil.js +++ b/meteor/client/lib/apputil.js @@ -31,7 +31,6 @@ AppUtil.run = function (app, callback) { }}); return; } - // Set a delay for app to spin up Apps.update(app._id, {$set: { docker: data, status: 'READY' @@ -167,7 +166,7 @@ AppUtil.sync = function (callback) { var diffApps = _.difference(guiIds, containerIds); _.each(diffApps, function (appContainerId) { var app = Apps.findOne({'docker.Id': appContainerId}); - if (app && app.status === 'READY') { + if (app && app.status !== 'STARTING') { AppUtil.remove(app._id); } }); diff --git a/meteor/client/lib/imageutil.js b/meteor/client/lib/imageutil.js index 4aa4548bf5..db7cfc7442 100644 --- a/meteor/client/lib/imageutil.js +++ b/meteor/client/lib/imageutil.js @@ -259,7 +259,7 @@ ImageUtil.sync = function (callback) { var diffImages = _.difference(kitematicIds, daemonIds); _.each(diffImages, function (imageId) { var image = Images.findOne({'docker.Id': imageId}); - if (image && image.status === 'READY') { + if (image && image.status !== 'BUILDING') { Images.remove(image._id); } }); @@ -269,7 +269,7 @@ ImageUtil.sync = function (callback) { return _.contains(kitematicIds, image.Id); }); _.each(diffDockerImages, function (image) { - if (!image.RepoTags || !image.Config || _.isEmpty(image.Config.ExposedPorts)) { + if (!image.RepoTags || !image.RepoTags || image.RepoTags[0] === ':' || !image.Config || _.isEmpty(image.Config.ExposedPorts)) { return; } diff --git a/meteor/client/lib/metrics.js b/meteor/client/lib/metrics.js index 2321e17381..53fb465830 100644 --- a/meteor/client/lib/metrics.js +++ b/meteor/client/lib/metrics.js @@ -2,9 +2,11 @@ var remote = require('remote'); var app = remote.require('app'); var crypto = require('crypto'); var uuid = require('node-uuid'); -var level = require('levelup'); var path = require('path'); -var db = level(path.join(process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME'], 'Library/Application Support/Kitematic/data', 'db')); +var fs = require('fs'); + +var level = require('levelup'); +var db; Metrics = {}; @@ -49,19 +51,28 @@ Metrics.trackEvent = function (name) { }); }; -Metrics.prepareTracking = function () { +Metrics.prepareTracking = function (callback) { + db = level(Util.getMetricsDir()); db.get('metrics.enabled', function (err, value) { if (err && err.notFound) { var settings = Settings.findOne(); if (settings && settings.tracking) { - db.put('metrics.enabled', !!settings.tracking); + db.put('metrics.enabled', !!settings.tracking, function(err) { + callback(); + }); } else { - db.put('metrics.enabled', true); + db.put('metrics.enabled', true, function (err) { + callback(); + }); } } db.get('metrics.uuid', function (err, value) { if (err && err.notFound) { - db.put('metrics.uuid', uuid.v4()); + db.put('metrics.uuid', uuid.v4(), function (err) { + callback(); + }); + } else { + callback(); } }); }); diff --git a/meteor/client/lib/startup.js b/meteor/client/lib/startup.js index 6bd9ea31f5..ee11a019a0 100644 --- a/meteor/client/lib/startup.js +++ b/meteor/client/lib/startup.js @@ -2,28 +2,20 @@ var fs = require('fs'); Meteor.startup(function () { console.log('Kitematic started.'); - if (!fs.existsSync(Util.KITE_PATH)) { - console.log('Created Kitematic directory.'); - fs.mkdirSync(Util.KITE_PATH); - } - if (!fs.existsSync(Util.KITE_TAR_PATH)) { - console.log('Created Kitematic .tar directory.'); - fs.mkdirSync(Util.KITE_TAR_PATH); - } - if (!fs.existsSync(Util.KITE_IMAGES_PATH)) { - console.log('Created Kitematic .images directory.'); - fs.mkdirSync(Util.KITE_IMAGES_PATH); - } - if (!fs.existsSync(Util.getResourceDir())) { - fs.mkdirSync(Util.getResourceDir()); - } - Metrics.prepareTracking(); - Metrics.trackEvent('app started'); - Metrics.trackEvent('app heartbeat'); - Meteor.setInterval(function () { + [Util.KITE_PATH, Util.KITE_TAR_PATH, Util.KITE_IMAGES_PATH, Util.getAppSupportDir(), Util.getResourceDir(), Util.getDataDir(), Util.getMetricsDir()].forEach(function (d) { + if (!fs.existsSync(d)) { + fs.mkdirSync(d); + } + }); + + Metrics.prepareTracking(function() { + Metrics.trackEvent('app started'); Metrics.trackEvent('app heartbeat'); - }, 14400000); + Meteor.setInterval(function () { + Metrics.trackEvent('app heartbeat'); + }, 14400000); + }); Boot2Docker.ip(function (err, ip) { if (!err) { diff --git a/meteor/client/lib/util.js b/meteor/client/lib/util.js index c55302344c..31672455fe 100755 --- a/meteor/client/lib/util.js +++ b/meteor/client/lib/util.js @@ -17,6 +17,10 @@ Util.getBinDir = function () { return path.join(process.env.DIR, 'resources'); }; +Util.getAppSupportDir = function () { + return path.join(Util.getHomePath(), 'Library/Application Support/Kitematic'); +}; + Util.getResourceDir = function () { return path.join(Util.getHomePath(), 'Library/Application Support/Kitematic/Resources'); }; @@ -25,6 +29,10 @@ Util.getDataDir = function () { return path.join(Util.getHomePath(), 'Library/Application Support/Kitematic/data'); }; +Util.getMetricsDir = function () { + return path.join(Util.getHomePath(), 'Library/Application Support/Kitematic/data/db'); +}; + Util.KITE_PATH = path.join(Util.getHomePath(), 'Kitematic'); Util.KITE_TAR_PATH = path.join(Util.KITE_PATH, '.tar'); Util.KITE_IMAGES_PATH = path.join(Util.KITE_PATH, '.images');