summaryrefslogtreecommitdiff
path: root/modules/vacancies/vacancies.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/vacancies/vacancies.js')
-rw-r--r--modules/vacancies/vacancies.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/modules/vacancies/vacancies.js b/modules/vacancies/vacancies.js
new file mode 100644
index 0000000..be3c4b4
--- /dev/null
+++ b/modules/vacancies/vacancies.js
@@ -0,0 +1,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
+};