0

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

Supporterino
  • 181
  • 9

0 Answers0