Skip to content

Commit

Permalink
Cashed reading (in cluster mode) & fixed host issue in results (also …
Browse files Browse the repository at this point in the history
…in cluster mode).
  • Loading branch information
freaker2k7 committed Jul 28, 2019
1 parent 6431201 commit 9f45ddf
Show file tree
Hide file tree
Showing 9 changed files with 57 additions and 35 deletions.
45 changes: 24 additions & 21 deletions CHANGELOG.md
@@ -1,66 +1,69 @@
# Changelog

## [1.8.0] - 28/7/2019
## [1.8.1] - 28/07/2019
Cashed reading (in cluster mode) & fixed host issue in results (also in cluster mode).

## [1.8.0] - 28/07/2019
**Stable Cluster mode!**

## [1.7.9] - 28/7/2019
## [1.7.9] - 28/07/2019
Added Liberapay badge.

## [1.7.8] - 27/7/2019
## [1.7.8] - 27/07/2019
Fixed test

## [1.7.7] - 27/7/2019
## [1.7.7] - 27/07/2019
Renamed npm-shrinkwrap.json to package-lock.json and added it to git.

## [1.7.5] - 27/7/2019
## [1.7.5] - 27/07/2019
Added npm-shrinkwrap.json to remove lodash's (4.17.11 => 4.17.15) vulnerability from docker-cli-js.

## [1.7.2] - 27/7/2019
## [1.7.2] - 27/07/2019
Updated docker-cli-js's lodash.

## [1.7.1] - 27/7/2019
## [1.7.1] - 27/07/2019
New bin file ./bin.js

## [1.5.9] - 27/7/2019
## [1.5.9] - 27/07/2019
Cluster mode using json files in a **shared folder** instead of Redis.

## [1.5.8] - 26/7/2019
## [1.5.8] - 26/07/2019
**Cluster mode** support (Only some issues with POST to /:id) with **[Redis]("https://redis.io" "Redis")**.

## [1.5.7] - 26/7/2019
## [1.5.7] - 26/07/2019
Badges :)

## [1.5.5] - 26/7/2019
## [1.5.5] - 26/07/2019
Back to express-rate-limit && set min version to NodeJS 6.0.

## [1.5.4] - 25/7/2019
## [1.5.4] - 25/07/2019
Returning to express-throttle for compatibitily (testing).

## [1.5.2] - 25/7/2019
## [1.5.2] - 25/07/2019
Fixed typo in filename.

## [1.5.1] - 25/7/2019
## [1.5.1] - 25/07/2019
Added test for [AppVeyor](https://appveyor.com/ "AppVeyor").

## [1.5.0] - **Stable HTTPS support.**

## [1.4.4]-1.25/7/2019
## [1.4.4]-1.25/07/2019
4.9 - Fixed some typos.

## [1.4.2] - 24/7/2019
## [1.4.2] - 24/07/2019
Added HTTPS support & parametrized all env. variables.

## [1.4.1] - 24/7/2019
## [1.4.1] - 24/07/2019
Removed unused DS_CONTEXT env. variable & received JS code quality A+ score on [LGTM](https://lgtm.com "LGTM").

## [1.2.9] - 23/7/2019
## [1.2.9] - 23/07/2019
Fixed some typos.

## [1.2.7] - 22/7/2019
## [1.2.7] - 22/07/2019
Replaced express-throttle with express-rate-limit.

## [1.2.5] - 22/7/2019
## [1.2.5] - 22/07/2019
Stable, simple express server with express-throttle.

## [1.0] - 20/7/2019
## [1.0] - 20/07/2019
**Release, woohoo!!**
2 changes: 1 addition & 1 deletion Dockerfile
@@ -1,6 +1,6 @@
FROM node:12

RUN curl -L https://get.docker.com | sh -
RUN npm i -g docker-server@1.8.0
RUN npm i -g docker-server@1.8.1

CMD ["docker-server"]
9 changes: 7 additions & 2 deletions README.md
Expand Up @@ -234,6 +234,11 @@ Also, you can start DockerServerwith these parameters:
<td>Shared folder between all docker-servers. (Used only in cluster mode)</td>
<td>/tmp/docker-server</td>
</tr>
<tr>
<td><code>--cache_interval</code></td>
<td>Milliseconds between reads (of all the machines)</td>
<td>3000</td>
</tr>
<tr>
<td><code>--help</code></td>
<td>Show he</td>
Expand Down Expand Up @@ -356,9 +361,9 @@ And/or

## Changelog

1.8.0 - **Stable Cluster** mode!
1.8.1 - Cashed reading (in cluster mode) & fixed host issue in results (also in cluster mode).

1.7.9 - Added Liberapay badge.
1.8.0 - **Stable Cluster mode!**

[See full changelog](https://github.com/freaker2k7/dockerserver/blob/master/CHANGELOG.md)

Expand Down
3 changes: 2 additions & 1 deletion index.js
Expand Up @@ -11,6 +11,7 @@ var args = yargs
.option('https', {describe: 'Flag to turn on the HTTPS mode.', type: 'boolean', default: false})
.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})
.help('help', 'Show help.\nFor more documentation see https://github.com/freaker2k7/dockerserver')
.argv;

Expand Down Expand Up @@ -51,7 +52,7 @@ app.delete('/:id', mid_burst, docker.rm);
// Main listener
var server = network.protocol(app, args.https);
server.listen(args.port);
console.log('Serving on ' + network.get_protocol() + '0.0.0.0:' + args.port);
console.info('Serving on ' + network.get_protocol() + '0.0.0.0:' + args.port);


module.exports = Object.assign(docker, network, {'_app': app, '_server': server});
12 changes: 9 additions & 3 deletions lib/machine.js
Expand Up @@ -3,6 +3,8 @@ const ping = require('ping');
const si = require('systeminformation');

var args = null;
var last_read = null;
var cached_machines = [];

var localize = function(host) {
return host.replace(/\d+\.\d+\.\d+\.\d+/, '0.0.0.0');
Expand All @@ -24,6 +26,10 @@ var readfile = function(file, hostname) {

var get_all = function(IP) {
return new Promise(function(resolve) {
if (last_read && Date.now() < last_read + args.cache_interval) {
return resolve(cached_machines);
}

return fs.readdir(args.folder, function(err, files) {
if (err) {
console.error(err);
Expand All @@ -42,6 +48,8 @@ var get_all = function(IP) {
ret = Object.assign(ret, objects[i]);
}

last_read = Date.now();
cached_machines = ret;
return resolve(ret);
});
});
Expand All @@ -63,7 +71,7 @@ var get_valid_host = function(ips, IP) {
try {
fs.unlinkSync(args.folder + ip.host);
} catch(e) {
console.log('Probably someone else just removed it:', e);
console.error('Probably someone else just removed it:', e);
}

return get_valid_host(ips, IP).then(resolve);
Expand All @@ -78,8 +86,6 @@ module.exports = function(cli_args) {
// Add a trailing slash to the folder path.
args.folder = args.folder.replace(/\/+$/g, '') + '/';

console.log(args.folder, fs.existsSync(args.folder));

if (!fs.existsSync(args.folder)){
fs.mkdirSync(args.folder, {recursive: true});
}
Expand Down
11 changes: 7 additions & 4 deletions lib/network.js
Expand Up @@ -15,7 +15,7 @@ var get_req = function(req, host) {
body: req.body && JSON.stringify(req.body) || undefined,
method: req.method
}, function (err, res, body) {
// console.log('request:', host, err, typeof body, body);
// console.debug('request:', host, err, typeof body, body);
if (err) {
console.error('err:', host, err);
return resolve({'body': [err], 'host': host});
Expand Down Expand Up @@ -64,13 +64,16 @@ var handle_cluster = function(req, res, next) {
var response = [];
for (var i = 0; i < responses.length; ++i) {
// Add the host to each result for more clearance for the client.
for (var j in responses[i].body) {
if (responses[i].body.hasOwnProperty(j)) {
responses[i].body[j].host = responses[i].host;
if (responses[i].body.length) {
for (var j in responses[i].body) {
responses[i].body.host = responses[i].host;
}
} else {
responses[i].body.host = responses[i].host;
}
response = response.concat(responses[i].body);
}

res.send(response);
});
});
Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Expand Up @@ -2,7 +2,7 @@
"name": "docker-server",
"author": "Evgeny Kolyakov <thenetfreaker@gmail.com>",
"description": "DockerServer - Super lightweight & simple RESTFul stateless server for running docker containers on a remote machine(s) in a secure way",
"version": "1.8.0",
"version": "1.8.1",
"homepage": "https://dockerserver.io",
"repository": "freaker2k7/dockerserver",
"license": "Apache-2.0",
Expand Down Expand Up @@ -47,4 +47,4 @@
"pm2.config.js",
"lib/"
]
}
}
4 changes: 4 additions & 0 deletions scripts/dockerfile-version-verify.js
Expand Up @@ -3,11 +3,15 @@ const fs = require('fs');

if (fs.existsSync('Dockerfile')) {
var package = fs.readFileSync('package.json');
var package_lock = fs.readFileSync('package-lock.json');
var data = fs.readFileSync('Dockerfile');


package = JSON.parse(package);
package_lock = JSON.parse(package_lock);
data = data.toString().replace(/@\d+\.\d+\.\d+/, '@' + package.version);
package_lock.version = package.version;

fs.writeFileSync('Dockerfile', data);
fs.writeFileSync('package-lock.json', JSON.stringify(package_lock, null, "\t") + "\n");
}

0 comments on commit 9f45ddf

Please sign in to comment.