UNPKG

nf-workflow-ui-5

Version:
338 lines (294 loc) 9.36 kB
import { Router } from 'express'; import http from '../core/HttpClientServerSide'; import moment from 'moment'; import filter from 'lodash/fp/filter'; import forEach from 'lodash/fp/forEach'; import map from 'lodash/fp/map'; import transform from 'lodash/transform'; import identity from 'lodash/identity'; const router = new Router(); const baseURL = process.env.WF_SERVER; const baseURL2 = baseURL + 'workflow/'; const baseURLMeta = baseURL + 'metadata/'; const baseURLTask = baseURL + 'tasks/'; router.get('/', async (req, res, next) => { try { let freeText = []; if (req.query.freeText != '') { freeText.push(req.query.freeText); } else { freeText.push('*'); } let h = '-1'; if (req.query.h != 'undefined' && req.query.h != '') { h = req.query.h; } if (h != '-1') { freeText.push('startTime:[now-' + h + 'h TO now]'); } let start = 0; if (!isNaN(req.query.start)) { start = req.query.start; } let query = req.query.q; const url = baseURL2 + 'search?size=100&sort=startTime:DESC&freeText=' + encodeURIComponent(freeText.join(' AND ')) + '&start=' + start + '&query=' + encodeURIComponent(query); const result = await http.get(url, req.token); const hits = result.results; res.status(200).send({ result: { hits: hits, totalHits: result.totalHits } }); } catch (err) { next(err); } }); const LOG_DATE_FORMAT = 'MM/DD/YY, HH:mm:ss:SSS'; router.get('/search-by-task/:taskId', async (req, res, next) => { try { let freeText = []; if (req.query.freeText != '') { freeText.push(req.params.taskId); } else { freeText.push('*'); } let h = '-1'; if (req.query.h !== undefined && req.query.h != 'undefined' && req.query.h != '') { h = req.query.h; } if (h != '-1') { freeText.push('startTime:[now-' + h + 'h TO now]'); } let start = 0; if (!isNaN(req.query.start)) { start = req.query.start; } let query = req.query.q || ''; const url = baseURL2 + 'search-by-tasks?size=100&sort=startTime:DESC&freeText=' + encodeURIComponent(freeText.join(' AND ')) + '&start=' + start; const result = await http.get(url, req.token); const hits = result.results; res.status(200).send({ result: { hits: hits, totalHits: result.totalHits } }); } catch (err) { next(err); } }); router.get('/id/:workflowId', async (req, res, next) => { try { const result = await http.get(baseURL2 + req.params.workflowId + '?includeTasks=true', req.token); let meta = result.workflowDefinition; if (!meta) { meta = await http.get( baseURLMeta + 'workflow/' + result.workflowType + '?version=' + result.version, req.token ); } const subs = filter(identity)( map(task => { if (task.taskType === 'SUB_WORKFLOW') { const subWorkflowId = task.inputData && task.inputData.subWorkflowId; if (subWorkflowId != null) { return { name: task.inputData.subWorkflowName, version: task.inputData.subWorkflowVersion, referenceTaskName: task.referenceTaskName, subWorkflowId: subWorkflowId }; } } })(result.tasks || []) ); (result.tasks || []).forEach(task => { if (task.taskType === 'SUB_WORKFLOW') { const subWorkflowId = task.inputData && task.inputData.subWorkflowId; if (subWorkflowId != null) { subs.push({ name: task.inputData.subWorkflowName, version: task.inputData.subWorkflowVersion, referenceTaskName: task.referenceTaskName, subWorkflowId: subWorkflowId }); } } }); const logs = map(task => Promise.all([task, http.get(baseURLTask + task.taskId + '/log')]))(result.tasks); await Promise.all(logs).then(result => { forEach(([task, logs]) => { if (logs) { task.logs = map(({ createdTime, log }) => `${moment(createdTime).format(LOG_DATE_FORMAT)} : ${log}`)(logs); } })(result); }); const promises = map(({ name, version, subWorkflowId, referenceTaskName }) => Promise.all([ referenceTaskName, http.get(baseURLMeta + 'workflow/' + name + '?version=' + version), http.get(baseURL2 + subWorkflowId + '?includeTasks=true') ]) )(subs); const subworkflows = await Promise.all(promises).then(result => { return transform( result, (result, [key, meta, wfe]) => { result[key] = { meta, wfe }; }, {} ); }); res.status(200).send({ result, meta, subworkflows: subworkflows }); } catch (err) { next(err); } }); router.put('/bulk/pause', async (req, res, next) => { try { const result = await http.put(baseURL2 + "bulk/pause", req.body, req.token); res.status(200).send(result); } catch (err) { next(err); } }); router.put('/bulk/resume', async (req, res, next) => { try { const result = await http.put(baseURL2 + "bulk/resume", req.body, req.token); res.status(200).send(result); } catch (err) { next(err); } }) router.post('/bulk/retry', async (req, res, next) => { try { const result = await http.post(baseURL2 + "bulk/retry", req.body, req.token); res.status(200).send(result); } catch (err) { next(err); } }); router.post('/bulk/restart', async (req, res, next) => { try { const result = await http.post(baseURL2 + "bulk/restart", req.body, req.token); res.status(200).send(result); } catch (err) { next(err); } }) router.post('/bulk/restart_with_latest_definition', async (req, res, next) => { try { const result = await http.post(baseURL2 + "bulk/restart?useLatestDefinition=true", req.body, req.token); res.status(200).send(result); } catch (err) { next(err); } }) router.post('/bulk/restart_with_current_definition', async (req, res, next) => { try { const result = await http.post(baseURL2 + "bulk/restart", req.body, req.token); res.status(200).send(result); } catch (err) { next(err); } }) router.delete('/bulk/terminate', async (req, res, next) => { try { const result = await http.delete(baseURL2 + "bulk/terminate", req.body, req.token); res.status(200).send(result); } catch (err) { next(err); } }); router.delete('/terminate/:workflowId', async (req, res, next) => { try { const result = await http.delete(baseURL2 + req.params.workflowId, {}, req.token); res.status(200).send({ result: req.params.workflowId }); } catch (err) { next(err); } }); router.post('/restart/:workflowId', async (req, res, next) => { try { const result = await http.post(baseURL2 + req.params.workflowId + '/restart?useLatestDefinitions=' + (req.query && req.query.useLatestDefinitions || false), {}, req.token); res.status(200).send({ result: req.params.workflowId }); } catch (err) { next(err); } }); router.post('/retry/:workflowId', async (req, res, next) => { try { const result = await http.post(baseURL2 + req.params.workflowId + '/retry', {}, req.token); res.status(200).send({ result: req.params.workflowId }); } catch (err) { next(err); } }); router.post('/pause/:workflowId', async (req, res, next) => { try { const result = await http.put(baseURL2 + req.params.workflowId + '/pause'); res.status(200).send({result: req.params.workflowId }); } catch (err) { next(err); } }); router.post('/resume/:workflowId', async (req, res, next) => { try { const result = await http.put(baseURL2 + req.params.workflowId + '/resume', {}, req.token); res.status(200).send({ result: req.params.workflowId }); } catch (err) { next(err); } }); //metadata router.get('/metadata/workflow/:name/:version', async (req, res, next) => { try { const result = await http.get( baseURLMeta + 'workflow/' + req.params.name + '?version=' + req.params.version, req.token ); res.status(200).send({ result }); } catch (err) { next(err); } }); router.get('/metadata/workflow', async (req, res, next) => { try { const result = await http.get(baseURLMeta + 'workflow', req.token); res.status(200).send({ result }); } catch (err) { next(err); } }); router.get('/metadata/taskdef', async (req, res, next) => { try { const result = await http.get(baseURLMeta + 'taskdefs', req.token); res.status(200).send({ result }); } catch (err) { next(err); } }); router.get('/task/log/:taskId', async (req, res, next) => { try { const logs = await http.get(baseURLTask + req.params.taskId + '/log', req.token); res.status(200).send({ logs }); } catch (err) { next(err); } }); router.get('/queue/data', async (req, res, next) => { try { const sizes = await http.get(baseURLTask + 'queue/all', req.token); const polldata = await http.get(baseURLTask + 'queue/polldata/all', req.token); polldata.forEach(pd => { var qname = pd.queueName; if (pd.domain != null) { qname = pd.domain + ':' + qname; } pd.qsize = sizes[qname]; }); res.status(200).send({ polldata }); } catch (err) { next(err); } }); module.exports = router;