From 1bb7acb8e70ecf51e1c373fe1a621961393a55c6 Mon Sep 17 00:00:00 2001 From: Jan-Niclas Struewer <j.n.struewer@gmail.com> Date: Tue, 2 May 2023 09:25:36 +0200 Subject: [PATCH] added test endpoint. added external process task --- .../dataprovider/gitlab/GitlabController.kt | 4 ++-- .../dataprovider/taskManager/TaskManager.kt | 11 +++++----- .../taskManager/tasks/ProcessTask.kt | 20 ++++++++++++------- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabController.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabController.kt index e9429a96..13d95ee4 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabController.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabController.kt @@ -2,7 +2,7 @@ package de.fraunhofer.iem.dataprovider.gitlab import de.fraunhofer.iem.dataprovider.logger.getLogger import de.fraunhofer.iem.dataprovider.taskManager.TaskManager -import de.fraunhofer.iem.dataprovider.taskManager.tasks.ProcessTask +import de.fraunhofer.iem.dataprovider.taskManager.tasks.JavaTask import de.fraunhofer.iem.dataprovider.taskManager.tasks.TaskType import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PostMapping @@ -51,6 +51,6 @@ class GitlabController(private val gitlabService: GitlabService, private val tas @GetMapping("/test") suspend fun test() { - taskManager.addTask(ProcessTask(TaskType.REPO_CHANGED)) + taskManager.addTask(JavaTask(TaskType.REPO_CHANGED, "-version", responseChannel = taskManager::addTask )) } } \ No newline at end of file diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt index 160edb33..9ffefe4d 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt @@ -36,15 +36,16 @@ class TaskManager: IWorker { private fun CoroutineScope.taskActor() = actor<ITask> { for (task in channel) { + logger.info("[${Thread.currentThread().name}] add task called in Task Manager $task") // For test purposes we have the Done task, which prints a control // message printed in the task manager. if (task.type == TaskType.DONE) { task.execute() - } - logger.info("[${Thread.currentThread().name}] add task called in Task Manager $task") - when(task) { - is GetGitlabProjectTask -> ioWorker.addTask(task) - else -> worker.addTask(task) + } else { + when (task) { + is GetGitlabProjectTask -> ioWorker.addTask(task) + else -> worker.addTask(task) + } } logger.info("[${Thread.currentThread().name}] add task finished in Task Manager $task") } diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/ProcessTask.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/ProcessTask.kt index 220f319c..780ccf2c 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/ProcessTask.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/ProcessTask.kt @@ -1,31 +1,37 @@ package de.fraunhofer.iem.dataprovider.taskManager.tasks +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + sealed class ProcessTask(protected open vararg val flags: String): Task() { protected abstract val execPath: String - + private val mainScope = CoroutineScope(Dispatchers.Default) override suspend fun execute() { val p = ProcessBuilder(execPath, *flags) .start() p.onExit().thenApply { p1 -> - handleProcessReturn(p1) + mainScope.launch { + handleProcessReturn(p1) + } } } - abstract fun handleProcessReturn(p: Process) + abstract suspend fun handleProcessReturn(p: Process) } class JavaTask( override val type: TaskType, - override val execPath: String, override vararg val flags: String, - val addTask: (task: Task) -> Unit + private val responseChannel: suspend (task: ITask) -> Unit ): ProcessTask() { - override fun handleProcessReturn(p: Process) { - addTask(DoneTask("Done with external process. Exit value ${p.exitValue()}")) + override val execPath: String = "java" + override suspend fun handleProcessReturn(p: Process) { + responseChannel(DoneTask("Done with external process. Exit value ${p.exitValue()}")) } } \ No newline at end of file -- GitLab