diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts index 1149ee609cc..45740bccd80 100644 --- a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts @@ -97,6 +97,8 @@ dependencies { testCompileOnly(project(":kotlin-reflect-api")) testCompileOnly(project(":kotlin-annotation-processing")) testCompileOnly(project(":kotlin-annotation-processing-gradle")) + + compileOnly("com.gradle:gradle-enterprise-gradle-plugin:3.6.3") } if (kotlinBuildProperties.isInJpsBuildIdeaSync) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt index c9485806c39..cb146e0e7f2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt @@ -10,10 +10,14 @@ import org.gradle.BuildResult import org.gradle.api.Project import org.gradle.api.invocation.Gradle import org.gradle.api.logging.Logging +import com.gradle.scan.plugin.BuildScanExtension import org.jetbrains.kotlin.gradle.logging.kotlinDebug import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskExecutionResults import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskLoggers +import org.jetbrains.kotlin.gradle.plugin.stat.ReportStatistics import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildEsStatListener +import org.jetbrains.kotlin.gradle.plugin.statistics.ReportStatisticsToBuildScan +import org.jetbrains.kotlin.gradle.plugin.statistics.ReportStatisticsToElasticSearch import org.jetbrains.kotlin.gradle.report.configureReporting import org.jetbrains.kotlin.gradle.utils.isConfigurationCacheAvailable @@ -66,7 +70,16 @@ internal class KotlinGradleBuildServices private constructor( KotlinGradleBuildListener(KotlinGradleFinishBuildHandler()) } val kotlinGradleEsListenerProvider = project.provider { - KotlinBuildEsStatListener(project.rootProject.name) +// val listeners = project.objects.listProperty(ReportStatistics::class.java) +// .value(listOf(ReportStatisticsToElasticSearch)) +// project.rootProject.extensions.findByType(BuildScanExtension::class.java)?.also { listeners.add(ReportStatisticsToBuildScan(it)) } +// KotlinBuildEsStatListener(project.rootProject.name, listeners.get()) + + val listeners = ArrayList() + val buildScan = project.rootProject.extensions.findByName("buildScan") + buildScan?.also { listeners.add(ReportStatisticsToBuildScan(it as BuildScanExtension)) } + listeners.add(ReportStatisticsToElasticSearch) + KotlinBuildEsStatListener(project.rootProject.name, listeners) } if (instance != null) { 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 3bb133c4123..c373a0f35d5 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 @@ -27,8 +27,7 @@ enum class TaskExecutionState { ; } -class KotlinBuildEsStatListener(val projectName: String) : OperationCompletionListener, AutoCloseable, TaskExecutionListener { - val reportStatistics: ReportStatistics = ReportStatisticsToElasticSearch +class KotlinBuildEsStatListener(val projectName: String, val reportStatistics : List) : OperationCompletionListener, AutoCloseable, TaskExecutionListener { val label by lazy { CompilerSystemProperties.KOTLIN_STAT_LABEl_PROPERTY.value } @@ -69,7 +68,7 @@ class KotlinBuildEsStatListener(val projectName: String) : OperationCompletionLi statData = statData, projectName = projectName, taskName = taskPath, changes = changes, tags = taskExecutionResult?.taskInfo?.properties?.map { it.name } ?: emptyList() ) - reportStatistics.report(compileStatData) + reportStatistics.forEach { it.report(compileStatData) } } private fun availableForStat(taskPath: String): Boolean { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/ReportStatisticsToBuildScan.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/ReportStatisticsToBuildScan.kt new file mode 100644 index 00000000000..6fb6b118eec --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/ReportStatisticsToBuildScan.kt @@ -0,0 +1,17 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.plugin.statistics + +import com.google.gson.Gson +import com.gradle.scan.plugin.BuildScanExtension +import org.jetbrains.kotlin.gradle.plugin.stat.CompileStatData +import org.jetbrains.kotlin.gradle.plugin.stat.ReportStatistics + +class ReportStatisticsToBuildScan(val buildScan: BuildScanExtension) : ReportStatistics { + override fun report(data: CompileStatData) { + buildScan.value(data.taskName, Gson().toJson(data).toString()) + } +} \ No newline at end of file