diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KpiCalculationDto.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KpiCalculationDto.kt index a850d28484520f77bba33581ea5a0c47fdcc9878..e8add33265e1c8c41f537e37722bb46968b984a2 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KpiCalculationDto.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KpiCalculationDto.kt @@ -2,6 +2,7 @@ package de.fraunhofer.iem.dataprovider.kpi.dto import de.fraunhofer.iem.dataprovider.kpi.enumeration.KpiKind import de.fraunhofer.iem.dataprovider.kpi.strategy.KPICalculationStrategy +import de.fraunhofer.iem.dataprovider.logger.getLogger class KpiCalculationDto( val kind: KpiKind, @@ -10,6 +11,7 @@ class KpiCalculationDto( private var value: Int? = null ) { private val hierarchyEdges: MutableList<KPIHierarchyEdgeDto> = mutableListOf() + private val logger = getLogger(javaClass) fun hasChildren(): Boolean { return hierarchyEdges.isNotEmpty() @@ -29,6 +31,7 @@ class KpiCalculationDto( this.value = calculationStrategy.calculateKPI(this.hierarchyEdges) this.isEmpty = false } catch (exception: Exception) { + logger.error("Exception during KPI calculation for $kind with $calculationStrategy") this.isEmpty = true this.value = null } diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/AggregationKPICalculationStrategy.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/AggregationKPICalculationStrategy.kt index 905de83bcffd2ce6673dde867c53549edd90209e..ca143284a624509a07debe2b70b0d8103a48508d 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/AggregationKPICalculationStrategy.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/AggregationKPICalculationStrategy.kt @@ -11,6 +11,10 @@ class AggregationKPICalculationStrategy : KPICalculationStrategy { * remaining children. */ override fun calculateKPI(children: List<KPIHierarchyEdgeDto>): Int { + if (children.none { !it.to.isEmpty() } || children.isEmpty()) { + throw Exception("KPI aggregation of empty children can't be calculated.") + } + val emptyChildren: List<KPIHierarchyEdgeDto> = children.filter { it.to.isEmpty() } val notEmptyChildren = children.toMutableList() notEmptyChildren.removeAll(emptyChildren) diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/MaximumKPICalculationStrategy.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/MaximumKPICalculationStrategy.kt index a8823511361f906226e335e6ea470aa52182ad26..a65c51b750ffbe91953633c4c745527b6bf13ae9 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/MaximumKPICalculationStrategy.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/MaximumKPICalculationStrategy.kt @@ -6,6 +6,9 @@ class MaximumKPICalculationStrategy : KPICalculationStrategy { // TODO: Currently it's tailored to the maximum dependency vulnerability score, this should change in the future @Suppress("MagicNumber") override fun calculateKPI(children: List<KPIHierarchyEdgeDto>): Int { + if (children.none { !it.to.isEmpty() } || children.isEmpty()) { + throw Exception("KPI maximum of empty children can't be calculated") + } var maximum = 0 for (child in children) { if (!child.to.isEmpty()) { diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 541c9ea26e9fd28b1ab0924d55d9ab90e2660187..b4ac9ba7c835b67d7426671c4ce13c040ef3e718 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -30,7 +30,7 @@ spring.main.web-application-type=REACTIVE spring.jpa.generate-ddl=true spring.jpa.show-sql=false # This setting should only be used in dev. In prod we want to switch to update -spring.jpa.hibernate.ddl-auto=update +spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true spring.jpa.properties.hibernate.bytecode.use_reflection_optimizer=false diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 4745c4092ccb5f248954f0b235befa036dff172c..aa3c4832bc64317fd8897998766418818da68753 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -5,6 +5,7 @@ opencode.host=https://gitlab.opencode.de/ opencode.access-token=${OC_GL_APIKEY:} # Tool APIs opencode.api.base-path=https://sl.dev.o4oe.de/api/v1/project/ +# https://software.opencode.de as soon as it is live opencode.api.ort=/cve-result # API key to access this server's API # The api key is needed for all routes.