mirror of
https://github.com/ysoftdevs/odc-analyzer.git
synced 2026-01-15 00:03:59 +01:00
Error messages refactoring
This commit is contained in:
@@ -5,6 +5,7 @@ import com.google.inject.Inject
|
||||
import com.google.inject.name.Named
|
||||
import com.ysoft.odc.Checks._
|
||||
import com.ysoft.odc._
|
||||
import com.ysoft.odc.statistics.FailedProjects
|
||||
import org.joda.time.DateTimeConstants
|
||||
import play.api.Logger
|
||||
import play.api.i18n.{I18nSupport, MessagesApi}
|
||||
@@ -40,6 +41,7 @@ final class DependencyCheckReportsProcessor @Inject() (
|
||||
}
|
||||
}
|
||||
|
||||
private def buildLink(reportInfo: ReportInfo): String = s"$server/browse/${reportInfo.projectId}"
|
||||
|
||||
def processResults(
|
||||
resultsFuture: Future[(Map[String, (Build, ArtifactItem, ArtifactFile)], Map[String, Throwable])],
|
||||
@@ -47,7 +49,7 @@ final class DependencyCheckReportsProcessor @Inject() (
|
||||
)(implicit requestHeader: DefaultRequest, snoozesInfo: SnoozesInfo, executionContext: ExecutionContext) = try{
|
||||
for((successfulResults, failedResults) <- resultsFuture) yield{
|
||||
val reportResult = dependencyCheckReportsParser.parseReports(successfulResults, failedResults)
|
||||
import reportResult.{allDependencies, failedAnalysises, flatReports, groupedDependencies, vulnerableDependencies}
|
||||
import reportResult.{allDependencies, failedAnalysises, flatReports, groupedDependencies, vulnerableDependencies, projectsReportInfo}
|
||||
val now = DateTime.now
|
||||
val oldReportThreshold = now - 1.day
|
||||
val cveTimestampThreshold = now - (if(now.dayOfWeek().get == DateTimeConstants.MONDAY) 4.days else 2.days )
|
||||
@@ -73,12 +75,18 @@ final class DependencyCheckReportsProcessor @Inject() (
|
||||
)
|
||||
|
||||
val unknownIdentifierTypes = allDependencies.flatMap(_._1.identifiers.map(_.identifierType)).toSet -- Set("maven", "cpe")
|
||||
val logChecks = Seq[(String => Boolean, ProjectWarningBuilder)](
|
||||
(
|
||||
log => log.lines.exists(l => (l.toLowerCase startsWith "error") || (l.toLowerCase contains "[error]")),
|
||||
ProjectWarningBuilder("results-with-error-messages", views.html.warnings.resultsWithErrorMessages(), WarningSeverity.Error)
|
||||
)
|
||||
)
|
||||
val logWarnings: Seq[Warning] = logChecks.flatMap{case (logCheck, warningBuilder) =>
|
||||
val resultsWithErrorMessages = successfulResults.filter{case (k, (_, _, log)) => logCheck(log.dataString)}
|
||||
if(resultsWithErrorMessages.nonEmpty) Some(warningBuilder.forProjects(new FailedProjects(resultsWithErrorMessages.keys.map(projectsReportInfo.reportIdToReportInfo).toSet), buildLink)) else None
|
||||
}
|
||||
val extraWarnings = Seq[Option[Warning]](
|
||||
if(unknownIdentifierTypes.size > 0) Some(IdentifiedWarning("unknown-identifier-types", views.html.warnings.unknownIdentifierType(unknownIdentifierTypes), WarningSeverity.Info)) else None,
|
||||
{
|
||||
val resultsWithErrorMessages = successfulResults.filter{case (k, (_, _, log)) => log.dataString.lines.exists(l => (l.toLowerCase startsWith "error") || (l.toLowerCase contains "[error]"))}
|
||||
if(resultsWithErrorMessages.nonEmpty) Some(IdentifiedWarning("results-with-error-messages", views.html.warnings.resultsWithErrorMessages(resultsWithErrorMessages.values.map{case (build, _, _) => build}.toSeq, server), WarningSeverity.Error)) else None
|
||||
},
|
||||
if(failedResults.isEmpty) None else Some(IdentifiedWarning("failed-results", views.html.warnings.failedResults(failedResults), WarningSeverity.Error)),
|
||||
if(requiredVersions.isEmpty) None else Some(IdentifiedWarning("required-versions", views.html.warnings.textWarning("You have manually requested results for some older version."), WarningSeverity.Warning)),
|
||||
if(failedAnalysises.isEmpty) None else Some(IdentifiedWarning("failed-analysises", views.html.warnings.textWarning(s"Some reports failed to parse: ${failedAnalysises.keySet}"), WarningSeverity.Error))
|
||||
@@ -86,7 +94,7 @@ final class DependencyCheckReportsProcessor @Inject() (
|
||||
|
||||
val scanWarnings = ScanChecks.flatMap(_(flatReports))
|
||||
val groupedDependenciesWarnings = GroupedDependenciesChecks.flatMap(_(groupedDependencies))
|
||||
val allWarnings = scanWarnings ++ groupedDependenciesWarnings ++ extraWarnings
|
||||
val allWarnings = scanWarnings ++ groupedDependenciesWarnings ++ logWarnings ++ extraWarnings
|
||||
|
||||
// TODO: log analysis
|
||||
// TODO: related dependencies
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package controllers
|
||||
|
||||
import com.ysoft.odc.statistics.FailedProjects
|
||||
import controllers.WarningSeverity.WarningSeverity
|
||||
import play.twirl.api.Html
|
||||
|
||||
@@ -21,4 +22,12 @@ sealed abstract class Warning {
|
||||
|
||||
final case class IdentifiedWarning(id: String, html: Html, severity: WarningSeverity) extends Warning{
|
||||
def optimize = copy(html = Html(html.body))
|
||||
}
|
||||
|
||||
final case class ProjectWarningBuilder(id: String, html: Html, severity: WarningSeverity){
|
||||
def forProjects(projects: FailedProjects, buildLink: ReportInfo => String): IdentifiedWarning = IdentifiedWarning(
|
||||
id,
|
||||
views.html.warnings.projectFailures(html, projects, buildLink),
|
||||
severity
|
||||
)
|
||||
}
|
||||
8
app/views/warnings/projectFailures.scala.html
Normal file
8
app/views/warnings/projectFailures.scala.html
Normal file
@@ -0,0 +1,8 @@
|
||||
@import com.ysoft.odc.statistics.FailedProjects
|
||||
@(message: Html, failedReports: FailedProjects, buildLink: ReportInfo => String)
|
||||
@message
|
||||
<ul>
|
||||
@for(project <- failedReports.failedProjectsSet.toSeq.sortBy(_.projectName)){
|
||||
<li>@secureLink(buildLink(project)){@friendlyProjectName(project)}</li>
|
||||
}
|
||||
</ul>
|
||||
@@ -1,5 +1,2 @@
|
||||
@(reportsWithErrorMessages: Seq[Build], urlBase: String)
|
||||
<strong>Following projects seem to contain some error messages in their logs:</strong>
|
||||
@for(build <- reportsWithErrorMessages.toSeq.sortBy(_.projectName)){
|
||||
<li>@secureLink(build.resultLink(urlBase)){@build.projectName}</li>
|
||||
}
|
||||
@()
|
||||
<strong>Following projects seem to contain some error messages in their logs:</strong>
|
||||
Reference in New Issue
Block a user