90 lines
2.5 KiB
JavaScript
90 lines
2.5 KiB
JavaScript
const express = require('express')
|
|
const statusCodes = require('http-status-codes').StatusCodes
|
|
const calcQueueSvc = require('../src/services/calc-queue')
|
|
const CalcQueueExceptions = require('../src/services/calc-queue/exceptions.js')
|
|
|
|
const router = express.Router()
|
|
|
|
// Return busy/not busy flag
|
|
router.get('/busy', function(req, res) {
|
|
res.send({ busy: calcQueueSvc.isBusy() })
|
|
})
|
|
|
|
// Get the current queue of tasks
|
|
router.get('/queue', function(req, res) {
|
|
res.send({ 'queue': calcQueueSvc.getQueue() })
|
|
})
|
|
|
|
// Add a calc task to the queue
|
|
router.put('/queue/:id/:calcFn', function(req, res) {
|
|
try {
|
|
calcQueueSvc.enqueue(req.params.id, req.params.calcFn)
|
|
res.send({ success: true })
|
|
} catch(ex) {
|
|
if (ex instanceof CalcQueueExceptions.AlreadyQueued
|
|
|| ex instanceof CalcQueueExceptions.AlreadyInProgress
|
|
|| ex instanceof CalcQueueExceptions.CalculationUnknown) {
|
|
res.status(
|
|
statusCodes.BAD_REQUEST
|
|
).send(
|
|
{ success: false, error: ex.message }
|
|
)
|
|
} else {
|
|
throw ex
|
|
}
|
|
}
|
|
})
|
|
|
|
// Remove a task or collection of tasks from the queue
|
|
router.delete('/queue/:id', function(req, res) {
|
|
calcQueueSvc.dequeue(req.params.id, null)
|
|
res.send({ success: true })
|
|
})
|
|
// Remove a task from the queue
|
|
router.delete('/queue/:id/:calcFn', function(req, res) {
|
|
calcQueueSvc.dequeue(req.params.id, req.params.calcFn)
|
|
res.send({ success: true })
|
|
})
|
|
|
|
|
|
// Get the status of a task as a text string
|
|
const processStatus = function(id, calcFn) {
|
|
if (calcQueueSvc.isInProgress(id, calcFn)) {
|
|
return 'in_progress'
|
|
} else if (calcQueueSvc.isQueued(id, calcFn)) {
|
|
return 'queued'
|
|
} else if (calcQueueSvc.isFinished(id, calcFn)) {
|
|
return 'finished'
|
|
} else {
|
|
return 'not_queued'
|
|
}
|
|
}
|
|
|
|
// Get the status of the queue and all tasks
|
|
router.get('/status', function(req, res) {
|
|
res.status(statusCodes.OK).send({
|
|
'queued': calcQueueSvc.getQueue(),
|
|
'in_progress': calcQueueSvc.getInProgress(),
|
|
'finished': calcQueueSvc.getFinished()
|
|
})
|
|
})
|
|
|
|
// Get the status of all tasks with by id
|
|
router.get('/status/:id', function(req, res) {
|
|
res.status(statusCodes.OK).send({
|
|
'id': req.params.id,
|
|
'status': processStatus(req.params.id, null)
|
|
})
|
|
})
|
|
|
|
// Get the status of an individual task
|
|
router.get('/status/:id/:calcFn', function(req, res) {
|
|
res.status(statusCodes.OK).send({
|
|
'id': req.params.id,
|
|
'calcFn': req.params.calcFn,
|
|
'status': processStatus(req.params.id, req.params.calcFn)
|
|
})
|
|
})
|
|
|
|
module.exports = router
|