Log changed files into ES statistic

This commit is contained in:
nataliya.valtman
2021-07-06 12:57:28 +03:00
parent 9b3b386f0a
commit f76864260a
4 changed files with 49 additions and 6 deletions
@@ -7,15 +7,18 @@ package org.jetbrains.kotlin.compilerRunner
import org.gradle.api.logging.Logger
import org.jetbrains.kotlin.build.report.metrics.*
import org.jetbrains.kotlin.cli.common.CompilerSystemProperties.COMPILE_INCREMENTAL_WITH_CLASSPATH_SHAPSHOTS
import org.jetbrains.kotlin.cli.common.ExitCode
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.toBooleanLenient
import org.jetbrains.kotlin.config.Services
import org.jetbrains.kotlin.daemon.common.*
import org.jetbrains.kotlin.gradle.logging.*
import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskExecutionResults
import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskLoggers
import org.jetbrains.kotlin.gradle.report.BuildReportMode
import org.jetbrains.kotlin.gradle.report.ReportingSettings
import org.jetbrains.kotlin.gradle.report.*
import org.jetbrains.kotlin.gradle.report.TaskExecutionInfo
import org.jetbrains.kotlin.gradle.report.TaskExecutionProperties.ABI_SNAPSHOT
import org.jetbrains.kotlin.gradle.report.TaskExecutionResult
import org.jetbrains.kotlin.gradle.tasks.clearLocalState
import org.jetbrains.kotlin.gradle.tasks.throwGradleExceptionIfError
@@ -30,6 +33,7 @@ import java.util.*
import java.util.concurrent.Callable
import java.util.concurrent.Executors
import javax.inject.Inject
import kotlin.collections.ArrayList
internal class ProjectFilesForCompilation(
val projectRootFile: File,
@@ -134,7 +138,16 @@ internal class GradleKotlinCompilerWork @Inject constructor(
throwGradleExceptionIfError(exitCode)
} finally {
val result = TaskExecutionResult(buildMetrics = metrics.getMetrics(), icLogLines = icLogLines)
val properties = ArrayList<TaskExecutionProperties>()
COMPILE_INCREMENTAL_WITH_CLASSPATH_SHAPSHOTS.value.toBooleanLenient()?.let {
if (it) properties.add(ABI_SNAPSHOT)
}
val taskInfo = TaskExecutionInfo(
changedFiles = incrementalCompilationEnvironment?.changedFiles,
properties = properties
)
val result = TaskExecutionResult(buildMetrics = metrics.getMetrics(), icLogLines = icLogLines, taskInfo = taskInfo)
TaskExecutionResults[taskPath] = result
}
}
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.cli.common.CompilerSystemProperties
import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskExecutionResults
import org.jetbrains.kotlin.gradle.plugin.stat.CompileStatData
import org.jetbrains.kotlin.gradle.plugin.stat.ReportStatistics
import org.jetbrains.kotlin.incremental.ChangedFiles
enum class TaskExecutionState {
SKIPPED,
@@ -51,15 +52,30 @@ class KotlinBuildEsStatListener(val projectName: String) : OperationCompletionLi
}
private fun reportData(taskPath: String, duration: Long, taskResult: TaskExecutionState) {
val statData = TaskExecutionResults[taskPath]?.buildMetrics?.buildTimes?.asMap()?.mapKeys { (key, _) -> key.name } ?: emptyMap()
if (!availableForStat(taskPath)) {
return;
}
val taskExecutionResult = TaskExecutionResults[taskPath]
val statData = taskExecutionResult?.buildMetrics?.buildTimes?.asMap()?.mapKeys { (key, _) -> key.name } ?: emptyMap()
val changedFiles = taskExecutionResult?.taskInfo?.changedFiles
val changes = when (changedFiles) {
is ChangedFiles.Known -> changedFiles.modified.map { it.absolutePath } + changedFiles.removed.map { it.absolutePath }
is ChangedFiles.Dependencies -> changedFiles.modified.map { it.absolutePath } + changedFiles.removed.map { it.absolutePath }
else -> emptyList<String>()
}
val compileStatData = CompileStatData(
duration = duration, taskResult = taskResult.name, label = label,
statData = statData, projectName = projectName, taskName = taskPath
statData = statData, projectName = projectName, taskName = taskPath, changes = changes,
tags = taskExecutionResult?.taskInfo?.properties?.map { it.name } ?: emptyList()
)
reportStatistics.report(compileStatData)
}
private fun availableForStat(taskPath: String): Boolean {
return taskPath.contains("compileKotlin")
}
override fun afterExecute(task: Task, taskState: TaskState) {
val taskResult = when {
taskState.skipped -> TaskExecutionState.SKIPPED
@@ -12,6 +12,8 @@ data class CompileStatData(
val taskName: String?,
val taskResult: String,
val duration: Long,
val tags: List<String>,
val changes: List<String>,
val statData: Map<String, Long>
)
@@ -6,8 +6,20 @@
package org.jetbrains.kotlin.gradle.report
import org.jetbrains.kotlin.build.report.metrics.BuildMetrics
import org.jetbrains.kotlin.incremental.ChangedFiles
internal class TaskExecutionResult(
val buildMetrics: BuildMetrics,
val taskInfo: TaskExecutionInfo = TaskExecutionInfo(),
val icLogLines: List<String> = emptyList()
)
)
internal class TaskExecutionInfo(
val properties: List<TaskExecutionProperties> = emptyList(),
val changedFiles: ChangedFiles? = null
)
internal enum class TaskExecutionProperties {
ABI_SNAPSHOT
;
}