yellowjacket
Scalable task runner
Prerequisites
graphql
- Backend (currently only rethinkdb is included)
Notes
- current documentation has been quickly thrown together and will improve with future releases
- Load balancing tested with a simple NGINX configuration
Example
Simple hello world with a rethinkdb backend
ES6
Setup yellowjacket
import * as graphql from 'graphql'
import rethinkdbdash from 'rethinkdbdash'
import { rethinkdb as RethinkDBBackend } from 'yellowjacket/backend'
import yellowjacket from 'yellowjacket'
import installer from 'yellowjacket/install'
let backend = new RethinkDBBackend(rethinkdbdash({ silent: true }), graphql)
// scheduler: takes a node list in and returns a prioritized list
// of acceptable runners via done callback
let scheduler = function (runner, nodeList, queue, done) {
return done(null, [ runner.info() ]) // schedule on the current runner
}
// actions: list of actions that can be completed. returns potential status
// in done callback or defaults to SUCCESS
let actions = {
print (runner, context, done) {
console.log(JSON.stringify(context))
done()
}
}
If installing
installer(backend)
If using as a command line
yellowjacket(backend, undefined, actions, scheduler)
If using as a function call
let command = {
target: 'runner',
action: 'start',
options: {
host: 'localhost',
port: 8080
}
}
yellowjacket(backend, command, actions, scheduler)
Commands
Commands are constructed by creating an object with the following structure
{
target: 'targetName',
action: 'actionName',
options: {
optionName: optionValue,
...
}
}
targets
runner
actions
-
add
options-
host
{String
} - hostname or IP accessible by other nodes -
port
{Int
} - port to listen on
-
-
start
-
host
{String
} - host name or IP the runner was added with -
port
{Int
} - port the runner was added with -
loglevel
: {LogLevelEnum
} - Level of logging -
logfile
: {String
} - Path to a log file
-
-
stop
- host/port combo or ID-
id
{String
} - runner ID -
host
{String
} - host name or IP the runner was added with -
port
{Int
} - port the runner was added with
-
-
list
- no options lists all runners-
host
{String
} - list runners with host -
port
{Int
} - list runners with port -
state
{RunnerStateEnum
} - list runner with state -
zone
{String
} - list runner that belongs to zone with ID
-
CLI Examples
> cli runner add host localhost port 8080
> cli runner list
> cli runner start host localhost port 8080
> cli runner stop host localhost port 8080
zone
options
-
list
- lists all zones
queue
options
-
list
- lists all queued tasks
settings
options
-
list
- lists all settings
types
LogLevelEnum
"silent" | "fatal" | "error" | "warn" | "info" | "debug" | "trace"
RunnerStateEnum
"ONLINE" | "OFFLINE" | "MAINTENANCE" | "UNKNOWN"