dean

Proxy routing table with cluster support

dean

Evan Lucas

MIT

$ npm install -g dean
$ npm test
$ npm run cover

Constructor

opts can contain the following:

KeyDescription
keyThe session id (connect.sid) can also pass session-key
bindAddressThe ip to bind (0.0.0.0)
portThe listening port (8040)
httpshttps options (key, cert)
timeoutProxy timeout (0)
max-socketsMax number of sockets for the http agent
redisObject containing redis options (port, host, socket, db)
tracejstrace instance

redis note: the redis key can also contain a redisClient. This should be an instance of redis.createClient. redis.socket will take priority over redis.host and redis.port.

NameType(s)Description
optsObjectThe options

Listen for requests

Examples:

// just a callback 
dean.listen(function() {
  console.log('listening on port', dean.port)
})
 
// with a port 
dean.listen(8044, function() {
  console.log('listening on port', 8044)
})
 
// with a port and host 
dean.listen(8044, '127.0.0.1', function() {
  console.log('listening at', '127.0.0.1:8044')
})
NameType(s)Description
portNumberThe port on which we should listen (optional)
hostStringThe bindAddress (optional)
cbFunctionfunction()

Closes the server and stops accepting requests

NameType(s)Description
cbFunctionfunction()

Adds a new drone to the rotation

Example

// all of the following will be accepted 
// '0.0.0.0:4043' 
dean.addDrone('0.0.0.0:4043')
dean.addDrone('4043')
dean.addDrone(4043)
dean.addDrone({
  port: 4043
, host: '0.0.0.0'
})
NameType(s)Description
droneString, Object, NumberThe drone to add

Removes a drone from the rotation

Example

dean.removeDrone('0.0.0.0:4043')
NameType(s)Description
droneStringThe drone to remove

Instrumentation is optional via jstrace.

The following probes are exposed:

  • dean:proxy:web:start
    • target will be the request's target
    • method will be the request method
    • url will be the request url
  • dean:proxy:web:end
    • target will be the request's target
    • method will be the request method
    • url will be the request url
    • duration will be the duration of the request in ms
  • dean:drone:add
    • drone will be the added drone
  • dean:drone:remove
    • drone will be the removed drone

An example script has been provided at ./scripts/trace.js. To test it out:

$ jstrace ./scripts/trace.js
 
# Then in another terminal
$ npm test