@import com.ysoft.odc.statistics.TagStatistics @( projectsWithSelection: ProjectsWithSelection, lds: LibDepStatistics, tagStatistics: Seq[TagStatistics], parsedReports: DependencyCheckReportsParser.Result )(implicit messagesApi: MessagesApi, requestHeader: DefaultRequest, mainTemplateData: MainTemplateData) @import com.ysoft.odc.CWE @import play.api.libs.json.{JsNull, JsString} @import scala.language.implicitConversions @implicitTagStatistics(ts: TagStatistics) = @{ts.stats} @he = { } @plotData(frequency: Map[Option[CWE], Int]) = @{ import play.api.libs.json.Json._ val (ticks, details, values) = frequency.toSeq.sortBy{case (cweOption, _) => cweOption.map(c => c.numberOption -> c.name)}.map{ case (Some(cwe), freq) => (toJson(cwe.brief), toJson(cwe.name), freq) case (None, freq) => (JsString("(none)"), JsNull, freq) }.unzip3 toJson(Map( "ticks" -> toJson(ticks), "details" -> toJson(details), "values" -> toJson(values) )) } @main( title = s"statistics for ${projectsWithSelection.projectNameText}", headExtension = he, projectsOption = Some((projectsWithSelection, routes.Statistics.basic(_))) ){ @healthReport(lds.failedProjects) All dependencies: @parsedReports.groupedDependencies.size
Vulnerable dependencies: @parsedReports.vulnerableDependencies.size
Vulnerabilities: @parsedReports.vulnerableDependencies.flatMap(_.vulnerabilities.map(_.name)).toSet.size
Unique CPEs of vulnerable dependencies: @parsedReports.vulnerableDependencies.flatMap(_.cpeIdentifiers.map(_.toCpeIdentifierOption.get)).toSet.size
Unique CPEs of all dependencies: @parsedReports.groupedDependencies.flatMap(_.cpeIdentifiers.map(_.toCpeIdentifierOption.get)).toSet.size
@if(!projectsWithSelection.isProjectSpecified){ Multi-project dependencies: @parsedReports.groupedDependencies.filter(_.projects.size > 1).toSet.size
} @*
*@ @for(s <- tagStatistics){ }
tag name # of vulns vulnerable all vulnerable/all CPE % vulnerable/CPE
@s.tag.name @*
@s.tag.note
*@
@s.vulnerabilities.size @**@ @s.vulnerableDependencies.size @s.dependencies.size @(f"${s.vulnerableRatio*100}%2.2f") % @(f"${s.cpeRatio*100}%2.2f") % @(f"${s.vulnerableDependencies.size.toDouble*100.0/s.dependenciesWithCpe.size.toDouble}%2.2f") %
}