Report build metrics in the end of build
This commit is contained in:
+1
@@ -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)
|
||||
}
|
||||
|
||||
+18
@@ -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<String>,
|
||||
val excludedTasks: Set<String>,
|
||||
val currentDir: String,
|
||||
val projectProperties: List<String>,
|
||||
val systemProperties: List<String>,
|
||||
) : 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,
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
+9
-8
@@ -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<BuildMetricsReporterSe
|
||||
|
||||
interface Parameters : BuildServiceParameters {
|
||||
var buildDataProcessors: List<BuildExecutionDataProcessor>
|
||||
var startParameters: List<String>
|
||||
var startParameters: GradleBuildStartParameters
|
||||
var reportingSettings: ReportingSettings
|
||||
}
|
||||
|
||||
@@ -113,13 +114,13 @@ abstract class BuildMetricsReporterService : BuildService<BuildMetricsReporterSe
|
||||
companion object {
|
||||
|
||||
fun getStartParameters(project: Project) = project.gradle.startParameter.let {
|
||||
val startParameters = arrayListOf<String>()
|
||||
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<BuildMetricsReporterService>? {
|
||||
|
||||
+19
-1
@@ -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<HttpReportService.Parameters>,
|
||||
|
||||
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<HttpReportService.Parameters>,
|
||||
}
|
||||
|
||||
override fun close() {
|
||||
executorService.submit { reportBuildFinish() }
|
||||
executorService.shutdown()
|
||||
}
|
||||
|
||||
@@ -70,6 +77,7 @@ abstract class HttpReportService : BuildService<HttpReportService.Parameters>,
|
||||
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<HttpReportService.Parameters>,
|
||||
|
||||
}
|
||||
|
||||
fun report(data: CompileStatisticsData) {
|
||||
fun report(data: Any) {
|
||||
val elapsedTime = measureTimeMillis {
|
||||
if (invalidUrl) {
|
||||
return
|
||||
@@ -115,6 +123,16 @@ abstract class HttpReportService : BuildService<HttpReportService.Parameters>,
|
||||
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) {
|
||||
|
||||
+7
-1
@@ -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()
|
||||
|
||||
|
||||
+2
-1
@@ -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<String>,
|
||||
val startParameters: GradleBuildStartParameters,
|
||||
val failureMessages: List<String?>,
|
||||
val buildOperationRecord: Collection<BuildOperationRecord>
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user