const cmn = require("../$common.js"); const fs = require("fs"); const child_process = require("child_process"); const persist = require("node-persist"); const mkdirp = require("mkdirp"); const FIRST_FETCH_DELAY = 10 * 60 * 1000; // 10 seconds const INTERVAL = 3 * 24 * 3600 * 1000; // 3 days // const FIRST_FETCH_DELAY = 2 * 1000; // const INTERVAL = 20 * 1000; let moddir = null; mkdirp.sync(cmn.persistdir + "/vacancies"); const DB = persist.create({ dir: cmn.persistdir + "/vacancies", continuous: false, interval: false, }); DB.initSync(); function sendNotification(text, cb) { cmn.statusbot.send("vacancies", text, cb); // console.log("--> " + text); // cb(200); } function refreshSite(name) { child_process.execFile(moddir + "/getters/" + name + ".sh", (err, stdout, _stderr) => { if (err != null) { sendNotification("Error getting <" + name + ">: " + err, () => {}); return; } const lines = stdout.split("\n").filter(s => s.length > 0); let news = []; let prev = DB.getItemSync(name); if (prev != null) { prev = new Set(prev); for (let line of lines) { if (!prev.has(line)) news.push(line); } } else { news = lines; } if (news.length == 0) { console.log("[vacancies] No news for <" + name + ">"); return; } console.log("[vacancies] " + news.length + " news for <" + name + ">"); const message = news.map(s => "<" + name + "> " + s).join("\n"); sendNotification(message, status => { if (status == 200) { DB.setItemSync(name, lines); } else { console.log("[vacancies] Failed sending: [[[" + message + "]]]"); } }); }); } function refreshAll() { console.log("[vacancies] Refreshing"); let i = 0; for (let name of fs.readdirSync(moddir + "/getters")) { if (!name.endsWith(".sh")) continue; setTimeout(() => refreshSite(name.slice(0, -3)), 2000 * i); i++; } } module.exports = (app, io, _moddir) => { moddir = _moddir; setTimeout(() => { refreshAll(); setInterval(() => { refreshAll(); }, INTERVAL); }, FIRST_FETCH_DELAY); // wait a while before the first fetch };