summaryrefslogtreecommitdiff
path: root/modules/vacancies/vacancies.js
blob: be3c4b4c0673cc788b1e5ea7dffbfedc1b05c542 (plain)
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
};