diff --git a/CHANGELOG.md b/CHANGELOG.md
index 15b1a51..da43715 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## [1.8.4] - 28/07/2019
+Edited some docs.
+
+## [1.8.2] - 28/07/2019
+Added logger.
+
## [1.8.1] - 28/07/2019
Cashed reading (in cluster mode) & fixed host issue in results (also in cluster mode).
diff --git a/Dockerfile b/Dockerfile
index 6b51f59..dc9ecb9 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,6 +1,6 @@
FROM node:12
RUN curl -L https://get.docker.com | sh -
-RUN npm i -g docker-server@1.8.1
+RUN npm i -g docker-server@1.8.4
CMD ["docker-server"]
\ No newline at end of file
diff --git a/README.md b/README.md
index 3dec613..cabeedf 100644
--- a/README.md
+++ b/README.md
@@ -230,15 +230,30 @@ Also, you can start DockerServerwith these parameters:
false |
- --folder |
+ --folder [path] |
Shared folder between all docker-servers. (Used only in cluster mode) |
/tmp/docker-server |
- --cache_interval |
+ --cache_interval [num] |
Milliseconds between reads (of all the machines) |
3000 |
+
+ --log_lovel [option] |
+ Log level [trace|debug|info|warn|error|fatal] |
+ info |
+
+
+ --log_expiry [num] |
+ Time for a log to live in days. |
+ 14 |
+
+
+ --log_max_size [num] |
+ Max log size in MB |
+ 25 |
+
--help |
Show he |
@@ -361,6 +376,10 @@ And/or
## Changelog
+1.8.4 - Edited some docs.
+
+1.8.2 - Added logger.
+
1.8.1 - Cashed reading (in cluster mode) & fixed host issue in results (also in cluster mode).
1.8.0 - **Stable Cluster mode!**
diff --git a/index.js b/index.js
index 12f69e1..f0d87c1 100644
--- a/index.js
+++ b/index.js
@@ -12,11 +12,16 @@ var args = yargs
.option('cluster', {describe: 'Flag to turn on the Cluster mode.', type: 'boolean', default: false})
.option('folder', {describe: 'Shared folder between all docker-servers.', type: 'string', default: '/tmp/docker-server'})
.option('cache_interval', {describe: 'Milliseconds between reads (of all the machines).', type: 'number', default: 3000})
+ .option('log_level', {describe: 'Log level [trace|debug|info|warn|error|fatal]', type: 'string', default: 'info'})
+ .option('log_expiry', {describe: 'Time for a log to live in days.', type: 'number', default: 14})
+ .option('log_max_size', {describe: 'Max log size in MB.', type: 'number', default: 25})
.help('help', 'Show help.\nFor more documentation see https://github.com/freaker2k7/dockerserver')
.argv;
-const docker = require('./lib/docker.js');
-const network = require('./lib/network.js')(args);
+var log = require('./lib/logger.js')(args);
+
+const docker = require('./lib/docker.js')(log);
+const network = require('./lib/network.js')(log, args);
var app = express();
@@ -52,7 +57,7 @@ app.delete('/:id', mid_burst, docker.rm);
// Main listener
var server = network.protocol(app, args.https);
server.listen(args.port);
-console.info('Serving on ' + network.get_protocol() + '0.0.0.0:' + args.port);
+log.info('Serving on ' + network.get_protocol() + '0.0.0.0:' + args.port);
module.exports = Object.assign(docker, network, {'_app': app, '_server': server});
\ No newline at end of file
diff --git a/lib/docker.js b/lib/docker.js
index 09efaa0..b41b50d 100644
--- a/lib/docker.js
+++ b/lib/docker.js
@@ -2,6 +2,7 @@ const dockerCLI = require('docker-cli-js');
const uuid = require('uuid/v4');
var docker = new dockerCLI.Docker();
+var log = null;
var handle_error = function(req, res) {
return function(err) {
@@ -10,86 +11,90 @@ var handle_error = function(req, res) {
};
-module.exports = {
- 'ps': function(req, res) {
- return docker.command('ps -a').then(function(data) {
- // console.debug('GET:', data);
- res.json(data.containerList || []);
- }).catch(handle_error(req, res));
- },
- 'logs': function(req, res) {
- return docker.command('logs ' + req.params.id).then(function(data) {
- // console.debug('GET:', req.params.id, '::', data);
- res.json(data);
- }).catch(handle_error(req, res));
- },
- 'run': function(req, res) {
- // console.debug('PUT Request:', req.body);
- if (!req.body || !req.body.image) {
- return res.sendStatus(400);
- }
-
- var ports = '';
- var volumes = '';
- var data = '';
- var detach = '';
- var remove = '';
-
- if (req.body.ports) {
- for (var k in req.body.ports) {
- ports += ' -p ' + k + ':' + req.body.ports[k];
+module.exports = function(main_log) {
+ log = main_log;
+
+ return {
+ 'ps': function(req, res) {
+ return docker.command('ps -a').then(function(data) {
+ log.debug('GET:', data);
+ res.json(data.containerList || []);
+ }).catch(handle_error(req, res));
+ },
+ 'logs': function(req, res) {
+ return docker.command('logs ' + req.params.id).then(function(data) {
+ log.debug('GET:', req.params.id, '::', data);
+ res.json(data);
+ }).catch(handle_error(req, res));
+ },
+ 'run': function(req, res) {
+ log.debug('PUT Request:', req.body);
+ if (!req.body || !req.body.image) {
+ return res.sendStatus(400);
}
- }
- if (req.body.volumes) {
- for (var k in req.body.volumes) {
- volumes += ' -v ' + k.replace(/^\.$/, context) + ':' + req.body.volumes[k];
+
+ var ports = '';
+ var volumes = '';
+ var data = '';
+ var detach = '';
+ var remove = '';
+
+ if (req.body.ports) {
+ for (var k in req.body.ports) {
+ ports += ' -p ' + k + ':' + req.body.ports[k];
+ }
}
+ if (req.body.volumes) {
+ for (var k in req.body.volumes) {
+ volumes += ' -v ' + k.replace(/^\.$/, context) + ':' + req.body.volumes[k];
+ }
+ }
+ if (req.body.detach) {
+ detach = ' --detach';
+ }
+ if (req.body.remove) {
+ remove = ' --rm';
+ }
+ if (req.body.data) {
+ data = ' ' + req.body.data;
+ }
+
+ return docker.command('run --name ' + (req.body.name || uuid()) + ports + volumes + remove + detach + ' ' + req.body.image + data).then(function(data) {
+ log.debug('PUT:', data);
+ res.json(data);
+ }).catch(handle_error(req, res));
+ },
+ 'exec': function(req, res) {
+ log.debug('POST Request:', req.body);
+
+ var data = '';
+ var interactive = '';
+ var tty = '';
+
+ if (req.body.interactive) {
+ interactive = ' -i';
+ }
+ if (req.body.tty) {
+ tty = ' -t';
+ }
+ if (req.body.data) {
+ data = ' ' + req.body.data;
+ }
+
+ return docker.command('exec' + tty + interactive + ' ' + req.params.id + ' ' + data).then(function(data) {
+ log.debug('POST:', req.params.id, '::', data);
+ res.json(data);
+ }).catch(handle_error(req, res));
+ },
+ 'rm': function(req, res) {
+ if (!req.params.id) {
+ return res.sendStatus(400);
+ }
+
+ return docker.command('rm -f ' + req.params.id).then(function(data) {
+ log.debug('DELETE (RM):', req.params.id, '::', data);
+ res.json(data);
+ }).catch(handle_error(req, res));
}
- if (req.body.detach) {
- detach = ' --detach';
- }
- if (req.body.remove) {
- remove = ' --rm';
- }
- if (req.body.data) {
- data = ' ' + req.body.data;
- }
-
- return docker.command('run --name ' + (req.body.name || uuid()) + ports + volumes + remove + detach + ' ' + req.body.image + data).then(function(data) {
- // console.debug('PUT:', data);
- res.json(data);
- }).catch(handle_error(req, res));
- },
- 'exec': function(req, res) {
- console.debug('POST Request:', req.body);
-
- var data = '';
- var interactive = '';
- var tty = '';
-
- if (req.body.interactive) {
- interactive = ' -i';
- }
- if (req.body.tty) {
- tty = ' -t';
- }
- if (req.body.data) {
- data = ' ' + req.body.data;
- }
-
- return docker.command('exec' + tty + interactive + ' ' + req.params.id + ' ' + data).then(function(data) {
- console.debug('POST:', req.params.id, '::', data);
- res.json(data);
- }).catch(handle_error(req, res));
- },
- 'rm': function(req, res) {
- if (!req.params.id) {
- return res.sendStatus(400);
- }
-
- return docker.command('rm -f ' + req.params.id).then(function(data) {
- // console.debug('DELETE (RM):', req.params.id, '::', data);
- res.json(data);
- }).catch(handle_error(req, res));
- }
+ };
};
\ No newline at end of file
diff --git a/lib/logger.js b/lib/logger.js
new file mode 100644
index 0000000..c39230e
--- /dev/null
+++ b/lib/logger.js
@@ -0,0 +1,28 @@
+const winston = require('winston');
+require('winston-daily-rotate-file');
+
+module.exports = function(args) {
+ args.log_level = args.log_level.toLowerCase().replace(/trace/, 'silly');
+
+ var transport = null;
+
+ if (~['debug', 'silly'].indexOf(args.log_level)) {
+ transport = new winston.transports.Console({
+ level: args.log_level
+ });
+ } else {
+ transport = new (winston.transports.DailyRotateFile)({
+ filename: '/tmp/docker-server-%DATE%.log',
+ datePattern: 'YYYY-MM-DD-HH',
+ zippedArchive: true,
+ maxSize: args.log_max_size + 'm',
+ maxFiles: args.log_expiry + 'd',
+ level: args.log_level
+ });
+ }
+
+ return winston.createLogger({
+ name: 'ds-logger',
+ transports: [transport]
+ });
+}
\ No newline at end of file
diff --git a/lib/machine.js b/lib/machine.js
index 8cf33f4..2d481de 100644
--- a/lib/machine.js
+++ b/lib/machine.js
@@ -3,6 +3,7 @@ const ping = require('ping');
const si = require('systeminformation');
var args = null;
+var log = null;
var last_read = null;
var cached_machines = [];
@@ -32,7 +33,7 @@ var get_all = function(IP) {
return fs.readdir(args.folder, function(err, files) {
if (err) {
- console.error(err);
+ log.error(err);
return resolve({});
}
@@ -71,7 +72,7 @@ var get_valid_host = function(ips, IP) {
try {
fs.unlinkSync(args.folder + ip.host);
} catch(e) {
- console.error('Probably someone else just removed it:', e);
+ log.error('Probably someone else just removed it:', e);
}
return get_valid_host(ips, IP).then(resolve);
@@ -80,7 +81,8 @@ var get_valid_host = function(ips, IP) {
};
-module.exports = function(cli_args) {
+module.exports = function(main_log, cli_args) {
+ log = main_log;
args = cli_args;
// Add a trailing slash to the folder path.
diff --git a/lib/network.js b/lib/network.js
index eaf2e3f..8fa75c6 100644
--- a/lib/network.js
+++ b/lib/network.js
@@ -1,5 +1,6 @@
var IP = null;
var args = null;
+var log = null;
var machine = null;
var request = null;
@@ -15,9 +16,9 @@ var get_req = function(req, host) {
body: req.body && JSON.stringify(req.body) || undefined,
method: req.method
}, function (err, res, body) {
- // console.debug('request:', host, err, typeof body, body);
+ log.debug('request:', host, err, typeof body, body);
if (err) {
- console.error('err:', host, err);
+ log.error('err:', host, err);
return resolve({'body': [err], 'host': host});
}
@@ -27,7 +28,7 @@ var get_req = function(req, host) {
if (body.startsWith('error')) {
body = {'error': body};
} else {
- console.error('Error in get_req on', host, ':', e, typeof body, body);
+ log.error('Error in get_req on', host, ':', e, typeof body, body);
}
return resolve({'body': [body], 'host': host});
@@ -85,7 +86,8 @@ var handle_cluster = function(req, res, next) {
};
-module.exports = function(cli_args) {
+module.exports = function(main_log, cli_args) {
+ log = main_log;
args = cli_args;
return {
@@ -111,7 +113,7 @@ module.exports = function(cli_args) {
ca: fs.existsSync('/certs/chain.pem') && fs.readFileSync('/certs/chain.pem', 'utf8') || undefined
}, app);
} catch (e) {
- console.error('Could not start secure server:', e);
+ log.error('Could not start secure server:', e);
return require('http').createServer(app);
}
}
@@ -122,7 +124,7 @@ module.exports = function(cli_args) {
'balance': function(port) {
if (args.cluster) {
IP = get_protocol() + require('ip').address() + ':' + port;
- machine = require('./machine.js')(args);
+ machine = require('./machine.js')(log, args);
request = require('request');
machine.cpu(IP);
diff --git a/package-lock.json b/package-lock.json
index 7ea2d86..3d75080 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "docker-server",
- "version": "1.8.1",
+ "version": "1.8.4",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -82,6 +82,21 @@
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "requires": {
+ "lodash": "^4.17.14"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+ }
+ }
+ },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -163,6 +178,15 @@
"wrap-ansi": "^5.1.0"
}
},
+ "color": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz",
+ "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==",
+ "requires": {
+ "color-convert": "^1.9.1",
+ "color-string": "^1.5.2"
+ }
+ },
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -176,6 +200,34 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
+ "color-string": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
+ "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "colornames": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz",
+ "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y="
+ },
+ "colors": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
+ "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg=="
+ },
+ "colorspace": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz",
+ "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==",
+ "requires": {
+ "color": "3.0.x",
+ "text-hex": "1.0.x"
+ }
+ },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -212,6 +264,11 @@
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI="
+ },
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -248,6 +305,16 @@
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
+ "diagnostics": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz",
+ "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==",
+ "requires": {
+ "colorspace": "1.1.x",
+ "enabled": "1.0.x",
+ "kuler": "1.0.x"
+ }
+ },
"docker-cli-js": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/docker-cli-js/-/docker-cli-js-2.5.2.tgz",
@@ -293,11 +360,24 @@
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
},
+ "enabled": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz",
+ "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=",
+ "requires": {
+ "env-variable": "0.0.x"
+ }
+ },
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
+ "env-variable": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz",
+ "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA=="
+ },
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -370,6 +450,24 @@
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
},
+ "fast-safe-stringify": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz",
+ "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg=="
+ },
+ "fecha": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz",
+ "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg=="
+ },
+ "file-stream-rotator": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.4.1.tgz",
+ "integrity": "sha512-W3aa3QJEc8BS2MmdVpQiYLKHj3ijpto1gMDlsgCRSKfIUe6MwkcpODGPQ3vZfb0XvCeCqlu9CBQTN7oQri2TZQ==",
+ "requires": {
+ "moment": "^2.11.2"
+ }
+ },
"finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
@@ -489,16 +587,31 @@
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
"integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
},
+ "is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ },
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
},
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -535,6 +648,14 @@
"verror": "1.10.0"
}
},
+ "kuler": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz",
+ "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==",
+ "requires": {
+ "colornames": "^1.1.1"
+ }
+ },
"locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
@@ -544,6 +665,25 @@
"path-exists": "^3.0.0"
}
},
+ "logform": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz",
+ "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==",
+ "requires": {
+ "colors": "^1.2.1",
+ "fast-safe-stringify": "^2.0.4",
+ "fecha": "^2.3.3",
+ "ms": "^2.1.1",
+ "triple-beam": "^1.3.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -577,6 +717,11 @@
"mime-db": "1.40.0"
}
},
+ "moment": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
+ "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+ },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -597,6 +742,11 @@
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
+ "object-hash": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
+ "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA=="
+ },
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -605,6 +755,11 @@
"ee-first": "1.1.1"
}
},
+ "one-time": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz",
+ "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4="
+ },
"p-limit": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
@@ -655,6 +810,11 @@
"underscore": "^1.8.3"
}
},
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
"proxy-addr": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
@@ -700,6 +860,16 @@
"unpipe": "1.0.0"
}
},
+ "readable-stream": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+ "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
"request": {
"version": "2.88.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
@@ -754,6 +924,11 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ },
"send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
@@ -802,6 +977,14 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "requires": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
"sshpk": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
@@ -818,6 +1001,11 @@
"tweetnacl": "~0.14.0"
}
},
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
+ },
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
@@ -833,6 +1021,14 @@
"strip-ansi": "^5.1.0"
}
},
+ "string_decoder": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
+ "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -846,6 +1042,11 @@
"resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-4.14.4.tgz",
"integrity": "sha512-ib2dodksiiaGOW4rcKvFr5naHkODI9GwQPugLb6FLKppkIsE7rj2dfY2UdMBr7oX0/iZP981hoxmbk2e6zl99Q=="
},
+ "text-hex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
+ "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
+ },
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
@@ -867,6 +1068,11 @@
}
}
},
+ "triple-beam": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
+ "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
+ },
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@@ -907,6 +1113,11 @@
"punycode": "^2.1.0"
}
},
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
@@ -937,6 +1148,97 @@
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
},
+ "winston": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz",
+ "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==",
+ "requires": {
+ "async": "^2.6.1",
+ "diagnostics": "^1.1.1",
+ "is-stream": "^1.1.0",
+ "logform": "^2.1.1",
+ "one-time": "0.0.4",
+ "readable-stream": "^3.1.1",
+ "stack-trace": "0.0.x",
+ "triple-beam": "^1.3.0",
+ "winston-transport": "^4.3.0"
+ }
+ },
+ "winston-compat": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/winston-compat/-/winston-compat-0.1.4.tgz",
+ "integrity": "sha512-mMEfFsSm6GmkFF+f4/0UJtG4N1vSaczGmXLVJYmS/+u2zUaIPcw2ZRuwUg2TvVBjswgiraN+vNnAG8z4fRUZ4w==",
+ "requires": {
+ "cycle": "~1.0.3",
+ "logform": "^1.6.0",
+ "triple-beam": "^1.2.0"
+ },
+ "dependencies": {
+ "logform": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz",
+ "integrity": "sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==",
+ "requires": {
+ "colors": "^1.2.1",
+ "fast-safe-stringify": "^2.0.4",
+ "fecha": "^2.3.3",
+ "ms": "^2.1.1",
+ "triple-beam": "^1.2.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "winston-daily-rotate-file": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-3.10.0.tgz",
+ "integrity": "sha512-KO8CfbI2CvdR3PaFApEH02GPXiwJ+vbkF1mCkTlvRIoXFI8EFlf1ACcuaahXTEiDEKCii6cNe95gsL4ZkbnphA==",
+ "requires": {
+ "file-stream-rotator": "^0.4.1",
+ "object-hash": "^1.3.0",
+ "semver": "^6.2.0",
+ "triple-beam": "^1.3.0",
+ "winston-compat": "^0.1.4",
+ "winston-transport": "^4.2.0"
+ }
+ },
+ "winston-transport": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz",
+ "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==",
+ "requires": {
+ "readable-stream": "^2.3.6",
+ "triple-beam": "^1.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
"wrap-ansi": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
diff --git a/package.json b/package.json
index 033da77..d79bdc1 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "docker-server",
"author": "Evgeny Kolyakov ",
"description": "DockerServer - Super lightweight & simple RESTFul stateless server for running docker containers on a remote machine(s) in a secure way",
- "version": "1.8.1",
+ "version": "1.8.4",
"homepage": "https://dockerserver.io",
"repository": "freaker2k7/dockerserver",
"license": "Apache-2.0",
@@ -23,7 +23,7 @@
"scripts": {
"start": "node ./index.js",
"test": "node ./test/basic.js",
- "prepublish": "node ./scripts/dockerfile-version-verify.js"
+ "prepublishOnly": "node ./scripts/dockerfile-version-verify.js"
},
"dependencies": {
"docker-cli-js": "2.5.2",
@@ -34,6 +34,8 @@
"request": "^2.88.0",
"systeminformation": "^4.14.4",
"uuid": "^3.3.2",
+ "winston": "^3.2.1",
+ "winston-daily-rotate-file": "^3.10.0",
"yargs": "^13.3.0"
},
"engines": {
@@ -47,4 +49,4 @@
"pm2.config.js",
"lib/"
]
-}
\ No newline at end of file
+}