1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- const BaseController = require('./BaseController');
- const WorkerState = require('../core/WorkerState');//singleton
- const utils = require('../core/utils');
- class WorkerController extends BaseController {
- constructor(config) {
- super(config);
- this.workerState = new WorkerState();
- }
- async getState(req, res) {
- const request = req.body;
- let error = '';
- try {
- if (!request.workerId)
- throw new Error(`key 'workerId' is wrong`);
- const state = this.workerState.getState(request.workerId);
- return (state ? state : {});
- } catch (e) {
- error = e.message;
- }
- //bad request
- res.status(400).send({error});
- return false;
- }
- async getStateFinish(req, res) {
- const request = req.body;
- let error = '';
- try {
- if (!request.workerId)
- throw new Error(`key 'workerId' is wrong`);
- res.writeHead(200, {
- 'Content-Type': 'text/json; charset=utf-8',
- });
- const splitter = '-- aod2t5hDXU32bUFyqlFE next status --';
- const refreshPause = 300;
- let i = 0;
- let prevProgress = -1;
- let prevState = '';
- let state;
- while (1) {// eslint-disable-line no-constant-condition
- state = this.workerState.getState(request.workerId);
- if (!state) break;
- res.write(splitter + JSON.stringify(state));
- res.flush();
- if (state.state != 'finish')
- await utils.sleep(refreshPause);
- else
- break;
- i++;
- if (i > 2*60*1000/refreshPause) {//2 мин ждем телодвижений воркера
- res.write(splitter + JSON.stringify({state: 'error', error: 'Слишком долгое время ожидания'}));
- break;
- }
- i = (prevProgress != state.progress || prevState != state.state ? 1 : i);
- prevProgress = state.progress;
- prevState = state.state;
- }
-
- if (!state) {
- res.write(splitter + JSON.stringify({}));
- }
- res.end();
- return false;
- } catch (e) {
- error = e.message;
- }
- //bad request
- res.status(400).send({error});
- return false;
- }
- }
- module.exports = WorkerController;
|