Add build report usage to FUS

#KT-62264 Fixed
This commit is contained in:
Nataliya.Valtman
2023-10-20 12:22:12 +02:00
committed by Space Team
parent 44d48510b4
commit e66f41da95
4 changed files with 24 additions and 5 deletions
@@ -64,7 +64,8 @@ internal abstract class BuildFlowService : BuildService<BuildFlowService.Paramet
}
val fusStatisticsAvailable = fusStatisticsAvailable(project)
val buildScanReportEnabled = reportingSettings(project).buildReportOutputs.contains(BuildReportType.BUILD_SCAN)
val buildReportOutputs = reportingSettings(project).buildReportOutputs
val buildScanReportEnabled = buildReportOutputs.contains(BuildReportType.BUILD_SCAN)
//Workaround for known issues for Gradle 8+: https://github.com/gradle/gradle/issues/24887:
// when this OperationCompletionListener is called services can be already closed for Gradle 8,
@@ -78,7 +79,7 @@ internal abstract class BuildFlowService : BuildService<BuildFlowService.Paramet
}
spec.parameters.configurationMetrics.set(project.provider {
KotlinBuildStatsService.getInstance()?.collectStartMetrics(project, isProjectIsolationEnabled)
KotlinBuildStatsService.getInstance()?.collectStartMetrics(project, isProjectIsolationEnabled, buildReportOutputs)
})
spec.parameters.fusStatisticsAvailable.set(fusStatisticsAvailable)
}.also { buildService ->
@@ -9,6 +9,7 @@ import org.gradle.api.Project
import org.gradle.api.artifacts.DependencySet
import org.gradle.api.logging.Logging
import org.jetbrains.kotlin.gradle.plugin.statistics.plugins.ObservablePlugins
import org.jetbrains.kotlin.gradle.report.BuildReportType
import org.jetbrains.kotlin.gradle.utils.*
import org.jetbrains.kotlin.statistics.BuildSessionLogger
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
@@ -84,11 +85,21 @@ class KotlinBuildStatHandler {
project: Project,
sessionLogger: BuildSessionLogger,
isProjectIsolationEnabled: Boolean,
buildReportOutputs: List<BuildReportType>,
): MetricContainer {
val gradle = project.gradle
val configurationTimeMetrics = MetricContainer()
configurationTimeMetrics.put(StringMetrics.PROJECT_PATH, gradle.rootProject.projectDir.absolutePath)
configurationTimeMetrics.put(StringMetrics.GRADLE_VERSION, gradle.gradleVersion)
buildReportOutputs.forEach {
when (it) {
BuildReportType.BUILD_SCAN -> configurationTimeMetrics.put(BooleanMetrics.BUILD_SCAN_BUILD_REPORT, true)
BuildReportType.FILE -> configurationTimeMetrics.put(BooleanMetrics.FILE_BUILD_REPORT, true)
BuildReportType.HTTP -> configurationTimeMetrics.put(BooleanMetrics.HTTP_BUILD_REPORT, true)
BuildReportType.SINGLE_FILE -> configurationTimeMetrics.put(BooleanMetrics.SINGLE_FILE_BUILD_REPORT, true)
BuildReportType.TRY_K2_CONSOLE -> {}//ignore
}
}
if (isProjectIsolationEnabled) { //support project isolation - KT-58768
return configurationTimeMetrics
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.plugin.internal.ConfigurationTimePropertiesAc
import org.jetbrains.kotlin.gradle.plugin.internal.configurationTimePropertiesAccessor
import org.jetbrains.kotlin.gradle.plugin.internal.usedAtConfigurationTime
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatHandler.Companion.runSafe
import org.jetbrains.kotlin.gradle.report.BuildReportType
import org.jetbrains.kotlin.statistics.BuildSessionLogger
import org.jetbrains.kotlin.statistics.BuildSessionLogger.Companion.STATISTICS_FOLDER_NAME
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
@@ -195,7 +196,7 @@ internal abstract class KotlinBuildStatsService internal constructor() : IStatis
/**
* Collect project general and configuration metrics at the start of a build
*/
open fun collectStartMetrics(project: Project, isProjectIsolationEnabled: Boolean): MetricContainer = MetricContainer()
open fun collectStartMetrics(project: Project, isProjectIsolationEnabled: Boolean, buildReportOutputs: List<BuildReportType>): MetricContainer = MetricContainer()
open fun recordProjectsEvaluated(gradle: Gradle) {}
}
@@ -312,7 +313,7 @@ internal class DefaultKotlinBuildStatsService internal constructor(
KotlinBuildStatHandler().reportBuildFinished(sessionLogger, action, buildFailed, configurationTimeMetrics)
}
override fun collectStartMetrics(project: Project, isProjectIsolationEnabled: Boolean) =
KotlinBuildStatHandler().collectConfigurationTimeMetrics(project, sessionLogger, isProjectIsolationEnabled)
override fun collectStartMetrics(project: Project, isProjectIsolationEnabled: Boolean, buildReportOutputs: List<BuildReportType>) =
KotlinBuildStatHandler().collectConfigurationTimeMetrics(project, sessionLogger, isProjectIsolationEnabled, buildReportOutputs)
}
@@ -48,6 +48,12 @@ enum class BooleanMetrics(val type: BooleanOverridePolicy, val anonymization: Bo
JS_KLIB_INCREMENTAL(OR, SAFE),
JS_IR_INCREMENTAL(OR, SAFE),
//Build reports
FILE_BUILD_REPORT(OR, SAFE),
BUILD_SCAN_BUILD_REPORT(OR, SAFE),
HTTP_BUILD_REPORT(OR, SAFE),
SINGLE_FILE_BUILD_REPORT(OR, SAFE),
//Dokka features
ENABLED_DOKKA(OR, SAFE),
ENABLED_DOKKA_HTML(OR, SAFE),