5 changed files with 90 additions and 18 deletions
			
			
		| @ -1,24 +1,40 @@ | |||||
| const path = require("path"); | const { log, exit, connectDb } = require("./util-worker"); | ||||
| const { R } = require("redbean-node"); | const { R } = require("redbean-node"); | ||||
| const Database = require("../database"); | const { setSetting, setting } = require("../util-server"); | ||||
| 
 | 
 | ||||
| const dbPath = path.join( | const DEFAULT_KEEP_PERIOD = 30; | ||||
|     process.env.DATA_DIR || |  | ||||
|         require("worker_threads").workerData["data-dir"] || |  | ||||
|         "./data/" |  | ||||
| ); |  | ||||
| 
 |  | ||||
| Database.init({ |  | ||||
|     "data-dir": dbPath, |  | ||||
| }); |  | ||||
| 
 | 
 | ||||
| (async () => { | (async () => { | ||||
|     await Database.connect(); |     await connectDb(); | ||||
|  | 
 | ||||
|  |     let period = await setting("keepDataPeriodDays"); | ||||
|  | 
 | ||||
|  |     // Set Default Period
 | ||||
|  |     if (period == null) { | ||||
|  |         await setSetting("keepDataPeriodDays", DEFAULT_KEEP_PERIOD); | ||||
|  |         period = DEFAULT_KEEP_PERIOD; | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     // Try parse setting
 | ||||
|  |     let parsedPeriod; | ||||
|  |     try { | ||||
|  |         parsedPeriod = parseInt(period); | ||||
|  |     } catch (_) { | ||||
|  |         log("Failed to parse setting, resetting to default.."); | ||||
|  |         await setSetting("keepDataPeriodDays", DEFAULT_KEEP_PERIOD); | ||||
|  |         parsedPeriod = DEFAULT_KEEP_PERIOD; | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     log(`Clearing Data older than ${parsedPeriod} days...`); | ||||
| 
 | 
 | ||||
|     console.log(await R.getAll("PRAGMA journal_mode")); |     try { | ||||
|     console.log( |         await R.exec( | ||||
|         await R.getAll("SELECT * from setting WHERE key = 'database_version'") |             "DELETE FROM heartbeat WHERE time < DATETIME('now', '-' || ? || ' days') ", | ||||
|     ); |             [parsedPeriod] | ||||
|  |         ); | ||||
|  |     } catch (e) { | ||||
|  |         log(`Failed to clear old data: ${e.message}`); | ||||
|  |     } | ||||
| 
 | 
 | ||||
|     process.exit(0); |     exit(); | ||||
| })(); | })(); | ||||
|  | |||||
| @ -0,0 +1,39 @@ | |||||
|  | const { parentPort, workerData } = require("worker_threads"); | ||||
|  | const Database = require("../database"); | ||||
|  | const path = require("path"); | ||||
|  | 
 | ||||
|  | const log = function (any) { | ||||
|  |     if (parentPort) { | ||||
|  |         parentPort.postMessage(any); | ||||
|  |     } | ||||
|  | }; | ||||
|  | 
 | ||||
|  | const exit = function (error) { | ||||
|  |     if (error && error != 0) { | ||||
|  |         process.exit(error); | ||||
|  |     } else { | ||||
|  |         if (parentPort) { | ||||
|  |             parentPort.postMessage("done"); | ||||
|  |         } else { | ||||
|  |             process.exit(0); | ||||
|  |         } | ||||
|  |     } | ||||
|  | }; | ||||
|  | 
 | ||||
|  | const connectDb = async function () { | ||||
|  |     const dbPath = path.join( | ||||
|  |         process.env.DATA_DIR || workerData["data-dir"] || "./data/" | ||||
|  |     ); | ||||
|  | 
 | ||||
|  |     Database.init({ | ||||
|  |         "data-dir": dbPath, | ||||
|  |     }); | ||||
|  | 
 | ||||
|  |     await Database.connect(); | ||||
|  | }; | ||||
|  | 
 | ||||
|  | module.exports = { | ||||
|  |     log, | ||||
|  |     exit, | ||||
|  |     connectDb, | ||||
|  | }; | ||||
					Loading…
					
					
				
		Reference in new issue