diff options
| author | Zephyrrus <[email protected]> | 2021-01-05 22:58:41 +0200 |
|---|---|---|
| committer | Zephyrrus <[email protected]> | 2021-01-07 10:47:16 +0200 |
| commit | f151a8ac3a8f944829e55fc007823b167f1a2597 (patch) | |
| tree | a6611e4ef497ee560812105c15d377364bddf1d6 /src/api/structures/Server.js | |
| parent | feat: Add experimental stats endpoint (no cache system yet) (diff) | |
| download | host.fuwn.me-f151a8ac3a8f944829e55fc007823b167f1a2597.tar.xz host.fuwn.me-f151a8ac3a8f944829e55fc007823b167f1a2597.zip | |
chore: Move statistics related functions to it's own file
fix: Extract database constructor to a separate file to ensure we only create one knex instance/db
feat: Add cron for saving the stats to the database every hour
feat: Get cached stats from database (if a stat is not found in the db, generate it)
Diffstat (limited to 'src/api/structures/Server.js')
| -rw-r--r-- | src/api/structures/Server.js | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/api/structures/Server.js b/src/api/structures/Server.js index 0dec72a..cb97dd1 100644 --- a/src/api/structures/Server.js +++ b/src/api/structures/Server.js @@ -14,8 +14,11 @@ const jetpack = require('fs-jetpack'); const path = require('path'); const morgan = require('morgan'); const rfs = require('rotating-file-stream'); +const CronJob = require('cron').CronJob; const log = require('../utils/Log'); +const Util = require('../utils/Util'); + // eslint-disable-next-line no-unused-vars const rateLimiter = new RateLimit({ windowMs: parseInt(process.env.RATE_LIMIT_WINDOW, 10), @@ -55,6 +58,9 @@ class Server { // Serve the uploads this.server.use(express.static(path.join(__dirname, '../../../uploads'))); this.routesFolder = path.join(__dirname, '../routes'); + + // Save the cron job instances in case we want to stop them later + this.jobs = {}; } registerAllTheRoutes() { @@ -95,6 +101,11 @@ class Server { }); } + createJobs() { + // TODO: move into the database config. (we can just show the crontab line for start, later on we can add dropdowns and stuff) + this.jobs.stats = new CronJob('* 0 * * * *', Util.saveStatsToDb, null, true); + } + start() { jetpack.dir('uploads/chunks'); jetpack.dir('uploads/thumbs/square'); @@ -105,6 +116,8 @@ class Server { log.success(`Backend ready and listening on port ${this.port}`); }); server.setTimeout(600000); + + this.createJobs(); } } |