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