mirror of
https://github.com/docker/docs.git
synced 2026-11-05 00:14:17 +03:00
Merge branch 'analytics' of github.com:kitematic/kitematic into rc0.2.0
Conflicts: index.js meteor/.meteor/packages meteor/client/views/dashboard/layouts/dashboard-apps-layout.js
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -11,7 +11,7 @@ bin
|
||||
# Resources
|
||||
resources/cache
|
||||
resources/base-images.tar.gz
|
||||
resources/virtualbox-4.3.12.pkg
|
||||
resources/virtualbox-*.pkg
|
||||
resources/boot2docker
|
||||
resources/node-webkit
|
||||
resources/mongod
|
||||
|
||||
3
index.js
3
index.js
@@ -70,6 +70,7 @@ var start = function (callback) {
|
||||
user_env.BIND_IP = '127.0.0.1';
|
||||
user_env.DB_PATH = dataPath;
|
||||
user_env.MONGO_URL = 'mongodb://localhost:' + mongoPort + '/meteor';
|
||||
user_env.METEOR_SETTINGS = fs.readFileSync(path.join(process.cwd(), 'resources', 'settings.json'), 'utf8');
|
||||
var nodeChild = child_process.spawn(path.join(process.cwd(), 'resources', 'node'), ['./bundle/main.js'], {
|
||||
env: user_env
|
||||
});
|
||||
@@ -124,4 +125,4 @@ app.on('ready', function() {
|
||||
mainWindow.loadUrl(url);
|
||||
mainWindow.show();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -11,4 +11,3 @@ underscore-string-latest
|
||||
collection-helpers
|
||||
iron:router
|
||||
reywood:iron-router-ga
|
||||
|
||||
|
||||
@@ -47,6 +47,48 @@ AppUtil.restartHelper = function (app) {
|
||||
}
|
||||
};
|
||||
|
||||
AppUtil.start = function (appId) {
|
||||
var app = Apps.findOne(appId);
|
||||
if (app && app.docker) {
|
||||
Apps.update(app._id, {$set: {
|
||||
status: 'STARTING'
|
||||
}});
|
||||
Docker.startContainer(app.docker.Id, function (err) {
|
||||
if (err) { console.error(err); }
|
||||
Docker.getContainerData(app.docker.Id, function (err, data) {
|
||||
if (err) { console.error(err); }
|
||||
// Use dig to refresh the DNS
|
||||
exec('/usr/bin/dig ' + app.name + '.kite @172.17.42.1', function(err, stdout, stderr) {
|
||||
console.log(err);
|
||||
console.log(stdout);
|
||||
console.log(stderr);
|
||||
Apps.update(app._id, {$set: {
|
||||
status: 'READY',
|
||||
docker: data
|
||||
}});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
AppUtil.stop = function (appId) {
|
||||
var app = Apps.findOne(appId);
|
||||
if (app && app.docker) {
|
||||
Apps.update(app._id, {$set: {
|
||||
status: 'STOPPING'
|
||||
}});
|
||||
Docker.stopContainer(app.docker.Id, function (err) {
|
||||
if (err) { console.error(err); }
|
||||
Meteor.setTimeout(function () {
|
||||
Apps.update(app._id, {$set: {
|
||||
status: 'STOPPED'
|
||||
}});
|
||||
}, 2500);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
AppUtil.restart = function (appId) {
|
||||
var app = Apps.findOne(appId);
|
||||
if (app && app.docker) {
|
||||
@@ -92,7 +134,6 @@ AppUtil.logs = function (appId) {
|
||||
logs: []
|
||||
}
|
||||
});
|
||||
var logs = [];
|
||||
response.setEncoding('utf8');
|
||||
response.on('data', function (line) {
|
||||
Apps.update(app._id, {
|
||||
@@ -115,7 +156,7 @@ AppUtil.recover = function () {
|
||||
}
|
||||
var container = Docker.client().getContainer(app.docker.Id);
|
||||
container.inspect(function (err, data) {
|
||||
if (app.status !== 'STARTING' && data && data.State && !data.State.Running) {
|
||||
if (app.status !== 'STARTING' && app.status !== 'STOPPING' && app.status !== 'STOPPED' && data && data.State && !data.State.Running) {
|
||||
console.log('Restarting: ' + app.name);
|
||||
console.log(app.docker.Id);
|
||||
AppUtil.restartHelper(app, function (err) {
|
||||
|
||||
@@ -81,6 +81,32 @@ Docker.runContainer = function (app, image, callback) {
|
||||
});
|
||||
};
|
||||
|
||||
Docker.startContainer = function (containerId, callback) {
|
||||
var container = docker.getContainer(containerId);
|
||||
container.start(function (err) {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
console.log('Started container: ' + containerId);
|
||||
callback(null);
|
||||
});
|
||||
};
|
||||
|
||||
Docker.stopContainer = function (containerId, callback) {
|
||||
var container = docker.getContainer(containerId);
|
||||
container.stop(function (err) {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
console.log('Stopped container: ' + containerId);
|
||||
callback(null);
|
||||
});
|
||||
};
|
||||
|
||||
Docker.restartContainer = function (containerId, callback) {
|
||||
var container = docker.getContainer(containerId);
|
||||
container.restart(function (err) {
|
||||
@@ -241,13 +267,13 @@ Docker.reloadDefaultContainers = function (callback) {
|
||||
async.until(function () {
|
||||
return ready;
|
||||
}, function (callback) {
|
||||
docker.listContainers(function (err, containers) {
|
||||
docker.listContainers(function (err) {
|
||||
if (!err) {
|
||||
ready = true;
|
||||
}
|
||||
callback();
|
||||
});
|
||||
}, function (err) {
|
||||
}, function () {
|
||||
console.log('Removing old Kitematic default containers.');
|
||||
Docker.killAndRemoveContainers(Docker.defaultContainerNames, function (err) {
|
||||
console.log('Removed old Kitematic default containers.');
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
Router.configure({
|
||||
layoutTemplate: 'layout',
|
||||
trackPageView: true
|
||||
onBeforeAction: function () {
|
||||
var install = Installs.findOne({});
|
||||
if (install && install.tracking) {
|
||||
var currentPath = Router.current().path;
|
||||
console.log(currentPath);
|
||||
ga('send', 'pageview', currentPath);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
SetupController = RouteController.extend({
|
||||
|
||||
@@ -207,8 +207,11 @@ Util.compareVersions = function (v1, v2, options) {
|
||||
};
|
||||
|
||||
trackLink = function (trackLabel) {
|
||||
if (trackLabel) {
|
||||
console.log(trackLabel);
|
||||
ga('send', 'event', 'link', 'click', trackLabel);
|
||||
var install = Installs.findOne({});
|
||||
if (install && install.tracking) {
|
||||
if (trackLabel) {
|
||||
console.log(trackLabel);
|
||||
ga('send', 'event', 'link', 'click', trackLabel);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -7,10 +7,14 @@
|
||||
{{#if $eq status 'STARTING'}}
|
||||
<span style="color: #D6D6D6;" class="status starting"><i class="fa fa-circle-o-notch fa-spin"></i></span>
|
||||
{{else}}
|
||||
{{#if $eq status 'ERROR'}}
|
||||
<span style="color: #F74B1F;" class="status"><i class="fa fa-circle-o"></i></span>
|
||||
{{#if $eq status 'STOPPING'}}
|
||||
<span style="color: #D6D6D6;" class="status stopping"><i class="fa fa-circle-o-notch fa-spin"></i></span>
|
||||
{{else}}
|
||||
<span style="color: #D6D6D6;" class="status"><i class="fa fa-circle-o"></i></span>
|
||||
{{#if $eq status 'ERROR'}}
|
||||
<span style="color: #F74B1F;" class="status"><i class="fa fa-circle-o"></i></span>
|
||||
{{else}}
|
||||
<span style="color: #D6D6D6;" class="status"><i class="fa fa-circle-o"></i></span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
@@ -25,6 +29,12 @@
|
||||
<a href="#" onclick="trackLink('terminal into app')" class="btn-icon btn-terminal" data-toggle="tooltip" data-placement="bottom" title="Terminal"><span class="typcn typcn-device-laptop"></span></a>
|
||||
{{/if}}
|
||||
<a href="#" onclick="trackLink('open app folder')" class="btn-icon btn-folder" target="_blank" data-toggle="tooltip" data-placement="bottom" title="Folder"><span class="typcn typcn-folder-open"></span></a>
|
||||
{{#if $eq status 'READY'}}
|
||||
<a href="#" onclick="trackLink('stop app')" class="btn-icon btn-stop" target="_blank" data-toggle="tooltip" data-placement="bottom" title="Stop App"><span class="typcn typcn-media-pause-outline"></span></a>
|
||||
{{/if}}
|
||||
{{#if $eq status 'STOPPED'}}
|
||||
<a href="#" onclick="trackLink('start app')" class="btn-icon btn-start" target="_blank" data-toggle="tooltip" data-placement="bottom" title="Start App"><span class="typcn typcn-media-play-outline"></span></a>
|
||||
{{/if}}
|
||||
<a href="#" onclick="trackLink('restart app')" class="btn-icon btn-restart" target="_blank" data-toggle="tooltip" data-placement="bottom" title="Restart"><span class="typcn typcn-refresh-outline"></span></a>
|
||||
<a href="/apps/{{name}}/logs" onclick="trackLink('app logs')" class="btn-icon btn-logs" data-toggle="tooltip" data-placement="bottom" title="Logs"><span class="typcn typcn-document-text"></span></a>
|
||||
<a href="/apps/{{name}}/settings" onclick="trackLink('app settings')" class="btn-icon" data-toggle="tooltip" data-placement="bottom" title="Settings"><span class="typcn typcn-cog-outline"></span></a>
|
||||
|
||||
@@ -24,6 +24,14 @@ Template.dashboard_single_app.events({
|
||||
var cmd = Boot2Docker.command() + ' ssh -t "sudo docker-enter ' + app.docker.Id + '"';
|
||||
Util.openTerminal(cmd);
|
||||
},
|
||||
'click .btn-start': function () {
|
||||
AppUtil.start(this._id);
|
||||
$('.btn-icon').tooltip('hide');
|
||||
},
|
||||
'click .btn-stop': function () {
|
||||
AppUtil.stop(this._id);
|
||||
$('.btn-icon').tooltip('hide');
|
||||
},
|
||||
'click .btn-restart': function () {
|
||||
AppUtil.restart(this._id);
|
||||
},
|
||||
|
||||
@@ -19,6 +19,12 @@
|
||||
<a onclick="trackLink('go to app image')" href="/images/{{image._id}}" class="btn-image" data-toggle="tooltip" data-placement="bottom" title="Image" data-container="body"><span class="typcn typcn-camera-outline"></span></a>
|
||||
{{/if}}
|
||||
<a onclick="trackLink('open app folder')" href="#" class="btn-folder" target="_blank" data-toggle="tooltip" data-placement="bottom" title="Folder" data-container="body"><span class="typcn typcn-folder-open"></span></a>
|
||||
{{#if $eq status 'READY'}}
|
||||
<a href="#" onclick="trackLink('stop app')" class="btn-icon btn-stop" target="_blank" data-toggle="tooltip" data-placement="bottom" title="Stop App"><span class="typcn typcn-media-pause-outline"></span></a>
|
||||
{{/if}}
|
||||
{{#if $eq status 'STOPPED'}}
|
||||
<a href="#" onclick="trackLink('start app')" class="btn-icon btn-start" target="_blank" data-toggle="tooltip" data-placement="bottom" title="Start App"><span class="typcn typcn-media-play-outline"></span></a>
|
||||
{{/if}}
|
||||
<a onclick="trackLink('restart app')" href="#" class="btn-restart" target="_blank" data-toggle="tooltip" data-placement="bottom" title="Restart" data-container="body"><span class="typcn typcn-refresh-outline"></span></a>
|
||||
</span>
|
||||
</h3>
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
var path = require('path');
|
||||
|
||||
Template.dashboard_apps_layout.rendered = function () {
|
||||
Meteor.setInterval(function () {
|
||||
$('.header .icons a').tooltip();
|
||||
@@ -35,5 +37,13 @@ Template.dashboard_apps_layout.events({
|
||||
exec('open ' + this.path, function (err) {
|
||||
if (err) { throw err; }
|
||||
});
|
||||
},
|
||||
'click .btn-start': function () {
|
||||
AppUtil.start(this._id);
|
||||
$('.btn-icon').tooltip('hide');
|
||||
},
|
||||
'click .btn-stop': function () {
|
||||
AppUtil.stop(this._id);
|
||||
$('.btn-icon').tooltip('hide');
|
||||
}
|
||||
});
|
||||
|
||||
@@ -39,4 +39,17 @@
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="section dashboard-settings">
|
||||
<div class="left-section">
|
||||
<h4>Usage Analytics</h4>
|
||||
<p class="help-block">Send usage analytics to help us improve the developer experience. No sensitive data will be tracked. We really appreciate the help.</p>
|
||||
</div>
|
||||
<div class="right-section">
|
||||
{{#if install.tracking}}
|
||||
<a onclick="trackLink('turn off usage analytics')" class="btn btn-negative btn-usage-analytics-off">Turn Off Usage Analytics</a>
|
||||
{{else}}
|
||||
<a onclick="trackLink('turn on usage analytics')" class="btn btn-positive btn-usage-analytics-on">Turn On Usage Analytics</a>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -20,6 +20,28 @@ Template.dashboard_settings.events({
|
||||
console.log(err);
|
||||
}
|
||||
});
|
||||
},
|
||||
'click .btn-usage-analytics-on': function () {
|
||||
var install = Installs.findOne({});
|
||||
Installs.update(install._id, {
|
||||
$set: {
|
||||
tracking: true
|
||||
}
|
||||
});
|
||||
},
|
||||
'click .btn-usage-analytics-off': function () {
|
||||
var install = Installs.findOne({});
|
||||
Installs.update(install._id, {
|
||||
$set: {
|
||||
tracking: false
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
Template.dashboard_settings.helpers({
|
||||
install: function () {
|
||||
return Installs.findOne({});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"public": {
|
||||
"ga": {
|
||||
"id": "UA-53012639-2",
|
||||
"id": "UA-54515442-1",
|
||||
"create": {
|
||||
"cookieDomain": "none"
|
||||
}
|
||||
|
||||
10
resources/settings.json
Normal file
10
resources/settings.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"public": {
|
||||
"ga": {
|
||||
"id": "UA-54184042-1",
|
||||
"create": {
|
||||
"cookieDomain": "none"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user