diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index 3a9ba69cb0b..58be2cfe190 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -93,6 +93,7 @@ abstract class DefaultKotlinBasePlugin : KotlinBasePlugin { BuildMetricsReporterService.registerIfAbsent(project)?.also { BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(it) } + HttpReportService.registerIfAbsent(project, kotlinPluginVersion)?.also { BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(it) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/CompileStatisticsData.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/CompileStatisticsData.kt index f2cf7c6f8ed..a70cd884e9b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/CompileStatisticsData.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/CompileStatisticsData.kt @@ -46,4 +46,22 @@ enum class StatTag { KOTLIN_DEBUG } +//Sensitive data. This object is used directly for statistic via http +data class GradleBuildStartParameters( + val tasks: List, + val excludedTasks: Set, + val currentDir: String, + val projectProperties: List, + val systemProperties: List, +) : java.io.Serializable + +//Sensitive data. This object is used directly for statistic via http +data class BuildFinishData( + val startParameters: GradleBuildStartParameters, + val buildUuid: String = "Unset", + val label: String?, + val totalTime: Long, +) + + diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildMetricsReporterService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildMetricsReporterService.kt index 936ee60d703..85198138a9a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildMetricsReporterService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildMetricsReporterService.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.build.report.metrics.BuildMetrics import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter import org.jetbrains.kotlin.build.report.metrics.BuildTime import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskExecutionResults +import org.jetbrains.kotlin.gradle.plugin.stat.GradleBuildStartParameters import org.jetbrains.kotlin.gradle.report.data.BuildExecutionData import org.jetbrains.kotlin.gradle.report.data.BuildExecutionDataProcessor import org.jetbrains.kotlin.gradle.report.data.BuildOperationRecord @@ -31,7 +32,7 @@ abstract class BuildMetricsReporterService : BuildService - var startParameters: List + var startParameters: GradleBuildStartParameters var reportingSettings: ReportingSettings } @@ -113,13 +114,13 @@ abstract class BuildMetricsReporterService : BuildService() - startParameters.add("tasks = ${it.taskRequests.joinToString { task -> task.args.toString() }}") - startParameters.add("excluded tasks = ${it.excludedTaskNames}") - startParameters.add("current dir = ${it.currentDir}") - startParameters.add("project properties args = ${it.projectProperties}") - startParameters.add("system properties args = ${it.systemPropertiesArgs}") - startParameters + GradleBuildStartParameters( + tasks = it.taskRequests.map { it.args.toString() }, + excludedTasks = it.excludedTaskNames, + currentDir = it.currentDir.path, + projectProperties = it.projectProperties.map {(key, value) -> "$key: $value"}, + systemProperties = it.systemPropertiesArgs.map {(key, value) -> "$key: $value"}, + ) } fun registerIfAbsent(project: Project): Provider? { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/HttpReportService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/HttpReportService.kt index a7928a84833..9eeb6686b6a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/HttpReportService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/HttpReportService.kt @@ -14,8 +14,11 @@ import org.gradle.api.services.BuildServiceParameters import org.gradle.tooling.events.FinishEvent import org.gradle.tooling.events.OperationCompletionListener import org.gradle.tooling.events.task.TaskFinishEvent +import org.jetbrains.kotlin.gradle.plugin.stat.BuildFinishData import org.jetbrains.kotlin.gradle.plugin.stat.CompileStatisticsData +import org.jetbrains.kotlin.gradle.plugin.stat.GradleBuildStartParameters import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatListener.Companion.prepareData +import org.jetbrains.kotlin.gradle.report.BuildMetricsReporterService.Companion.getStartParameters import java.io.IOException import java.net.HttpURLConnection import java.net.URL @@ -29,12 +32,15 @@ abstract class HttpReportService : BuildService, var executorService: ExecutorService = Executors.newSingleThreadExecutor() + val startTime = System.nanoTime() + interface Parameters : BuildServiceParameters { var label: String? var uuid: String var projectName: String var httpSettings: HttpReportSettings var kotlinVersion: String + var startParameters: GradleBuildStartParameters } private val log = Logging.getLogger(this.javaClass) @@ -51,6 +57,7 @@ abstract class HttpReportService : BuildService, } override fun close() { + executorService.submit { reportBuildFinish() } executorService.shutdown() } @@ -70,6 +77,7 @@ abstract class HttpReportService : BuildService, it.parameters.uuid = UUID.randomUUID().toString() it.parameters.httpSettings = httpSettings it.parameters.kotlinVersion = kotlinVersion + it.parameters.startParameters = getStartParameters(project) }!! } @@ -77,7 +85,7 @@ abstract class HttpReportService : BuildService, } - fun report(data: CompileStatisticsData) { + fun report(data: Any) { val elapsedTime = measureTimeMillis { if (invalidUrl) { return @@ -115,6 +123,16 @@ abstract class HttpReportService : BuildService, log.debug("Report statistic by http takes $elapsedTime ms") } + private fun reportBuildFinish() { + val buildFinishData = BuildFinishData( + startParameters = parameters.startParameters, + buildUuid = parameters.uuid, + label = parameters.label, + totalTime = (System.nanoTime() - startTime) / 1_000_000 + ) + report(buildFinishData) + } + private fun checkResponseAndLog(connection: HttpURLConnection) { val isResponseBad = connection.responseCode !in 200..299 if (isResponseBad) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/PlainTextBuildReportWriter.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/PlainTextBuildReportWriter.kt index ee8b512341c..22acd08dda5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/PlainTextBuildReportWriter.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/PlainTextBuildReportWriter.kt @@ -74,7 +74,13 @@ internal class PlainTextBuildReportWriter( private fun printBuildInfo(build: BuildExecutionData) { p.withIndent("Gradle start parameters:") { - build.startParameters.forEach { p.println(it) } + build.startParameters.let { + p.println("tasks = ${it.tasks}") + p.println("excluded tasks = ${it.excludedTasks}") + p.println("current dir = ${it.currentDir}") + p.println("project properties args = ${it.projectProperties}") + p.println(" system properties args = ${it.systemProperties}") + } } p.println() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/data/BuildExecutionData.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/data/BuildExecutionData.kt index 6687c961dd7..68a1a88750b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/data/BuildExecutionData.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/data/BuildExecutionData.kt @@ -6,9 +6,10 @@ package org.jetbrains.kotlin.gradle.report.data import org.jetbrains.kotlin.build.report.metrics.BuildMetrics +import org.jetbrains.kotlin.gradle.plugin.stat.GradleBuildStartParameters class BuildExecutionData( - val startParameters: Collection, + val startParameters: GradleBuildStartParameters, val failureMessages: List, val buildOperationRecord: Collection ) {