From c6e38d9280994f5607561a86f0f4435285f03ae7 Mon Sep 17 00:00:00 2001
From: Jan-Niclas Struewer <j.n.struewer@gmail.com>
Date: Fri, 23 Jun 2023 21:39:30 +0200
Subject: [PATCH] fixed weiredest docker script termination bug ever

---
 .../dataprovider/taskManager/TaskManager.kt   | 19 ++++++++++---------
 .../events/OrtAnalyzerDoneEvent.kt            |  2 +-
 .../tasks/tools/ort/OrtAdvisorTask.kt         | 13 ++++++-------
 .../tasks/tools/ort/OrtAnalyzerTask.kt        |  2 +-
 .../dataprovider/tool/dto/CreateToolDto.kt    | 13 +++++++++++++
 .../dataprovider/tool/service/ToolService.kt  | 10 ++++++++++
 src/main/resources/scripts/ort/ort_advisor.sh | 17 +++++++++++++++++
 .../resources/scripts/ort/ort_analyzer.sh     |  2 +-
 8 files changed, 59 insertions(+), 19 deletions(-)
 create mode 100644 src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/dto/CreateToolDto.kt
 create mode 100755 src/main/resources/scripts/ort/ort_advisor.sh

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 0e00bb46..698c7f0d 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt
@@ -16,6 +16,7 @@ import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.occmd.OccmdTask
 import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.ort.OrtAdvisorTask
 import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.ort.OrtAnalyzerTask
 import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.qodana.QodanaTask
+import de.fraunhofer.iem.dataprovider.tool.service.ToolService
 import de.fraunhofer.iem.dataprovider.toolRun.service.ToolRunService
 import jakarta.annotation.PreDestroy
 import kotlinx.coroutines.CoroutineScope
@@ -39,7 +40,7 @@ class TaskManager(
     private val repositoryService: RepositoryService,
     private val kpiService: KPIService,
     private val dependencyService: DependencyService,
-//    private val toolService: ToolService
+    private val toolService: ToolService
 ) {
 
     // The used default dispatcher is ok for CPU-bound workloads. However,
@@ -156,15 +157,15 @@ class TaskManager(
                     )
 
                     groupTaskManager.addTaskToGroup(groupId, ortAnalyzerTask.taskID)
-//                    groupTaskManager.addTaskToGroup(groupId, detektTask.taskID)
-//                    groupTaskManager.addTaskToGroup(groupId, qodanaTask.taskID)
-//                    groupTaskManager.addTaskToGroup(groupId, occmdTask.taskID)
+                    groupTaskManager.addTaskToGroup(groupId, detektTask.taskID)
+                    groupTaskManager.addTaskToGroup(groupId, qodanaTask.taskID)
+                    groupTaskManager.addTaskToGroup(groupId, occmdTask.taskID)
 
 
                     worker.addTask(ortAnalyzerTask)
-//                    worker.addTask(detektTask)
-//                    worker.addTask(qodanaTask)
-//                    worker.addTask(occmdTask)
+                    worker.addTask(detektTask)
+                    worker.addTask(qodanaTask)
+                    worker.addTask(occmdTask)
                 }
 
                 is OrtAnalyzerDoneEvent -> {
@@ -176,8 +177,8 @@ class TaskManager(
                         event.repoId,
                         event.groupID,
                         dependencyService,
-                        event.taskId
-//                        toolService
+                        event.taskId,
+                        toolService
                     )
                     worker.addTask(ortAdvisorTask)
                 }
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/events/OrtAnalyzerDoneEvent.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/events/OrtAnalyzerDoneEvent.kt
index a2c39978..8a900b2c 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/events/OrtAnalyzerDoneEvent.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/events/OrtAnalyzerDoneEvent.kt
@@ -4,5 +4,5 @@ import java.util.*
 
 class OrtAnalyzerDoneEvent(
     val resultFileOutputDirectoryPath: String,
-    val repoId: UUID, val taskId: UUID, val groupID: UUID
+    val repoId: UUID, val taskId: UUID, val groupID: UUID?
 ) : Event()
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAdvisorTask.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAdvisorTask.kt
index 79142343..ac23e1d3 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAdvisorTask.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAdvisorTask.kt
@@ -10,6 +10,8 @@ import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.ToolProcessTask
 import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.ort.dto.OrtResultDto
 import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.ort.json.AdvisorResultJson
 import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.ort.json.OrtJson
+import de.fraunhofer.iem.dataprovider.tool.dto.CreateToolDto
+import de.fraunhofer.iem.dataprovider.tool.service.ToolService
 import kotlinx.serialization.json.*
 import org.springframework.core.io.ClassPathResource
 import org.springframework.core.io.Resource
@@ -23,10 +25,10 @@ class OrtAdvisorTask(
     outputDirectoryPath: String,
     override val responseChannel: suspend (event: Event) -> Unit,
     override val repoId: UUID,
-    override val groupID: UUID,
+    override val groupID: UUID?,
     private val dependencyService: DependencyService,
-    override val taskID: UUID
-//    private val toolService: ToolService
+    override val taskID: UUID,
+    private val toolService: ToolService
 ) : ToolProcessTask<List<DependencyCreateDto>>() {
 
     private val resource: Resource = ClassPathResource("scripts/ort/ort_advisor.sh")
@@ -79,10 +81,7 @@ class OrtAdvisorTask(
         result.forEach { dependency ->
             dependencyService.save(dependency.toDbObject())
         }
-//        val ortTool = ToolEntity()
-//        ortTool.name = "ORT"
-//        ortTool.fullName = "oss-review-toolkit"
-//        toolService.save(ortTool)
+        toolService.findOrCreateTool(CreateToolDto("ORT", "ORT", "docker-snapshot"))
     }
 
 }
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAnalyzerTask.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAnalyzerTask.kt
index 8cad3ef7..80a9ccf5 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAnalyzerTask.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAnalyzerTask.kt
@@ -15,7 +15,7 @@ class OrtAnalyzerTask(
     outputDirectoryPath: String,
     override val responseChannel: suspend (event: Event) -> Unit,
     override val repoId: UUID,
-    override val groupID: UUID
+    override val groupID: UUID? = null
 ) : ToolProcessTask<List<DependencyCreateDto>>() {
 
     private val resource: Resource = ClassPathResource("scripts/ort/ort_analyzer.sh")
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/dto/CreateToolDto.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/dto/CreateToolDto.kt
new file mode 100644
index 00000000..378e7d88
--- /dev/null
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/dto/CreateToolDto.kt
@@ -0,0 +1,13 @@
+package de.fraunhofer.iem.dataprovider.tool.dto
+
+import de.fraunhofer.iem.dataprovider.tool.entity.ToolEntity
+
+data class CreateToolDto(val name: String, val fullName: String, val version: String) {
+    fun asDbObject(): ToolEntity {
+        val toolEntity = ToolEntity()
+        toolEntity.name = this.name
+        toolEntity.fullName = this.fullName
+        toolEntity.version = this.version
+        return toolEntity
+    }
+}
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/service/ToolService.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/service/ToolService.kt
index cc76be21..61264fe5 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/service/ToolService.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/service/ToolService.kt
@@ -2,6 +2,7 @@ package de.fraunhofer.iem.dataprovider.tool.service
 
 import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.sarif.json.SarifToolJson
 import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.sarif.json.asDbObject
+import de.fraunhofer.iem.dataprovider.tool.dto.CreateToolDto
 import de.fraunhofer.iem.dataprovider.tool.entity.ToolEntity
 import de.fraunhofer.iem.dataprovider.tool.repository.ToolRepository
 import org.springframework.stereotype.Service
@@ -22,4 +23,13 @@ class ToolService(
     fun save(tool: ToolEntity) {
         toolRepository.save(tool)
     }
+
+    fun findOrCreateTool(tool: CreateToolDto): ToolEntity {
+        return toolRepository.findByFullNameIgnoreCaseAndNameIgnoreCaseAndVersionIgnoreCase(
+            tool.fullName,
+            tool.name,
+            tool.version
+        )
+            ?: toolRepository.save(tool.asDbObject())
+    }
 }
\ No newline at end of file
diff --git a/src/main/resources/scripts/ort/ort_advisor.sh b/src/main/resources/scripts/ort/ort_advisor.sh
new file mode 100755
index 00000000..60a5ac32
--- /dev/null
+++ b/src/main/resources/scripts/ort/ort_advisor.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+PROJECT_DIRECTORY=${1}
+OUTPUT_DIRECTORY=${2}
+echo Advisor Started
+echo Input directory: "${PROJECT_DIRECTORY}" Output directory: "${OUTPUT_DIRECTORY}"
+
+script_dir="$(dirname "$0")"
+
+ #add --network vulnerablecode_mynetwork when running together with a custom vulnerable code instance
+docker run --rm\
+--network vulnerablecode_mynetwork \
+-v "${script_dir}":/config \
+-v "${PROJECT_DIRECTORY}":/project \
+-v "${OUTPUT_DIRECTORY}":/result \
+ort --config /config/config.yml --info advise -f JSON -i /project/analyzer-result.json --output-dir /result -a VulnerableCode
+exit 0
\ No newline at end of file
diff --git a/src/main/resources/scripts/ort/ort_analyzer.sh b/src/main/resources/scripts/ort/ort_analyzer.sh
index ee1ccbf9..c2a5d860 100755
--- a/src/main/resources/scripts/ort/ort_analyzer.sh
+++ b/src/main/resources/scripts/ort/ort_analyzer.sh
@@ -7,7 +7,7 @@ echo Input directory: "${PROJECT_DIRECTORY}" Output directory: "${OUTPUT_DIRECTO
 
 script_dir="$(dirname "$0")"
 
-docker run \
+docker run --rm \
 -v "${script_dir}":/config \
 -v "${PROJECT_DIRECTORY}":/project \
 -v "${OUTPUT_DIRECTORY}":/result \
-- 
GitLab