示例#1
0
agenda.purge(function () {
	agenda.define('resolve actions', function (job, callback) {
		resolve(callback);
	});

	agenda.define('execute actions', function (job, callback) {
		execute(callback);
	});

	agenda.every('30 seconds', 'resolve actions');
	agenda.every('1 minute', 'execute actions');

	agenda.on('start', function (job) {
		timing.start(job.attrs.name);
		logger.info({message: 'job started', job: job.attrs.name });
	});

	agenda.on('success', function (job) {
		var duration = timing.finish(job.attrs.name);
		logger.success({message: 'job compeleted', job: job.attrs.name, duration: duration.asMilliseconds()});
	});

	agenda.on('fail', function (err, job) {
		logger.error({message: 'job failed', job: job.attrs.name, err: err});
	});

	agenda.start();
});
示例#2
0
文件: jobs.js 项目: Erez-IL/notifier
	agenda.purge(function () {
		agenda.define('resolve actions', function (job, callback) {
			handler('created', 'resolve', callback);
		});

		agenda.define('execute actions', function (job, callback) {
			handler('resolved', 'execute', callback);
		});

		agenda.every(util.format('%d seconds', config.jobs.run.resolve), 'resolve actions');
		agenda.every(util.format('%d seconds', config.jobs.run.execute), 'execute actions');

		agenda.on('start', function (job) {
			timing.start(job.attrs.name);
		});

		agenda.on('success', function (job) {
			var duration = timing.finish(job.attrs.name);
			logger.info({message: 'job compeleted', job: job.attrs.name, duration: duration.asMilliseconds()});
		});

		agenda.on('fail', function (err, job) {
			logger.error({message: 'job failed', job: job.attrs.name, err: err});
		});

		agenda.start();
	});
示例#3
0
module.exports = function(jobTypes) {
    var Agenda = require('agenda');
    var keystone = require('keystone'),
        moment = require('moment');

    var agenda = new Agenda({name: 'playgroundAgenda', defaultLockLifetime: 5000, db:{address: keystone.get('mongo'), collection: 'agendaJobs'}, maxConcurrency: 200});
    agenda.processEvery('1 minute');

    //***********LOGGING*************//
    agenda.on('start', function(job) {
        console.log("Job %s starting %s", job.attrs.name, moment().format("dddd, MMMM Do YYYY, h:mm:ss a"));
    });

    agenda.on('complete', function(job) {
        console.log("Job %s finished %s", job.attrs.name, moment().format("dddd, MMMM Do YYYY, h:mm:ss a"));
    });

    agenda.on('fail', function(err, job) {
        console.log("Job failed with error: %s %s", err.message, moment().format("dddd, MMMM Do YYYY, h:mm:ss a"));
    });

    //***********REGISTER JOBS*************//
    jobTypes.forEach(function(type) {
        require('./jobs/'+type)(agenda);
    });

    //***********START*************//
    agenda.start();
    return agenda;
}
示例#4
0
module.exports = function () {
	var self = this;
	// Remove polls that have been closed for 2+ weeks.
	agenda.define('remove closed polls', function (job, done) {
		Poll.find({
				created: {
					$lte: moment.utc().subtract(14, 'weeks')
				}
			},
			function (err, docs) {
				if (err) {
					return done(err);
				}
				docs.forEach(function (doc) {
					doc.remove(function (err, doc) {
						if (err) {
							return done(err);
						}

						console.log('Poll removed: ' + JSON.stringify({
							_id: doc._id,
							closeTime: doc.closeTime,
							creator: doc.creator.username
						}));
					});
				});
				done();
			}
		);
	});

	agenda.define('check twitch api status', function (job, done) {
		// Twitch API Status
		twitch.api(
			'/', {
				clientID: nconf.get('authkeys:twitchtv:clientID')
			},
			function (err, statusCode, response) {
				if (err) {
					console.log(err);
				}
				if (statusCode !== 200) {
					self.locals.twitchStatus = false;
				}
				else {
					self.locals.twitchStatus = true;
				}

				done();
			}
		);
	});

	agenda.on('ready', function () {
		agenda.every('1 day', 'remove closed polls');
		agenda.every('2 minutes', 'check twitch api status');
		agenda.start();
	});
};
示例#5
0
module.exports = function (deps, callback) {

    var mongoConnectionString = "mongodb://127.0.0.1:27017/agenda";

    var agenda = new Agenda({db: {address: mongoConnectionString}});
    
    ['email', 'watchlist'].forEach(function(job){
        require('./jobs/'+job)(deps, agenda);
    });

    agenda.on('ready', function() {
        console.log('Agenda ready');
        agenda.purge(function(err, numRemoved) {
            console.log('purged count: ', numRemoved)
        });
        callback(null, agenda);
    });

    function graceful() {
        agenda.stop(function() {
            process.exit(0);
        });
    }

    process.on('SIGTERM', graceful);
    process.on('SIGINT' , graceful);

    agenda.on('start', function(job) {
        console.log(new Date(),  " - Job %s starting", job.attrs.name);
    });
    
    agenda.on('success', function(job) {
        console.log(new Date(), " - Job %s Successfully completed.", job.attrs.name);
    });

    agenda.on('fail', function(err, job) {
        console.log(new Date(), " - Job %s failed with error: %s", job.attrs.name, err.message);
    });

    agenda.on('error', function(e){
        console.log('**Agenda Error**');
        console.log(e);
    })
};
})(function (require, exports) {
    "use strict";
    var Agenda = require('agenda');
    var bodyParser = require('body-parser');
    var express = require('express');
    var path = require('path');
    var socketIo = require('socket.io');
    var request = require('request');
    var socketIoAuth = require('socketio-auth');
    var app = express();
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    app.use(express.static(path.join(__dirname, 'public'), { maxAge: 86400 }));
    app.use('/jspm_packages', express.static(path.join(__dirname, '../jspm_packages')));
    var router = express.Router();
    router.use(function (req, res, next) { return next(); });
    router.route('/test').get(function (req, res) { return res.json({ test: 'ok' }); });
    router.get('/config.js', function (req, res) { return res.sendFile(path.join(__dirname, '../config.js')); });
    router.get('/socket.io-client.js', function (req, res) { return res.sendFile(path.join(__dirname, '../jspm_packages/npm/socket.io-client@1.4.6.js')); });
    app.use('/', router);
    var server = app.listen(3000, 'localhost', function () {
        console.log('App listening at http://%s:%s', server.address().address, server.address().port);
        console.log(__dirname);
    });
    var io = socketIo.listen(server);
    socketIoAuth(io, {
        authenticate: function (socket, data, callback) {
            return callback(null, true);
        }
    });
    io.sockets.on('connection', function (socket) {
        console.log("user connected");
        socket.emit('helloWorld', { hello: 'world' });
        socket.on('refreshRepos', function (data) {
            var url = "https://api.github.com/users/" + (data && data.user) + "/repos";
            request(url, { json: true, headers: { 'user-agent': 'node.js' } }, function (err, response, data) {
                socket.emit('reposRefreshed', data);
            });
        });
    });
    var mongoConnectionString = "mongodb://localhost/agenda";
    var agenda = new Agenda({ db: { address: mongoConnectionString } });
    agenda.define('test', function (job, done) {
        console.log('agenda test');
        done();
    });
    agenda.on('ready', function () {
        agenda.every('10 minutes', 'test');
        agenda.start();
    });
});
示例#7
0
module.exports = function(app, appPath, gfs){
  if ('test' === app.get('env')) {
    return;
  }
  
  // Agenda
  var agenda = new Agenda();
  agenda.database(config.db);

  agenda.on('start', function(job) {
    console.log('Job %s starting', job.attrs.name);
  });

  agenda.on('complete', function(job) {
    console.log('Job %s finished', job.attrs.name);
  });

  util.walk(appPath + '/server/scheduled', null, function(path){
    require(path)(app, agenda, gfs);
  });
  
  agenda.start();
};
示例#8
0
var Agenda = require('agenda');
var winston = require('./winston');
var config = require('./environment');
var Settings = require('./../api/settings/settings.model');

// Agenda settings
var agenda = new Agenda({
  db: {
    address: config.mongo.uri,
    collection: 'agenda'
  }
});

// Agenda event to catch errors
agenda.on('fail', function(err, job) {
  winston.error('agenda.js error: ' + err);
});

// Remove all jobs to avoid starting mutliple jobs
agenda.purge(function(err, numRemoved) {
  winston.info('Purged jobs in Agenda que');
});

// Define agenda jobs
require('./jobs/weather')(agenda);

// Get the settings document and then scedule sensor readings
Settings.findOne({}, {}, { sort: { 'timestamp': 1 } }, function(err, settings){

  // Only start jobs if settings exist
  if (settings){
示例#9
0
//Setup an Agenda connection
var Agenda = require('agenda');
var agenda = new Agenda({db: {address: userConfig.mongodb.host + ':' + userConfig.mongodb.port + '/' + userConfig.mongodb.databaseName,
    collection: 'agenda'},
    options: {ssl: true}});

require('./config/express')(app);
require('./routes')(app);
require('./jobs/jobs');

process.on('unhandledRejection', function (reason, p) {
    console.log('Possibly Unhandled Rejection at: Promise ', p, ' reason: ', reason);
});

process.on('unhandledException', function (err) {
    console.log('Possibly Unhandled Exception at: Promise ', err);
});

// Start server
server.listen(config.port, config.ip, function () {
    console.log('Express server listening on %d, in %s mode', config.port, app.get('env'));
});

//Start agenda
agenda.on('ready', function() {
    agenda.start();
});

// Expose app
exports = module.exports = app;
示例#10
0
文件: agenda.js 项目: ModDash/ModDash
const Agenda = require('agenda'); 

const mongoConnectionString = process.env.MONGODB_URI;

var agenda = new Agenda({
  db: {
    address: mongoConnectionString, 
    collection: 'mapJobs', 
    options: {
      server: { auto_reconnect: true }
    }
  }
});

agenda.on('ready', () => {
  console.log('Agenda is connected to Heroku mongodb.');
  agenda.start();
});

agenda.on('error', (err) => {
  console.warn('Error in Agenda connecting to Heroku mongodb:\n', err);
});

agenda.on('fail', (err, job) => {
  console.log('Job failed with error: %s', err.message);
});

agenda.on('success', (job) => {
  console.log('Successfully completed job:', job.attrs);
});

module.exports = agenda;
示例#11
0
module.exports = function (app, db, jobs) {

  // Initialize agenda instance
  var agenda = new Agenda({ mongo: db.connections[0].db, db: { collection: "jobs" }, processEvery: '5 seconds' });

  // Load job types (define in each module)
  var jobTypes = {};

  // Iterate over each modules jobs and initialize
  _.forEach(jobs, function(jobs) {
    _.extend(jobTypes, require('./../../' + jobs)(function(moduleName, jobName, interval, derivedJobName, data, cb) {

      // Define job using agenda API
      agenda.define(derivedJobName, function(job, done) {
        // Extend data with module and job
        var jobData = _.extend(job.attrs.data, { moduleName: moduleName, jobName: jobName, derivedJobName: derivedJobName });

        // Execut job callback
        if(cb) {
          try {
            cb(jobData);
          } catch (err) {
            console.log("Caught failed job! - " + derivedJobName);
            job.fail(err); // call Agenda fail function
            job.save(); // save updated job
          }
        }

        done(); // Make sure to call - otherwise jobs do not run
      });

      // Schedule job
      agenda.every(interval, derivedJobName, data);
    }));
  });

  // Get all configured jobs and load them into memory
  agenda.jobs({}, function(err, jobs) {
    if(!err) {
      _.forEach(jobs, function(job) {
        if(job.attrs.data && job.attrs.data.moduleName && job.attrs.data.jobName) {
          // Call each job's init function
          var interval = (job.attrs.repeatInterval) ? job.attrs.repeatInterval : '';
          jobTypes[job.attrs.data.moduleName][job.attrs.data.jobName](interval, job.attrs.data, null,
            // Failure callback
            function(message) {
              console.log(message);
            }
          );

          console.log("\nLoaded " + job.attrs.data.derivedJobName + " into active memory with interval " + job.attrs.repeatInterval);

          // Check to see if the job's next run already passed (and if so, fire the job)
          if(job.attrs.nextRunAt) {
            if(job.attrs.nextRunAt < Date.now()) { 
              console.log("--> Triggering " + job.attrs.data.derivedJobName + " to fire immediately.");
              job.run(function(err, job) {});
            } else {
              console.log("--> Scheduling startup:" + job.attrs.data.derivedJobName + " to fire " + job.attrs.nextRunAt);

              // Create a one-time startup job to run a loaded job at the desired startup time
              agenda.define("startup:" + job.attrs.data.derivedJobName, function(startupJob, done) {
                job.run(function(err, job) {});
                done();
              });

              agenda.schedule(job.attrs.nextRunAt, "startup:" + job.attrs.data.derivedJobName, {
                jobName: "startup",
                derivedJobName: "startup:" + job.attrs.data.derivedJobName
              });
            }
          }
        }
      });
    }
  });

  // Add jobTypes to agenda object
  agenda.jobTypes = jobTypes;

  // Setup recurrance
  agenda.on('ready', function() {
    // Create indexes
    agenda._collection.createIndexes([
      {key: { nextRunAt: -1, lastRunAt: -1, lastFinishedAt: -1 }},
      {key: { name: 1, nextRunAt: -1, lastRunAt: -1, lastFinishedAt: -1 }}
    ], function (err, result) {
      if (err) {
        console.warn('Jobs module indexes might not exist. Performance may decrease.');
      }
    });

    // Start agenda
    agenda.start();
  });
  
  return agenda;
};
示例#12
0
	if(fulltime.length > 0){
		myArray.push(fulltime);
	}

	if(parameterized.length > 0){
		myArray.push(parameterized);
	}

	console.log(myArray);
});

agenda.on('ready', function(){
	agenda.every('5 seconds', 'rodar integrações');
	agenda.purge(function(err, numRemoved) {
		console.log(numRemoved);
	});
	agenda.start();
})

function getResultsToRun(){
	var obj = [{
		nome: "Integração full-time",
		proximaExecucao: null
	},{
		nome: "Integração parametrizada",
		proximaExecucao: starterTime
	}];

	return obj;
};
示例#13
0
exports.register = function (server, options, next) {
    // Validating the options
    const validateOptions = internals.optionsSchema.validate(options);
    if (validateOptions.error) {
        return next(validateOptions.error);
    }
    options = validateOptions.value;

    // Configuring Agenda
    const agenda = new Agenda();
    agenda
        .database(options.mongoUri)
        .processEvery(options.processEvery)
        .maxConcurrency(options.maxConcurrency)
        .defaultConcurrency(options.defaultConcurrency)
        .lockLimit(options.lockLimit)
        .defaultLockLimit(options.defaultLockLimit)
        .defaultLockLifetime(options.defaultLockLifetime);

    // Set Job Queue Events
    agenda.on('start', (job) => {
        server.log(['agenda', 'start'], job.attrs);
    });

    agenda.on('complete', (job) => {
        server.log(['agenda', 'complete'], job.attrs);
    });

    agenda.on('success', (job) => {
        server.log(['agenda', 'success'], job.attrs);
    });

    agenda.on('fail', (err, job) => {
        server.log(['agenda', 'error'], { err: err, job: job.attrs });
    });

    // Retrieve all the jobs from the file system and define them in Agenda
    Recursive(options.jobs, function (err, files) {
        _.forIn(files, (jobFile) => {
            let jobName = Path.parse(jobFile).name;
            let jobFunction;
            let jobOpts = {};

            let job = require(jobFile);
            if (typeof job === 'function') {
                jobFunction = job;
            } else {
                jobName = job.name;
                jobFunction = job.job;

                jobOpts = Object.assign({}, job);
                delete jobOpts.name;
                delete jobOpts.job;
            }

            agenda.define(jobName, jobOpts, (agendaJob, done) => {
                server.log(['agenda', 'queue'], { jobName: jobName, job: agendaJob.attrs });
                jobFunction(server, agendaJob, done);
            });
        });

        agenda.on('ready', () => {
            server.log(['agenda', 'ready']);

            agenda.cancel({}, (err, numRemoved) => {
                if (err) {
                    throw err;
                }

                if (numRemoved > 0) {
                    server.log(['agenda', 'delete'], { jobsRemoved: numRemoved });
                }

                // https://github.com/rschmukler/agenda#everyinterval-name-data-options-cb
                if (options.every) {
                    _.forIn(options.every, (jobOpts, jobInterval) => {
                        if (typeof jobOpts === 'string') {
                            agenda.every(jobInterval, jobOpts);
                        } else {
                            _.forIn(jobOpts, (value, key) => {
                                if (typeof value === 'string') {
                                    agenda.every(jobInterval, value);
                                } else {
                                    if (value.data != undefined) {
                                        if (value.options == undefined) {
                                            agenda.every(jobInterval, key, value.data);
                                        } else {
                                            agenda.every(jobInterval, key, value.data, value.options);
                                        }
                                    }
                                    else {
                                        _.forIn(value, (v, k) => {
                                            if (v.data != undefined) {
                                                if (v.options == undefined) {
                                                    agenda.every(jobInterval, k, v.data);
                                                } else {
                                                    agenda.every(jobInterval, k, v.data, v.options);
                                                }
                                            } else {
                                                agenda.every(jobInterval, k);
                                            }
                                        });
                                    }
                                }
                            });
                        }
                    });
                }

                // https://github.com/rschmukler/agenda#schedulewhen-name-data-cb
                if (options.schedule) {
                    _.forIn(options.schedule, (jobOpts, when) => {
                        if (typeof jobOpts === 'string') {
                            agenda.schedule(when, jobOpts);
                        } else {
                            _.forIn(jobOpts, (value, key) => {
                                if (typeof value === 'string') {
                                    agenda.schedule(when, value);
                                } else {
                                    if (value.data != undefined) {
                                        agenda.schedule(when, key, value.data);
                                    } else {
                                        _.forIn(value, (v, k) => {
                                            if (v.data == undefined) {
                                                agenda.schedule(when, k);
                                            } else {
                                                agenda.schedule(when, k, v.data);
                                            }
                                        });
                                    }
                                }
                            });
                        }
                    });
                }
                agenda.start();
                next();
            });
        });
    });

    // http://hapijs.com/api#serverexposekey-value
    server.expose('agenda', agenda);

    // http://hapijs.com/api#serverbindcontext
    server.bind({ agenda: agenda });

    // http://hapijs.com/api#server-events
    server.on('start', () => {
        // Server starting...
    });
};
示例#14
0
    Recursive(options.jobs, function (err, files) {
        _.forIn(files, (jobFile) => {
            let jobName = Path.parse(jobFile).name;
            let jobFunction;
            let jobOpts = {};

            let job = require(jobFile);
            if (typeof job === 'function') {
                jobFunction = job;
            } else {
                jobName = job.name;
                jobFunction = job.job;

                jobOpts = Object.assign({}, job);
                delete jobOpts.name;
                delete jobOpts.job;
            }

            agenda.define(jobName, jobOpts, (agendaJob, done) => {
                server.log(['agenda', 'queue'], { jobName: jobName, job: agendaJob.attrs });
                jobFunction(server, agendaJob, done);
            });
        });

        agenda.on('ready', () => {
            server.log(['agenda', 'ready']);

            agenda.cancel({}, (err, numRemoved) => {
                if (err) {
                    throw err;
                }

                if (numRemoved > 0) {
                    server.log(['agenda', 'delete'], { jobsRemoved: numRemoved });
                }

                // https://github.com/rschmukler/agenda#everyinterval-name-data-options-cb
                if (options.every) {
                    _.forIn(options.every, (jobOpts, jobInterval) => {
                        if (typeof jobOpts === 'string') {
                            agenda.every(jobInterval, jobOpts);
                        } else {
                            _.forIn(jobOpts, (value, key) => {
                                if (typeof value === 'string') {
                                    agenda.every(jobInterval, value);
                                } else {
                                    if (value.data != undefined) {
                                        if (value.options == undefined) {
                                            agenda.every(jobInterval, key, value.data);
                                        } else {
                                            agenda.every(jobInterval, key, value.data, value.options);
                                        }
                                    }
                                    else {
                                        _.forIn(value, (v, k) => {
                                            if (v.data != undefined) {
                                                if (v.options == undefined) {
                                                    agenda.every(jobInterval, k, v.data);
                                                } else {
                                                    agenda.every(jobInterval, k, v.data, v.options);
                                                }
                                            } else {
                                                agenda.every(jobInterval, k);
                                            }
                                        });
                                    }
                                }
                            });
                        }
                    });
                }

                // https://github.com/rschmukler/agenda#schedulewhen-name-data-cb
                if (options.schedule) {
                    _.forIn(options.schedule, (jobOpts, when) => {
                        if (typeof jobOpts === 'string') {
                            agenda.schedule(when, jobOpts);
                        } else {
                            _.forIn(jobOpts, (value, key) => {
                                if (typeof value === 'string') {
                                    agenda.schedule(when, value);
                                } else {
                                    if (value.data != undefined) {
                                        agenda.schedule(when, key, value.data);
                                    } else {
                                        _.forIn(value, (v, k) => {
                                            if (v.data == undefined) {
                                                agenda.schedule(when, k);
                                            } else {
                                                agenda.schedule(when, k, v.data);
                                            }
                                        });
                                    }
                                }
                            });
                        }
                    });
                }
                agenda.start();
                next();
            });
        });
    });
示例#15
0
                        }//for loop closing bracket here

                      } else {
                        return
                      }//if bracket
            });
        });
//agenda define ends


//agenda.initialize from here
agenda.on('ready', function() {
    agenda.every('30 seconds', 'abort games');
    agenda.every('30 seconds', 'check progress');
    agenda.every('30 seconds', 'check result'); //'open' ==> 'progress'
    // agenda.processEvery('180 seconds', 'check games result');// 'progress' ==> 'completed'
    agenda.start();
});

process.on('SIGTERM', graceful);
process.on('SIGINT', graceful);

//Middleware, param for summoner_id
router.param('summoner_id', function(req, res, next, id) {
    var query = Summoners.findOne({
        'summoner_id': id
    });

    query.exec(function(err, summoner) {
        if (err) {
示例#16
0
    });

    done();
  });
});

agenda.define('execute procurer', function (job, done) {
  var options = {};

  queue.enqueue('procurer_run_event', options, function (err, job) {
    if (err) {
      LOG.error(util.format('[STATUS] [Failure] [%s] Error enqueueing procurer run job', err));
      return done(err);
    }

    LOG.info('[STATUS] [OK] Procurer run job enqueued');
    return done(err, options);
  });
});

agenda.on('ready', function() {
  var harvesterJob = agenda.create('execute harvester');
  harvesterJob.repeatEvery(config.harvester.execution.rule).save();

  var procurerJob = agenda.create('execute procurer');

  procurerJob.repeatEvery(config.procurer.execution.rule).save();

  agenda.start();
});
示例#17
0
      from: '*****@*****.**', // sender address
      to: '*****@*****.**', // list of receivers
      subject: 'Hello ✔', // Subject line
      text: 'Hello world 🐴', // plaintext body
      html: '<b>Hello world 🐴</b>' // html body
  };

  // send mail with defined transport object
  transporter.sendMail(mailOptions, function(error, response){
      if(error){
          console.log(error);
      }else{
          console.log("Message sent: " + response.message);
      }
        done();
  });
});
/*agenda.on('ready', function() {
  agenda.schedule('in 2 minutes', 'send email report', {to: '*****@*****.**'});
  //agenda.start();
});
*/
agenda.on('start', function(job) {
  console.log("Job %s starting", job.attrs.name);
});

agenda.on('complete', function(job) {
  console.log("Job %s finished", job.attrs.name);
});
module.exports=agenda;
示例#18
0
const Agenda = require('agenda'); 

const mongoConnectionString = process.env.MONGODB_URI;

var agenda = new Agenda({db: {address: mongoConnectionString, collection: 'mapJobs', options: {server:{auto_reconnect:true}}}});

agenda.on('ready', function() {
  // getTravels();
  console.log('Agenda is connected to Heroku mongodb.');
  agenda.start();
});

agenda.on('error', function(err) {
  console.warn('Error in Agenda connecting to Heroku mongodb:\n', err);
});

agenda.on('fail', function(err, job) {
  console.log("Job failed with error: %s", err.message);
});

agenda.on('success', function(job) {
  console.log('Successfully completed job:', job.attrs);
})

module.exports = agenda;





// const getTravels = function() {
示例#19
0
  relaySwitch(data.pins, 0, done);
});

agenda.define('pwm switch on', function(job, done) {
  var data = job.attrs.data;
  pwmSwitch(data.pins, 1023, done);
});

agenda.define('pwm switch off', function(job, done) {
  var data = job.attrs.data;
  pwmSwitch(data.pins, 0, done);
});

agenda.on('ready', function() {
  // initial new jobs saved into db
  /*
  agenda.every('0-4,10-14,20-24,30-34,40-44,50-54 * * * *', 'relay switch on', { pins: relayPins, status: true });
  agenda.every('5-9,15-19,25-29,35-39,45-49,55-59 * * * *', 'relay switch off', { pins: relayPins, status: false });
  
  agenda.every('* 8-20 * * *', 'pwm switch on', { pins: pwmPins });
  agenda.every('* 0-7,21-23 * * *', 'pwm switch off', { pins: pwmPins });
  */
  agenda.start();
});

agenda.on('start', function(job) {
  console.log("Job %s starting", job.attrs.name);
});

console.log("Fully started Local worker");