diff options
Diffstat (limited to 'app/relay/runner.js')
| -rw-r--r-- | app/relay/runner.js | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/app/relay/runner.js b/app/relay/runner.js new file mode 100644 index 0000000..caa2ded --- /dev/null +++ b/app/relay/runner.js @@ -0,0 +1,68 @@ +// monitors which process is currently running +// kills it if need be.... murder + +import { spawn } from 'child_process' +import interpreters from './interpreters' +import modules from './modules' +import { kill } from 'tree-kill' + +var state = { + current_cpu_task: null, + current_gpu_task: null, +} + +export function get_current_cpu_task(){ + return state.current_cpu_task +} + +export function get_current_gpu_task(){ + return state.current_gpu_task +} + +export function build_params(module, task) { + const activity = module.activities[task.activity] + const interpreter = interpreters[activity.type] + if (typeof activity.params === 'function') { + params = activity.params(task) + } + else { + const opt = JSON.parse(task.opt) + const opt_params = Object.keys(opt).map(key => { + const flag = '--' + key.replace(/-/g, '_') + const value = opt[key] + if (value === 'true') { + return [flag] + } + return [flag, value] + }).reduce((acc, cur) => acc.concat(cur), []) + params = [ activity.script ].concat(activity.params || []).concat(opt_params) + } + return { + activity, + params + } +} + +export function run_task(module_name, task){ + const module = modules['module_name'] + if (! module) throw new Error("No such module") + const { activity, interpreter, params } = build_params(module, task) + console.log('running task', activity.name) + console.log(activity.interpreter, params) + const subprocess = spawn(activity.interpreter, params) + if (activity.gpu) { + state.current_gpu_task = subprocess + } else { + state.current_cpu_task = subprocess + } + subprocess.on('error', (err) => { + console.log('process error', subprocess.pid, err) + }) + subprocess.on('close', () => { + console.log('process ended', subprocess.pid) + }) +} + +export function kill_task(subprocess){ + kill(subprocess.pid) +}
\ No newline at end of file |
