diff --git a/src/modules/api/submodules/qminingapi.ts b/src/modules/api/submodules/qminingapi.ts index 5b954a4..273f98c 100644 --- a/src/modules/api/submodules/qminingapi.ts +++ b/src/modules/api/submodules/qminingapi.ts @@ -1,4 +1,5 @@ import fs from 'fs' +import { fork } from 'child_process' import logger from '../../../utils/logger' import utils from '../../../utils/utils' @@ -600,7 +601,7 @@ function setup(data: SubmoduleData): any { if (!req.body.questions) { res.json({ - message: `ask something! { question:'' ,subject:'', location:'' }`, + message: `ask something! { questions:'' ,subject:'', location:'' }`, result: [], recievedData: JSON.stringify(req.body), success: false, @@ -1006,6 +1007,57 @@ function setup(data: SubmoduleData): any { }) }) + let questionCleaner = null + app.get('/clearQuestions', (req: Request, res) => { + // TODO: dont allow multiple instances + // TODO: get status of it cleaning + logger.LogReq(req) + const user: User = req.session.user + const status: any = req.query.status + + if (status) { + if (!questionCleaner) { + res.json({ + msg: 'question cleaner not running', + success: false, + }) + return + } + questionCleaner.once('message', function (response) { + res.json({ + msg: response, + success: true, + }) + }) + + questionCleaner.send({ data: 'asd' }) + return + } + + if (questionCleaner) { + res.json({ + msg: 'question cleaner already running', + success: false, + }) + return + } + + questionCleaner = fork( + `${process.cwd()}/src/standaloneUtils/rmDuplicates.js`, + ['-s', `${process.cwd()}/${questionDbs[0].path}`] + ) + questionCleaner.on('exit', function (code) { + console.log('EXIT', code) + questionCleaner = null + }) + + res.json({ + user: user, + success: true, + msg: 'OK', + }) + }) + return { dailyAction: () => { backupData(questionDbs) diff --git a/src/standaloneUtils/rmDuplicates.js b/src/standaloneUtils/rmDuplicates.js index e09cdec..2526bde 100644 --- a/src/standaloneUtils/rmDuplicates.js +++ b/src/standaloneUtils/rmDuplicates.js @@ -41,7 +41,30 @@ const globalLog = './duplicateRemovingLog/log' utils.CreatePath(logPath) utils.WriteFile('', globalLog) -const params = process.argv.splice(2) +// ---------------------------------------------- +let currentMaxIndex = -1 +let currentIndex = -1 +process.on('message', function () { + process.send({ + currentMaxIndex: currentMaxIndex, + currentIndex: currentIndex, + }) +}) +// ---------------------------------------------- + +let params = process.argv.splice(2) +let silenced = false +if (params.includes('-s')) { + silenced = true +} +params = params.filter((x) => { + return !x.startsWith('-') +}) +console.log(params) +if (params.length === 0) { + console.log('At least 1 parameter required (path to DB)') + process.exit(1) +} const pathA = params[0] const pathB = params[1] @@ -268,6 +291,7 @@ function difference({ dbA, dbB }) { iterateSubjects(dbA, () => { dbLength++ }) + currentMaxIndex = dbLength const getResultDbLength = () => { let resultDbLength = 0 @@ -303,6 +327,7 @@ function difference({ dbA, dbB }) { printProgressBar(processedQuestions, dbLength) processedQuestions++ + currentIndex = processedQuestions const res = hasRequiredPercent(searchRes, minpercent) @@ -408,6 +433,7 @@ function hr() { function log(text) { utils.AppendToFile(text, globalLog) + if (silenced) return if (process.stdout.isTTY) { process.stdout.clearLine() process.stdout.cursorTo(0) @@ -431,7 +457,7 @@ function writeInSameLine(text, returnToLineStart) { } function printProgressBar(current, total) { - if (!process.stdout.isTTY) { + if (!process.stdout.isTTY || silenced) { return } const width = process.stdout.columns - 30 @@ -462,3 +488,5 @@ function printProgressBar(current, total) { function C(color) { return logger.C(color) } + +process.exit()