phantom-workers
Advanced tools
| var net = require('net'); | ||
| var DEFAULT_MIN = 1025; | ||
| var DEFAULT_MAX = 65535; | ||
| var DEFAULT_MAX_ATTEMPTS = 50; | ||
| function getRandomPort (opts, cb) { | ||
| var min = DEFAULT_MIN; | ||
| var max = DEFAULT_MAX; | ||
| var maxAttempts = DEFAULT_MAX_ATTEMPTS; | ||
| var options = opts || {}; | ||
| var host; | ||
| var port; | ||
| var server; | ||
| if (options.min != null) { | ||
| min = options.min; | ||
| } | ||
| if (options.max != null) { | ||
| max = options.max; | ||
| } | ||
| if (options.maxAttempts != null) { | ||
| maxAttempts = options.maxAttempts; | ||
| } | ||
| if (options.host != null) { | ||
| host = options.host; | ||
| } | ||
| port = getRandomNumber(min, max); | ||
| server = net.createServer(); | ||
| server.listen(port, host, function () { | ||
| server.once('close', function () { cb(null, port) }); | ||
| server.close(); | ||
| }); | ||
| server.on('error', function () { | ||
| if (--maxAttempts) { | ||
| return getRandomPort({ | ||
| min: min, | ||
| max: max, | ||
| maxAttempts: maxAttempts | ||
| }, cb); | ||
| } | ||
| cb(new Error('Could not find an available port')); | ||
| }); | ||
| } | ||
| function getRandomNumber (minimum, maximum) { | ||
| if (maximum === undefined) { | ||
| maximum = minimum; | ||
| minimum = 0; | ||
| } | ||
| if (typeof minimum !== 'number' || typeof maximum !== 'number') { | ||
| throw new TypeError('Expected all arguments to be numbers'); | ||
| } | ||
| return Math.floor( | ||
| (Math.random() * (maximum - minimum + 1)) + minimum | ||
| ); | ||
| } | ||
| module.exports = getRandomPort; |
@@ -8,7 +8,6 @@ /*! | ||
| var events = require("events"), | ||
| util = require("util"), | ||
| _ = require("underscore"), | ||
| var events = require('events'), | ||
| util = require('util'), | ||
| find = require('lodash.find'), | ||
| numCPUs = require('os').cpus().length, | ||
| cluster = require("cluster"), | ||
| PhantomWorker = require("./phantomWorker.js"); | ||
@@ -90,3 +89,3 @@ | ||
| var freePhantomInstance = _.findWhere(this._phantomInstances, { | ||
| var freePhantomInstance = find(this._phantomInstances, { | ||
| isBusy: false | ||
@@ -151,3 +150,3 @@ }); | ||
| var freePhantomInstance = _.findWhere(this._phantomInstances, { | ||
| var freePhantomInstance = find(this._phantomInstances, { | ||
| isBusy: false | ||
@@ -154,0 +153,0 @@ }); |
+16
-29
| var childProcess = require('child_process'), | ||
| cluster = require("cluster"), | ||
| cluster = require('cluster'), | ||
| http = require('http'), | ||
| netCluster = require("net-cluster"), | ||
| checkPortStatus = require("./checkPortStatus.js"), | ||
| portScanner = require('portscanner'), | ||
| checkPortStatus = require('./checkPortStatus'), | ||
| getRandomPort = require('./getRandomPort'), | ||
| objectAssign = require('object-assign'); | ||
| var findFreePort = function (host, cb) { | ||
| var server = netCluster.createServer(); | ||
| var port = 0; | ||
| server.on('listening', function () { | ||
| port = server.address().port; | ||
| server.close(); | ||
| }); | ||
| server.on('close', function () { | ||
| cb(null, port); | ||
| }); | ||
| server.listen(0, host); | ||
| getRandomPort({ | ||
| host: host | ||
| }, cb); | ||
| }; | ||
| var findFreePortInRange = function (host, portLeftBoundary, portRightBoundary, cb) { | ||
| //in cluster we don't want ports to collide, so we make a special space for every worker assuming max number of cluster workers is 5 | ||
| if (cluster.worker) { | ||
| portLeftBoundary = portLeftBoundary + (((portRightBoundary - portLeftBoundary) / 5) * (cluster.worker.id - 1)); | ||
| } | ||
| portScanner.findAPortNotInUse(portLeftBoundary, portRightBoundary, host, function(error, port) { | ||
| cb(error, port); | ||
| }) | ||
| getRandomPort({ | ||
| min: portLeftBoundary, | ||
| max: portRightBoundary, | ||
| host: host | ||
| }, cb); | ||
| }; | ||
@@ -178,3 +165,3 @@ | ||
| res.on("end", function () { | ||
| self.isBusy = false; | ||
| self.isBusy = false; | ||
| try { | ||
@@ -185,3 +172,3 @@ var parsedResult = result ? JSON.parse(result) : null | ||
| cb(new Error('Unparsable response from the phantomjs ' + result)) | ||
| } | ||
| } | ||
| }); | ||
@@ -195,3 +182,3 @@ }); | ||
| req.on("error", function (e) { | ||
| req.on("error", function (e) { | ||
| // recycle phantomjs if it cannot accept connections to avoid getting it freezed in the invalid state | ||
@@ -203,6 +190,6 @@ if (e.code === 'ECONNREFUSED' || e.code === 'ECONNRESET') { | ||
| }); | ||
| } | ||
| } | ||
| self.isBusy = false; | ||
| cb(e); | ||
| cb(e); | ||
| }); | ||
@@ -209,0 +196,0 @@ |
+4
-6
| { | ||
| "name": "phantom-workers", | ||
| "version": "0.4.3", | ||
| "version": "0.5.0", | ||
| "author": { | ||
@@ -20,9 +20,7 @@ "name": "Jan Blaha", | ||
| "dependencies": { | ||
| "net-cluster": "0.0.2", | ||
| "object-assign": "4.1.1", | ||
| "portscanner": "1.0.0", | ||
| "underscore": "1.8.2" | ||
| "lodash.find": "4.6.0", | ||
| "object-assign": "4.1.1" | ||
| }, | ||
| "optionalDependencies": { | ||
| "phantomjs": "1.9.15" | ||
| "phantomjs": "1.9.20" | ||
| }, | ||
@@ -29,0 +27,0 @@ "devDependencies": { |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
28639
2.21%3
-40%16
6.67%657
7%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed