mirror of
https://github.com/wekan/wekan.git
synced 2025-12-19 17:00:13 +01:00
137 lines
4.7 KiB
Markdown
137 lines
4.7 KiB
Markdown
|
|
wekan-cfs-power-queue [](https://travis-ci.org/CollectionFS/Meteor-powerqueue)
|
||
|
|
=========
|
||
|
|
|
||
|
|
~~Looking for maintainers - please reach out!~~
|
||
|
|
This package is to be archived due to inability to find contributors, thanks to everyone who helped make it possible.
|
||
|
|
|
||
|
|
**If you're looking for an alternative, we highly recommend [Meteor-Files](https://github.com/VeliovGroup/Meteor-Files) by [VeliovGroup](https://github.com/VeliovGroup)**
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
PowerQueue is a native Meteor package for memory-backed job queue processing. Features include:
|
||
|
|
* async tasks
|
||
|
|
* throttling resource usage
|
||
|
|
* retrying failed tasks
|
||
|
|
* managing sub-queues
|
||
|
|
* powered by Meteor's reactive sugar
|
||
|
|
* etc.
|
||
|
|
|
||
|
|
PowerQueue can use one of two [spinal-queue](https://github.com/zcfs/Meteor-power-queue/blob/master/spinal-queue.spec.md) packages, [ReactiveList](https://github.com/zcfs/Meteor-reactive-list) or [MicroQueue](https://github.com/zcfs/Meteor-micro-queue).
|
||
|
|
|
||
|
|
## Demos
|
||
|
|
|
||
|
|
**Check out the cool [live queue demo](http://power-queue-test.meteor.com) and [live sub queue example](http://power-queue-sub-test.meteor.com).**
|
||
|
|
|
||
|
|
Source code for both can be found in the two branches of the [power-queue-example repo](https://github.com/zcfs/power-queue-example).
|
||
|
|
|
||
|
|
|
||
|
|
Kind regards,
|
||
|
|
Eric(@aldeed) and Morten(@raix)
|
||
|
|
|
||
|
|
Happy coding!
|
||
|
|
|
||
|
|
# API
|
||
|
|
All getters and setters are reactive.
|
||
|
|
|
||
|
|
[API Documentation](api.md)
|
||
|
|
|
||
|
|
## Helpers / Getters / Setters:
|
||
|
|
* PowerQueue.length - Number of tasks in queue
|
||
|
|
* PowerQueue.progress - Current progress in percent
|
||
|
|
* PowerQueue.usage - Current load in percent
|
||
|
|
* PowerQueue.total - Sum of tasks to run in current queue
|
||
|
|
* PowerQueue.isPaused - True if queue is paused
|
||
|
|
* PowerQueue.isHalted - True if queue is paused or stopped
|
||
|
|
* PowerQueue.processing - Number of tasks being processed
|
||
|
|
* PowerQueue.errors - Failures where task is passed to the errorHandler
|
||
|
|
* PowerQueue.failures - Number of failures in current queue
|
||
|
|
* PowerQueue.isRunning - True if queue is active
|
||
|
|
* PowerQueue.maxProcessing - Getter + Setter for max tasks to run in parallel
|
||
|
|
* PowerQueue.autostart - Getter + Setter for autostart flag - Allow add task to start the queue
|
||
|
|
* PowerQueue.maxFailures - Max allowed retries for failing tasks before marked as an error
|
||
|
|
* options.queue - Use custom micro-queue compatible queue
|
||
|
|
* options.onEnded - Called when queue has ended
|
||
|
|
* options.onRelease(remainingTasks) - Called when queue has ended or paused
|
||
|
|
* options.onAutostart - Called when queue was autostarted
|
||
|
|
|
||
|
|
## Methods
|
||
|
|
* PowerQueue.add(data) - Add a task to queue
|
||
|
|
* PowerQueue.run() - Start the queue
|
||
|
|
* PowerQueue.pause() - Pause the queue
|
||
|
|
* PowerQueue.resume() - Resume the queue if paused
|
||
|
|
* PowerQueue.reset() - Reset the queue
|
||
|
|
* PowerQueue.taskHandler(data, next, failures) - Default task handler, where data is a `function(done)`, can be overwritten
|
||
|
|
* PowerQueue.errorHandler(data, addTask, failures) - Default error handler, can be overwritten
|
||
|
|
|
||
|
|
# Example 1
|
||
|
|
```js
|
||
|
|
var queue = new PowerQueue({
|
||
|
|
isPaused: true
|
||
|
|
});
|
||
|
|
|
||
|
|
queue.add(function(done) {
|
||
|
|
console.log('task 1');
|
||
|
|
done();
|
||
|
|
});
|
||
|
|
queue.add(function(done) {
|
||
|
|
console.log('task 2');
|
||
|
|
done();
|
||
|
|
});
|
||
|
|
queue.add(function(done) {
|
||
|
|
console.log('task 3');
|
||
|
|
done();
|
||
|
|
});
|
||
|
|
|
||
|
|
console.log('Ready to run queue');
|
||
|
|
queue.run();
|
||
|
|
```
|
||
|
|
|
||
|
|
# Example 2
|
||
|
|
|
||
|
|
This is a very rough example of how to make custom task handling.
|
||
|
|
|
||
|
|
```js
|
||
|
|
|
||
|
|
queue.errorHandler = function(data, addTask) {
|
||
|
|
// This error handler lets the task drop, but we could use addTask to
|
||
|
|
// Put the task into the queue again
|
||
|
|
tasks.update({ _id: data.id }, { $set: { status: 'error'} });
|
||
|
|
};
|
||
|
|
|
||
|
|
queue.taskHandler = function(data, next) {
|
||
|
|
|
||
|
|
// The task is now processed...
|
||
|
|
tasks.update({ _id: data.id }, { $set: { status: 'processing'} });
|
||
|
|
|
||
|
|
Meteor.setTimeout(function() {
|
||
|
|
if (Math.random() > 0.5) {
|
||
|
|
// We random fail the task
|
||
|
|
tasks.update({ _id: data.id }, { $set: { status: 'failed'} });
|
||
|
|
// Returning error to next
|
||
|
|
next('Error: Fail task');
|
||
|
|
} else {
|
||
|
|
// We are done!
|
||
|
|
tasks.update({ _id: data.id }, { $set: { status: 'done'} });
|
||
|
|
// Trigger next task
|
||
|
|
next();
|
||
|
|
}
|
||
|
|
// This async task duration is between 500 - 1000ms
|
||
|
|
}, Math.round(500 + 500 * Math.random()));
|
||
|
|
};
|
||
|
|
|
||
|
|
// Add the task:
|
||
|
|
var taskId = 0;
|
||
|
|
queue.add({ id: tasks.insert({ status: 'added', index: ++taskId }) });
|
||
|
|
```
|
||
|
|
|
||
|
|
# Contribute
|
||
|
|
|
||
|
|
Here's the [complete API documentation](internal.api.md), including private methods.
|
||
|
|
|
||
|
|
To update the docs, run `npm install docmeteor` then `docmeteor`.
|
||
|
|
|
||
|
|
|
||
|
|
## TODO / Wishlist
|
||
|
|
|
||
|
|
* scheduling jobs to run in the future, like [meteor-queue](https://github.com/artwells/meteor-queue#features) - see [issue #15](https://github.com/zcfs/Meteor-power-queue/issues/15)
|