1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
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
};
|