| #!/usr/bin/env coffee | ||
| Optimist = require('optimist') | ||
| $ = require 'bling' | ||
| opts = Optimist \ | ||
| .options('c', { \ | ||
| alias: 'collection', | ||
| default: 'workQueue', | ||
| describe: 'the collection to hold work orders in' | ||
| }) \ | ||
| .options('i', { \ | ||
| alias: 'interval', | ||
| default: 100 | ||
| describe: 'when idle, how often to look for new work' | ||
| }) \ | ||
| .options('r', { \ | ||
| alias: 'require', | ||
| default: '', | ||
| describe: 'require this/these module(s), which should export type handlers' | ||
| }) \ | ||
| .option('d', { \ | ||
| alias: 'demo', | ||
| default: false | ||
| describe: 'DANGEROUS: load an example queue as a test, will flush all jobs in the specified collection' | ||
| }) \ | ||
| .demand(1) | ||
| .check( (argv) -> | ||
| unless /^mongodb:/.test argv._ | ||
| throw new Error("url must begin with mongodb://") | ||
| ) | ||
| .usage("Usage: $0 [options...] mongodb://host:port/db_name") | ||
| .argv | ||
| url = opts._[0] | ||
| mins = 60*1000 | ||
| $.log "Options:", opts | ||
| W = require "../index.coffee" | ||
| if $.is 'array', opts.require | ||
| for r in opts.require | ||
| $.log "Requiring '#{r}'..." | ||
| for type, handler of require(r) | ||
| $.assert ($.is 'string', type), "type must be string: #{type}" | ||
| $.assert ($.is 'function', handler), "handler must be function: #{handler}" | ||
| W.register type, handler | ||
| W.connect url, { collection: opts.collection } | ||
| worker = W.createWorker { | ||
| idle_delay: opts.interval | ||
| } | ||
| worker.resume() | ||
| if opts.demo | ||
| W.register 'echo', (item, done) -> | ||
| $.log "ECHO:", item.message | ||
| done() | ||
| W.clear().push( | ||
| type: "echo" | ||
| schedule: { every: .1*mins, maxFail: Infinity } | ||
| message: "Should recur every six seconds" | ||
| _id: "only_one" | ||
| ).push( | ||
| type: "echo" | ||
| schedule: { after: .5*mins } | ||
| message: "Once after thirty seconds" | ||
| ).push( | ||
| type: "echo" | ||
| schedule: { at: $.now + 3000 } | ||
| message: "Once after three seconds" | ||
| ) | ||
| $.delay 32000, -> | ||
| $.log "Ending demo." | ||
| worker.pause() |
+9
-14
@@ -33,6 +33,7 @@ # | ||
| ready.wait( (err, queue) -> queue.push item ); @ | ||
| pop: (cb) -> ready.wait( (err, queue) -> queue.pop cb ); @ | ||
| clear: -> ready.wait( (err, queue) -> queue.clear() ); @ | ||
| close: -> ready.wait (err, queue) -> queue.close() | ||
| count: (cb) -> ready.wait( (err, queue) -> queue.count cb ); @ | ||
| pop: (cb) -> ready.wait( (err, queue) -> queue.pop cb ); @ | ||
| clear: -> ready.wait( (err, queue) -> queue.clear() ); @ | ||
| remove: (query) -> ready.wait( (err, queue) -> queue.remove(query) ); @ | ||
| close: -> ready.wait (err, queue) -> queue.close() | ||
| count: (cb) -> ready.wait( (err, queue) -> queue.count cb ); @ | ||
| register: (type, handler) -> | ||
@@ -46,6 +47,4 @@ ready.wait (err, queue) -> queue.register type, handler | ||
| return { | ||
| pause: -> | ||
| w.then (worker) -> worker.pause() | ||
| resume: -> | ||
| w.then (worker) -> worker.resume() | ||
| pause: -> w.then (worker) -> worker.pause() | ||
| resume: -> w.then (worker) -> worker.resume() | ||
| } | ||
@@ -133,5 +132,3 @@ | ||
| close: -> | ||
| $.log "closing" | ||
| db.close -> $.log "closed" | ||
| $.log "resetting", ready.promiseId | ||
| ready.reset() | ||
@@ -142,6 +139,4 @@ ready.wait (err) -> | ||
| clear: -> | ||
| $.log "clearing" | ||
| q.remove {}, (err) -> $.log "clear result:", err | ||
| clear: -> q.remove {}, (err) -> | ||
| remove: (query) -> q.remove query, (err) -> | ||
| count: (cb) -> q.count { status: "new" }, cb | ||
@@ -148,0 +143,0 @@ push: (item) -> |
+4
-1
| { | ||
| "name": "work-queue", | ||
| "version": "0.0.2", | ||
| "version": "0.0.3", | ||
| "description": "Process scheduled items from a queue held in MongoDB.", | ||
@@ -9,2 +9,5 @@ "main": "index.coffee", | ||
| }, | ||
| "bin": { | ||
| "queue-reader": "./bin/queue-reader.coffee" | ||
| }, | ||
| "author": "Jesse Dailey <jesse.dailey@gmail.com>", | ||
@@ -11,0 +14,0 @@ "license": "MIT", |
Sorry, the diff of this file is not supported yet
15454
0.42%