Files
servicedock/nodejs/sockets/index.js

111 lines
3.1 KiB
JavaScript
Raw Normal View History

2016-01-14 15:34:50 +00:00
module.exports = function() {
var module={};
module.connection = function(socket) {
2016-01-17 23:07:46 +00:00
//var sys = require('sys');
var proc = require('child_process');
2016-01-14 15:34:50 +00:00
console.log("new client");
function emit(signal, data, info) {
2016-01-17 23:07:46 +00:00
if (typeof data == 'string' && !data.match("\n")) {
2016-01-14 15:34:50 +00:00
console.log("<- signal: "+signal+"("+data+")");
} else {
console.log("<- signal: "+signal);
}
if (info) console.log(info);
socket.emit(signal, data);
}
function broadcast(signal, data) {
console.log("<= signal: "+signal);
socket.broadcast.emit(signal, data);
}
2016-01-17 23:07:46 +00:00
function exec(cmd, callback) {
console.log("== "+cmd);
proc.exec(cmd, callback);
}
function fail(txt, data) {
console.log("** "+txt, data);
emit("fail", txt);
}
2016-01-14 15:34:50 +00:00
function containerinspect(error, stdout, stderr) {
2016-01-17 23:07:46 +00:00
if (error || stderr)
return fail("inspect docker containers failed", {
error: error, stderr: stderr, stdout: stdout
});
emit("containers", stdout);
2016-01-14 15:34:50 +00:00
}
function containerlist(error, stdout, stderr) {
2016-01-17 23:07:46 +00:00
if (error || stderr)
return fail("list docker containers failed", {
error: error, stderr: stderr, stdout: stdout
});
exec("docker inspect "+stdout.trim().replace(/\n/g, " "), containerinspect);
2016-01-14 15:34:50 +00:00
}
2016-01-17 23:07:46 +00:00
function updatecontainers(error, stdout, stderr) {
if (error || stderr)
return fail("update docker container failed", {
error: error, stderr: stderr, stdout: stdout
});
exec("docker ps -aq", containerlist);
}
function modify(cmd, name) {
if (!name.match(/^[a-z0-9][-_:.+a-z0-9]*$/i))
return fail("illegal instance name", {
error: error, stderr: stderr, stdout: stdout
});
exec("docker "+cmd+" "+name, updatecontainers);
}
function containers() {
2016-01-14 15:34:50 +00:00
console.log("-> containers");
2016-01-17 23:07:46 +00:00
updatecontainers();
}
2016-01-14 15:34:50 +00:00
2016-01-17 23:07:46 +00:00
function start(name) {
console.log("-> start("+name+")");
modify("start", name);
}
function stop(name) {
console.log("-> stop("+name+")");
modify("stop", name);
}
function pause(name) {
console.log("-> pause("+name+")");
modify("pause", name);
}
function unpause(name) {
console.log("-> unpause("+name+")");
modify("unpause", name);
}
function remove(name) {
console.log("-> remove("+name+")");
modify("rm", name);
}
socket
.on("containers", containers)
.on("start", start)
.on("stop", stop)
.on("pause", pause)
.on("unpause", unpause)
.on("remove", remove);
2016-01-14 15:34:50 +00:00
}
return module;
}