Selaa lähdekoodia

Added CRON scheduler for regular annoyance

Fela Maslen 7 vuotta sitten
vanhempi
commit
1438d743bd
6 muutettua tiedostoa jossa 55 lisäystä ja 0 poistoa
  1. 1 0
      .env.example
  2. 19 0
      package-lock.json
  3. 1 0
      package.json
  4. 1 0
      src/server/config.js
  5. 3 0
      src/server/index.js
  6. 30 0
      src/server/modules/cron.js

+ 1 - 0
.env.example

@@ -7,3 +7,4 @@ WHOSOFF_API_KEY=whosoffapikey
 PASSWORD=yoursecretpassword
 MONGO_URL=mongodb://localhost:27017
 MONGO_DB_NAME=gurubot2
+SCHEDULE_ANNOY=10 1 * * *,30 14 * * */2

+ 19 - 0
package-lock.json

@@ -7042,6 +7042,15 @@
         "lower-case": "^1.1.1"
       }
     },
+    "node-cron": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-2.0.3.tgz",
+      "integrity": "sha512-eJI+QitXlwcgiZwNNSRbqsjeZMp5shyajMR81RZCqeW0ZDEj4zU9tpd4nTh/1JsBiKbF8d08FCewiipDmVIYjg==",
+      "requires": {
+        "opencollective-postinstall": "^2.0.0",
+        "tz-offset": "0.0.1"
+      }
+    },
     "node-gyp": {
       "version": "3.8.0",
       "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
@@ -7493,6 +7502,11 @@
         "mimic-fn": "^1.0.0"
       }
     },
+    "opencollective-postinstall": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.1.tgz",
+      "integrity": "sha512-saQQ9hjLwu/oS0492eyYotoh+bra1819cfAT5rjY/e4REWwuc8IgZ844Oo44SiftWcJuBiqp0SA0BFVbmLX0IQ=="
+    },
     "optionator": {
       "version": "0.8.2",
       "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
@@ -11109,6 +11123,11 @@
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
       "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
     },
+    "tz-offset": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/tz-offset/-/tz-offset-0.0.1.tgz",
+      "integrity": "sha512-kMBmblijHJXyOpKzgDhKx9INYU4u4E1RPMB0HqmKSgWG8vEcf3exEfLh4FFfzd3xdQOw9EuIy/cP0akY6rHopQ=="
+    },
     "uglify-js": {
       "version": "3.4.9",
       "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",

+ 1 - 0
package.json

@@ -82,6 +82,7 @@
     "joi": "^14.3.1",
     "moment": "^2.23.0",
     "mongodb": "^3.1.10",
+    "node-cron": "^2.0.3",
     "react": "^16.7.0",
     "react-dom": "^16.7.0",
     "react-redux": "^6.0.0",

+ 1 - 0
src/server/config.js

@@ -9,6 +9,7 @@ if (__DEV__) {
 module.exports = () => ({
     __PROD__,
     __DEV__,
+    schedule: process.env.SCHEDULE_ANNOY || null,
     annoyMessage: '%s: please complete your time sheets for the previous week.',
     completeMessage: 'Everybody has done their time sheets. *High five*',
     slack: {

+ 3 - 0
src/server/index.js

@@ -10,6 +10,7 @@ const path = require('path');
 const getConfig = require('server/config');
 const { getLogger } = require('server/modules/logger');
 const { getDBConnection } = require('server/modules/db');
+const { setupCron } = require('server/modules/cron');
 const { apiRoutes } = require('server/routes');
 
 const webpackConfig = require('../../webpack.config');
@@ -72,6 +73,8 @@ async function run() {
 
         setupMiddleware(config, app);
 
+        setupCron(config, db, logger);
+
         app.use('/api1', apiRoutes(config, db, logger));
 
         setupDevServer(config, db, logger, app);

+ 30 - 0
src/server/modules/cron.js

@@ -0,0 +1,30 @@
+const cron = require('node-cron');
+
+const { annoyUsers } = require('server/routes/annoy');
+
+function setupCron(config, db, logger) {
+    if (!config.schedule) {
+        logger.warn('Not setting up schedule as it is not defined. Please define the SCHEDULE_ANNOY env variable as a cron schedule, e.g. SCHEDULE_ANNOY=10 1 * * *');
+
+        return;
+    }
+
+    const task = async () => {
+        logger.verbose('Running annoy on schedule!');
+
+        await annoyUsers(config, db, logger);
+    };
+
+    const schedules = config.schedule.split(',');
+
+    schedules.forEach(schedule => {
+        logger.verbose('Scheduling annoy at', schedule);
+
+        cron.schedule(schedule, task);
+    });
+}
+
+module.exports = {
+    setupCron
+};
+