in src/main/kotlin/com/github/mkartashev/hserr/miner/artifact/InternalExceptions.kt [30:62]
override fun extract(log: HsErrLog): InternalExceptionsArtifact {
val countsStart = log.start.moveToLineStartsWithString("OutOfMemory and StackOverflow Exception counts:")
var countsEnd = countsStart.moveToNextLine()
var oomeCount = 0
var stackOverflowCount = 0
var linkageErrorsCount = 0
while (countsEnd.isValid() && !countsEnd.isAtEnd()) {
val line = countsEnd.selectUpToEOL().toString()
if (line.isBlank()) break
val count = line.substringAfter('=').toIntOrNull() ?: 0
if (line.contains("OutOfMemoryError")) {
oomeCount += count
} else if (line.contains("LinkageErrors")) {
linkageErrorsCount += count
} else if (line.contains("StackOverflowErrors")) {
stackOverflowCount += count
}
countsEnd = countsEnd.moveToNextLine()
}
val locations = mutableSetOf(countsStart.selectUpTo(countsEnd))
val eventsListSelection = log.start
.moveToLineStartsWithString("Internal exceptions")
.selectUpToFirstEmptyLine()
if (!eventsListSelection.isEmpty()) locations.add(eventsListSelection)
val lines = eventsListSelection.toString().lines().filter { it.startsWith("Event:") && it.contains("Exception <a '") }
val latest = lines.map {
it.substringAfter("<a '").substringBefore('\'').replace('/', '.')
}
return InternalExceptionsArtifact(log, locations, latest, oomeCount, stackOverflowCount, linkageErrorsCount)
}