From f76864260a015a37e3c216dceada7056adb9ca1b Mon Sep 17 00:00:00 2001 From: "nataliya.valtman" Date: Tue, 6 Jul 2021 12:57:28 +0300 Subject: [PATCH] Log changed files into ES statistic --- .../GradleKotlinCompilerWork.kt | 19 +++++++++++++++--- .../statistics/KotlinBuildEsStatListener.kt | 20 +++++++++++++++++-- .../plugin/statistics/ReportStatistics.kt | 2 ++ .../gradle/report/TaskExecutionResult.kt | 14 ++++++++++++- 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt index 6c4e93a8834..08cf54efe92 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt @@ -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() + 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 } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildEsStatListener.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildEsStatListener.kt index 5d3eb5d9f32..3bb133c4123 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildEsStatListener.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildEsStatListener.kt @@ -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() + } 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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/ReportStatistics.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/ReportStatistics.kt index 498d3485fb6..16d6a698e06 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/ReportStatistics.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/ReportStatistics.kt @@ -12,6 +12,8 @@ data class CompileStatData( val taskName: String?, val taskResult: String, val duration: Long, + val tags: List, + val changes: List, val statData: Map ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/report/TaskExecutionResult.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/report/TaskExecutionResult.kt index 5522601c2e9..3b91ebc5217 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/report/TaskExecutionResult.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/report/TaskExecutionResult.kt @@ -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 = emptyList() -) \ No newline at end of file +) + +internal class TaskExecutionInfo( + val properties: List = emptyList(), + val changedFiles: ChangedFiles? = null +) + +internal enum class TaskExecutionProperties { + ABI_SNAPSHOT + ; +}