Skip to content
Snippets Groups Projects
Verified Commit ae307255 authored by Jan-Niclas Strüwer's avatar Jan-Niclas Strüwer
Browse files

removed dead code

parent 53196393
No related branches found
No related tags found
No related merge requests found
Showing
with 2 additions and 243 deletions
...@@ -65,7 +65,7 @@ class MetricsService( ...@@ -65,7 +65,7 @@ class MetricsService(
*/ */
val vulnerabilityKpis = async { val vulnerabilityKpis = async {
val vulnerabilityDtos = ortService.getOrtResults(106) // in the dev setup we get results for repo id 106 val vulnerabilityDtos = ortService.getOrtResults(repoId) // in the dev setup we get results for repo id 106
ortService.calculateVulnerabilityKpis(vulnerabilityDtos) ortService.calculateVulnerabilityKpis(vulnerabilityDtos)
} }
...@@ -91,5 +91,4 @@ class MetricsService( ...@@ -91,5 +91,4 @@ class MetricsService(
occmdKpis = occmdKpis.await() occmdKpis = occmdKpis.await()
) )
} }
}
}
\ No newline at end of file
package de.fraunhofer.iem.dataprovider.taskManager
import de.fraunhofer.iem.dataprovider.logger.getLogger
import de.fraunhofer.iem.dataprovider.taskManager.tasks.ITask
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.launch
import java.util.*
interface IWorker {
/**
* Adds a new task to the worker's internal tasks channel.
*/
suspend fun addTask(task: ITask)
// TODO: check if we can use autoclosable interface here.
/**
* Function used to close the underlying resources.
*/
fun close()
}
/**
* Abstract worker class used as a base for multithreaded worker.
* It uses a fixed thread pool as a base for the coroutineScope.
* The size of the thread pool is equal to the number of cores.
*/
class Worker(
private val name: String,
private val coroutineScope: CoroutineScope = CoroutineScope(Dispatchers.Default),
numberOfWorkers: Int = Runtime.getRuntime().availableProcessors()
) : IWorker {
// TODO: this could be dangerous to give it unlimited memory
private val tasksChannel = Channel<ITask>(Channel.UNLIMITED)
// TODO: the task map should be cleared to reduce memory usage.
// This needs to be triggered from outside a worker as soon as
// all tasks related to the specific tasks are completed.
private val taskMap = HashMap<UUID, Pair<ITask, Job>>()
private val logger = getLogger(javaClass)
override suspend fun addTask(task: ITask) {
tasksChannel.send(task)
}
init {
logger.info("Starting $numberOfWorkers workers.")
repeat(numberOfWorkers) {
logger.info("[${Thread.currentThread().name}] launching coroutine in $name")
launchWorker(it)
}
}
/**
* Wrapper function to execute tasks provided through the channel.
* We use a dedicated number of coroutines to watch the tasks channel.
* Each coroutine starts a new coroutine to execute the task. This is
* done so that the outer coroutines are not blocked by the potentially
* very long-running inner task performed by executeTask.
*/
private fun launchWorker(id: Int) = coroutineScope.launch {
for (task in tasksChannel) {
val job = coroutineScope.launch {
logger.debug("[{}] Processor #{}-{} received {}", Thread.currentThread().name, id, name, task)
// TODO: we need to check if we want to wrap this executeTask in a try-catch block
try {
task.run()
} catch (e: Throwable) {
logger.error("Exception during task execution occurred. TaskID: ${task.taskID}")
} finally {
logger.debug("[{}] Processor #{}-{} finished {}", Thread.currentThread().name, id, name, task)
taskMap.remove(task.taskID)
}
}
taskMap[task.taskID] = Pair(task, job)
}
}
override fun close() {
coroutineScope.launch {
tasksChannel.close()
for (job in coroutineContext[Job]!!.children) {
job.join()
}
logger.info("Worker $name has been closed")
}
}
}
package de.fraunhofer.iem.dataprovider.taskManager.events
sealed class Event
\ No newline at end of file
package de.fraunhofer.iem.dataprovider.taskManager.events
import de.fraunhofer.iem.dataprovider.repository.dto.RepositoryCreateDto
import java.util.*
class GetGitlabProjectDoneEvent(taskId: UUID, val repoId: UUID, val gitRepository: RepositoryCreateDto) :
TaskDoneEvent(taskId = taskId)
\ No newline at end of file
package de.fraunhofer.iem.dataprovider.taskManager.events
import de.fraunhofer.iem.dataprovider.repository.dto.RepositoryDetailsDto
import java.util.*
class GetRepositoryDetailsDoneEvent(
taskId: UUID,
val repoId: UUID,
val repositoryDetailsEntity: RepositoryDetailsDto
) : TaskDoneEvent(taskId = taskId)
package de.fraunhofer.iem.dataprovider.taskManager.events
import java.util.*
class GitCloneDoneEvent(taskId: UUID, val repoId: UUID, val outputDirectory: String) : TaskDoneEvent(taskId = taskId)
\ No newline at end of file
package de.fraunhofer.iem.dataprovider.taskManager.events
import java.util.*
class GroupTaskDoneEvent(
taskId: UUID,
val groupId: UUID,
) : TaskDoneEvent(taskId = taskId)
package de.fraunhofer.iem.dataprovider.taskManager.events
import java.util.*
class GroupTaskFailedEvent(val throwable: Throwable, val groupId: UUID, val taskId: UUID) : Event()
package de.fraunhofer.iem.dataprovider.taskManager.events
import java.util.*
class GroupTasksDoneEvent(val repoId: UUID) : Event()
\ No newline at end of file
package de.fraunhofer.iem.dataprovider.taskManager.events
import java.util.*
class OrtAnalyzerDoneEvent(
val resultFileOutputDirectoryPath: String,
val repoId: UUID, val taskId: UUID, val groupID: UUID?
) : Event()
package de.fraunhofer.iem.dataprovider.taskManager.events
object RecalculateAllKpisEvent : Event()
package de.fraunhofer.iem.dataprovider.taskManager.events
class RepoChangedEvent(val repoId: Long) : Event()
\ No newline at end of file
package de.fraunhofer.iem.dataprovider.taskManager.events
import java.util.*
open class TaskDoneEvent(val taskId: UUID) : Event()
\ No newline at end of file
package de.fraunhofer.iem.dataprovider.taskManager.events
class TaskFailedEvent(val throwable: Throwable) : Event()
\ No newline at end of file
package de.fraunhofer.iem.dataprovider.taskManager.model
import java.util.*
data class GroupTasks(
val repositoryId: UUID,
val taskIds: MutableSet<UUID> = mutableSetOf()
)
package de.fraunhofer.iem.dataprovider.taskManager.tasks
import de.fraunhofer.iem.dataprovider.logger.getLogger
import de.fraunhofer.iem.dataprovider.taskManager.events.Event
import de.fraunhofer.iem.dataprovider.taskManager.events.GroupTaskFailedEvent
import de.fraunhofer.iem.dataprovider.taskManager.events.TaskFailedEvent
import java.util.*
interface ITask {
suspend fun run()
val taskID: UUID
}
abstract class Task : ITask {
override val taskID: UUID = UUID.randomUUID()
protected open val groupID: UUID? = null
protected val logger = getLogger(javaClass)
protected abstract val responseChannel: suspend (event: Event) -> Unit
protected abstract suspend fun execute()
override suspend fun run() {
try {
execute()
} catch (e: Throwable) {
logger.error("Task execute failed.")
sendTaskFailedEvent(e)
throw e
}
}
protected suspend fun sendTaskFailedEvent(e: Throwable) {
if (groupID != null) {
responseChannel(GroupTaskFailedEvent(e, groupID!!, taskID))
} else {
responseChannel(TaskFailedEvent(e))
}
}
}
package de.fraunhofer.iem.dataprovider.taskManager.tasks.dependency.dto
data class DependencyDto(
val name: String,
val vulnerabilities: MutableList<VulnerabilityDto> = mutableListOf()
)
package de.fraunhofer.iem.dataprovider.taskManager.tasks.dependency.dto
data class VulnerabilityDto(
val cveIdentifier: String,
val vulnerabilityScores: MutableList<VulnerabilityScoreDto> = mutableListOf()
)
package de.fraunhofer.iem.dataprovider.taskManager.tasks.dependency.dto
import de.fraunhofer.iem.dataprovider.taskManager.tasks.dependency.enumeration.VulnerabilityScoringSystemEnum
data class VulnerabilityScoreDto(
val severity: String,
val scoringSystem: VulnerabilityScoringSystemEnum
)
package de.fraunhofer.iem.dataprovider.taskManager.tasks.dependency.enumeration
enum class VulnerabilityScoringSystemEnum(val system: String) {
CVSSV3("CVSSV3"),
CVSSV3_1("CVSS:3.1");
companion object {
fun fromString(value: String): VulnerabilityScoringSystemEnum? {
return entries.find { it.system.equals(value, ignoreCase = true) }
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment

Consent

On this website, we use the web analytics service Matomo to analyze and review the use of our website. Through the collected statistics, we can improve our offerings and make them more appealing for you. Here, you can decide whether to allow us to process your data and set corresponding cookies for these purposes, in addition to technically necessary cookies. Further information on data protection—especially regarding "cookies" and "Matomo"—can be found in our privacy policy. You can withdraw your consent at any time.