summaryrefslogtreecommitdiff
path: root/app/relay/runner.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/relay/runner.js')
-rw-r--r--app/relay/runner.js68
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