so i just learned how to work with node.js and agenda as a scheduler for my backend i am developing. I now have a little problem, my jobs are normally taking a bit of time to complete but agenda gives me instantly a completed one the job once started and another thing is how to i get the errors up to agenda to handle them there.
var reader = require('rss-to-json');
var mongo = require('mongodb').MongoClient;
var feedUrl = "Some URL to an RSS feed";
var url_DB = "mongodb://localhost:27017/";
var db_env = "Dev";
const loadFeed = url => {
reader.load(url, (err, res) => {
if (err) throw new Error(err);
updateEvents(res);
});
};
const updateEvents = (data) => {
mongo.connect(url_DB, { useNewUrlParser: true }, (err, db) => {
if (err) throw new Error(err);
var dbo = db.db(db_env);
var counter = 0;
data.items.forEach(e => {
var query = { title: e.title };
dbo.collection("feeds").findOne(query, (err, res) => {
if (err) throw new Error(err);
counter++;
if (res == null) {
insertElement(e, dbo);
} else if (res.description != e.description) {
updateElement(e, dbo);
}
if (counter >= data.items.length) db.close();
});
});
});
};
const updateElement = (data, dbo) => {
var query = { title: data.title };
dbo.collection("feeds").updateOne(query, { $set: data }, (err, res) => {
if (err) throw new Error(err);
// console.log(data.title + " updated");
});
};
const insertElement = (data, dbo) => {
dbo.collection("feeds").insertOne(data, (err, res) => {
if (err) throw new Error(err);
// console.log(data.title + " inserted");
});
};
exports.run = () => {
loadFeed(feedUrl);
};
This is the code to one of my jobs.
Would appreciate a little help who to get agenda to recognize the runtime of the script and how to pass the errors up.
The agenda code
var agenda = require('agenda');
var events = require('../datacollectors/events/index');
var plan = require('../datacollectors/plan/index');
var lectures = require('../datacollectors/lectures/index');
var feed = require('../datacollectors/newsfeed/index');
var course = require('../datacollectors/courses/index');
var url_DB = "mongodb://localhost:27017/agenda";
var agent = new agenda({db: {address: url_DB}});
//other jobs
agent.define('Update Feed', async (job, done) => {
try {
await feed.main();
done();
} catch (err) {
done(err);
}
});
exports.get = () => {
return agent;
};
exports.run = async () => {
await agent.start();
await agent.every('15 minutes', ['Update StuV-Events', 'Update Feed']);
await agent.every('1 hour', 'Update Vorlesungen');
await agent.every('1 day', ['Update Mensaplan', 'Update Kurse']);
};
Greetings,
Supporterino