override fun extract()

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)
    }