Giter Site home page Giter Site logo

sails-hook-jobs's Introduction

sails-hook-jobs

Sails JS hook to add async background agenda.

This project use "agenda" as the job engine

Agenda is a light-weight job scheduling library for Node.js. And it's use mongodb. a

This hook has been tested with sails 0.12.3

Install

npm install sails-hook-jobs

Configuration

Copy this configurations file and save it to config/jobs.js

/**
 * Default jobs configuration
 * (sails.config.jobs)
 *
 * For more information using agenda in your app, check out:
 * https://github.com/vbuzzano/sails-hook-jobs
 */
module.exports.jobs = {

  // Where are jobs files
  "jobsDirectory": "api/jobs",

  // agenda configuration.
  // for more details about configuration,
  // check https://github.com/rschmukler/agenda
  "db": {
    "address"    : "localhost:27017/jobs",
    "collection" : "agendaJobs"
  },
  "name": "process name",
  "processEvery": "10 seconds",
  "maxConcurrency": 20,
  "defaultConcurrency": 5,
  "defaultLockLifetime": 10000
};

How to define and schedule jobs

Simply create a js file (name ending with Job.js, eg: myJob.js) in api/jobs or in the 'jobsDirectory'. (coffee script supported.)

module.exports = function(agenda) {
    var job = {

        // job name (optional) if not set,
        // Job name will be the file name or subfolder.filename (without .js)
        //name: 'Foo',

        // set true to disabled this job
        //disabled: false,

        // method can be 'every <interval>', 'schedule <when>' or now
        //frequency supports cron strings
        frequency: 'every 5 seconds',

        // Jobs options
        //options: {
            // priority: highest: 20, high: 10, default: 0, low: -10, lowest: -20
            //priority: 'highest'
        //},

        // Jobs data
        //data: {},

        // execute job
        run: function(job, done) {
            console.log("Foo job executed");
            done();
        },
    };
    return job;
}

What you get ?

Once the hook started, you will have a new global object 'Jobs' wich is the instance of Agenda engine.

You can use it like that

Jobs.now('jobname', data)
Jobs.schedule('tommorrow at noon', 'jobname', {})
...

All found jobs with a run function will be defined and all jobs with freq will be sheduled.

Problems to solve

  • How to stop agenda correctly on sails lowering ??
  • Purging jobs ??

sails-hook-jobs's People

Contributors

papodaca avatar srihari93 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

sails-hook-jobs's Issues

Running in worker

Hey.
Was wondering how should I start the job runner in a separate worker.js file

Agenda broken release

Hello, I've tried using your library, but I'm getting this error:


...\node_modules\sails-hook-jobs\node_modules\agenda\lib\agenda.
js:455
  this._collection.updateMany({_id: { $in: jobIds } }, { $set: { lockedAt: null } }, done);    // NF refactor
ed .update() 22/04/2015
                  ^

TypeError: Cannot read property 'updateMany' of undefined

Searching around I've found there are people talking and workaround this: agenda/agenda#213

Is it possible to make the same workaround for this library?

Thanks!!!

Error: Cannot find module '../build/Release/bson']

Might be an oldie, but on sails lift, I get the following error:

{ [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' }
js-bson: Failed to load c++ bson extension, using pure JS version

I saw this: agenda/agenda#200 but could not figure out a solution for me.

Any workaround or fix?

Thank you,
Manuel


sails.js 0.12.3, 0.12.4
sails-mongo 0.12.1
npm 2.15.5

visualize UI

what is the route to visualize the active jobs as well as this?

captura de pantalla 2018-10-12 a la s 18 47 32

Purging jobs missing?

I need to schedule some not repetitive tasks but for a certain date. I got a Mongo database instance at server and a sails application. However I will have a quite large demand in application (up to 100 000 users).

I wonder how this purging jobs as a problem to solve may complicate things in this application.

Coding errors hidden behind failing agenda

If you have a typo or other error while coding with the result that sails cannot lift, you get the following output to console instead of the error itself.

A hook (`controllers`) failed to load!
0|web      | TypeError: Cannot read property 'updateMany' of undefined
0|web      |     at Agenda._unlockJobs (/mypath/server/node_modules/agenda/lib/agenda.js:455:19)
0|web      |     at Agenda.stop (/mypath/server/node_modules/agenda/lib/agenda.js:394:8)
0|web      |     at Sails.stopServer (/mypath/server/node_modules/sails-hook-jobs/index.js:14:12)
0|web      |     at emitNone (events.js:91:20)
0|web      |     at Sails.emit (events.js:185:7)
0|web      |     at Sails.emitter.emit (/mypath/server/node_modules/sails/lib/app/private/after.js:50:11)
0|web      |     at /mypath/server/node_modules/sails/lib/app/lower.js:67:11
0|web      |     at beforeShutdown (/mypath/server/node_modules/sails/lib/app/lower.js:45:12)
0|web      |     at Sails.lower (/mypath/server/node_modules/sails/lib/app/lower.js:49:3)
0|web      |     at Sails.wrapper [as lower] (/mypath/server/node_modules/@sailshq/lodash/lib/index.js:3250:19)
0|web      |     at sailsReady (/mypath/server/node_modules/sails/lib/app/lift.js:41:20)
0|web      |     at /mypath/server/node_modules/sails/node_modules/async/lib/async.js:721:13
0|web      |     at /mypath/server/node_modules/sails/node_modules/async/lib/async.js:52:16
0|web      |     at /mypath/server/node_modules/sails/node_modules/async/lib/async.js:264:21
0|web      |     at /mypath/server/node_modules/sails/node_modules/async/lib/async.js:44:16
0|web      |     at /mypath/server/node_modules/sails/node_modules/async/lib/async.js:718:17
0|web      |     at /mypath/server/node_modules/sails/node_modules/async/lib/async.js:167:37
0|web      |     at /mypath/server/node_modules/sails/lib/app/load.js:173:22
0|web      |     at /mypath/server/node_modules/sails/node_modules/async/lib/async.js:52:16
0|web      |     at /mypath/server/node_modules/sails/node_modules/async/lib/async.js:565:21
0|web      |     at /mypath/server/node_modules/sails/node_modules/async/lib/async.js:167:37
0|web      |     at /mypath/server/node_modules/sails/lib/app/load.js:120:23

This is observed especially with coding errors in controllers or Models.
The message is always the same and makes it really hard to debug.

Any idea how we can let agenda survive during sails lift?

Agenda never triggers for every or schedule

I have myJob.js in api/jobs configured to run every 10 seconds. When I trigger from my controller Jobs.now('myJob', {}); it works fine for one-time run. It never runs every 10 seconds as defined in the job config.

module.exports = function(agenda) {
    var job = {

        // job name (optional) if not set,
        // Job name will be the file name or subfolder.filename (without .js)
        name: 'myJob',

        // set true to disabled this hob
        //disabled: false,

        // method can be 'every <interval>', 'schedule <when>' or now
        frequency: 'every 10 secondes',

        // Jobs options
        options: {
            // priority: highest: 20, high: 10, default: 0, low: -10, lowest: -20
            priority: 'highest'
        },

        // Jobs data
        //data: {},

        // execute job
        run: function(job, done) {            
            console.log("Foo job executed " + job.attrs.data);
            done();
        },
    };
    return job;
}

a working sample

Please provide a working sample. I have set up the project as instructed, however, the Jobs global is undefined in bootstrap.js on sails lift.

sails version: 0.12.3

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.