spinner v0.3.4
Spinner
Spin up node scripts bound to dynamic ports (forked from nploy)
$ npm install spinnercreateRouter(opts)
Options:
- range - Port range 7000..7099
- time - Time to idle 15
- debug - Output logs
- routes - Hash of routing pairs (source -> target) {}
- output - Determines how child process output is handled:
- false - Will not capture child process output
- "console" - Will pipe child process stdin/stderr to console.info/console.error
- "process" - Will pipe child process stdin/stderr to process.stdin/process.stderr
Example:
var spinner = require('spinner');
var router = spinner.createRouter({ port: 5000, dir: '../test' });
router.setRoutes({
'foo': 'a/index.js'
, 'goo': 'b/index.js'
});
router.getRoute('foo', function(err, route, child) {
if (err) throw new Error(err);
console.log('Use %s:%d to access "foo"', route.host, route.port);
router.kill('foo', function(err) {
console.log('"foo" is now dead');
router.close();
});
});The router object has the following API.
Properties
- range - Returns the port range configured in the router
- idletime - Time in seconds to wait without a call to
getRoutebefore the process is killed - options - Options object
setRoute(source, target), setRoutes(map)
target may be a path to a node.js script or an object with a script property (path to the script)
and extra options passed to the forever module when starting
the child process.
Update routes table with source -> script pair(s).
getRoute(source, callback)
Returns a route to a source. Callback is function(err, port, child) where port
is the same port passed to the app in process.env.PORT.
clearRoute(source), clearRoutes(map)
Deletes route(s). If map is if not provided, all routes will be deleted
kill(source, callback)
Kills the process associated with source. callback is function(err).
close()
Shuts down the router. Namely, removes the idle timer.
getchild(source), getpid(source)
Returns the forever child of a source or it's PID.
Testing
Run tests:
npm testLicence
MIT/X11
Author (nploy): George Stagas (@stagas)
Author (spinner): Elad Ben-Israel (@eladb)