Add property to protect sensitive data in http reports
#KT-53773 Fixed
This commit is contained in:
+3
@@ -97,6 +97,9 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
|||||||
val buildReportHttpPassword: String?
|
val buildReportHttpPassword: String?
|
||||||
get() = this.property("kotlin.build.report.http.password")
|
get() = this.property("kotlin.build.report.http.password")
|
||||||
|
|
||||||
|
val buildReportHttpVerboseEnvironment: Boolean
|
||||||
|
get() = property("kotlin.build.report.http.verbose_environment")?.toBoolean() ?: false
|
||||||
|
|
||||||
val buildReportBuildScanCustomValuesLimit: Int
|
val buildReportBuildScanCustomValuesLimit: Int
|
||||||
get() = property("kotlin.build.report.build_scan.custom_values_limit")?.toInt() ?: 1000
|
get() = property("kotlin.build.report.build_scan.custom_values_limit")?.toInt() ?: 1000
|
||||||
|
|
||||||
|
|||||||
+8
-7
@@ -12,6 +12,7 @@ import java.text.SimpleDateFormat
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
//Sensitive data. This object is used directly for statistic via http
|
//Sensitive data. This object is used directly for statistic via http
|
||||||
|
private val formatter = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").also { it.timeZone = TimeZone.getTimeZone("UTC")}
|
||||||
data class CompileStatisticsData(
|
data class CompileStatisticsData(
|
||||||
val version: Int = 2,
|
val version: Int = 2,
|
||||||
val projectName: String?,
|
val projectName: String?,
|
||||||
@@ -32,11 +33,8 @@ data class CompileStatisticsData(
|
|||||||
val buildTimesMetrics: Map<BuildTime, Long>,
|
val buildTimesMetrics: Map<BuildTime, Long>,
|
||||||
val performanceMetrics: Map<BuildPerformanceMetric, Long>,
|
val performanceMetrics: Map<BuildPerformanceMetric, Long>,
|
||||||
val type: String = BuildDataType.TASK_DATA.name
|
val type: String = BuildDataType.TASK_DATA.name
|
||||||
) {
|
)
|
||||||
companion object {
|
|
||||||
private val formatter = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").also { it.timeZone = TimeZone.getTimeZone("UTC")}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum class StatTag {
|
enum class StatTag {
|
||||||
ABI_SNAPSHOT,
|
ABI_SNAPSHOT,
|
||||||
@@ -58,7 +56,7 @@ enum class BuildDataType {
|
|||||||
data class GradleBuildStartParameters(
|
data class GradleBuildStartParameters(
|
||||||
val tasks: List<String>,
|
val tasks: List<String>,
|
||||||
val excludedTasks: Set<String>,
|
val excludedTasks: Set<String>,
|
||||||
val currentDir: String,
|
val currentDir: String?,
|
||||||
val projectProperties: List<String>,
|
val projectProperties: List<String>,
|
||||||
val systemProperties: List<String>,
|
val systemProperties: List<String>,
|
||||||
) : java.io.Serializable
|
) : java.io.Serializable
|
||||||
@@ -70,7 +68,10 @@ data class BuildFinishStatisticsData(
|
|||||||
val buildUuid: String = "Unset",
|
val buildUuid: String = "Unset",
|
||||||
val label: String?,
|
val label: String?,
|
||||||
val totalTime: Long,
|
val totalTime: Long,
|
||||||
val type: String = BuildDataType.BUILD_DATA.name
|
val type: String = BuildDataType.BUILD_DATA.name,
|
||||||
|
val finishTime: Long,
|
||||||
|
val timestamp: String = formatter.format(finishTime),
|
||||||
|
val hostName: String? = "Unset",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+21
-3
@@ -93,7 +93,7 @@ abstract class BuildReportsService : BuildService<BuildReportsService.Parameters
|
|||||||
}
|
}
|
||||||
|
|
||||||
//It's expected that bad internet connection can cause a significant delay for big project
|
//It's expected that bad internet connection can cause a significant delay for big project
|
||||||
executorService.shutdownNow()
|
executorService.shutdown()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onFinish(event: FinishEvent?) {
|
override fun onFinish(event: FinishEvent?) {
|
||||||
@@ -111,16 +111,34 @@ abstract class BuildReportsService : BuildService<BuildReportsService.Parameters
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun reportBuildFinish() {
|
private fun reportBuildFinish() {
|
||||||
|
val finishTime = System.nanoTime()
|
||||||
val buildFinishData = BuildFinishStatisticsData(
|
val buildFinishData = BuildFinishStatisticsData(
|
||||||
projectName = parameters.projectName.get(),
|
projectName = parameters.projectName.get(),
|
||||||
startParameters = parameters.startParameters.get(),
|
startParameters = parameters.startParameters.get()
|
||||||
|
.includeVerboseEnvironment(parameters.reportingSettings.get().httpReportSettings?.verboseEnvironment ?: false),
|
||||||
buildUuid = buildUuid,
|
buildUuid = buildUuid,
|
||||||
label = parameters.label.orNull,
|
label = parameters.label.orNull,
|
||||||
totalTime = (System.nanoTime() - startTime) / 1_000_000
|
totalTime = (finishTime - startTime) / 1_000_000,
|
||||||
|
finishTime = finishTime,
|
||||||
|
hostName = hostName
|
||||||
)
|
)
|
||||||
sendDataViaHttp(buildFinishData)
|
sendDataViaHttp(buildFinishData)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun GradleBuildStartParameters.includeVerboseEnvironment(verboseEnvironment: Boolean): GradleBuildStartParameters {
|
||||||
|
return if (verboseEnvironment) {
|
||||||
|
this
|
||||||
|
} else {
|
||||||
|
GradleBuildStartParameters(
|
||||||
|
tasks = this.tasks,
|
||||||
|
excludedTasks = this.excludedTasks,
|
||||||
|
currentDir = null,
|
||||||
|
projectProperties = emptyList(),
|
||||||
|
systemProperties = emptyList()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun addHttpReport(event: FinishEvent?) {
|
private fun addHttpReport(event: FinishEvent?) {
|
||||||
if (parameters.reportingSettings.get().httpReportSettings != null) {
|
if (parameters.reportingSettings.get().httpReportSettings != null) {
|
||||||
if (event is TaskFinishEvent) {
|
if (event is TaskFinishEvent) {
|
||||||
|
|||||||
+3
-2
@@ -34,7 +34,8 @@ data class FileReportSettings(
|
|||||||
data class HttpReportSettings(
|
data class HttpReportSettings(
|
||||||
val url: String,
|
val url: String,
|
||||||
val password: String?,
|
val password: String?,
|
||||||
val user: String?
|
val user: String?,
|
||||||
|
val verboseEnvironment: Boolean
|
||||||
) : Serializable {
|
) : Serializable {
|
||||||
companion object {
|
companion object {
|
||||||
const val serialVersionUID: Long = 0
|
const val serialVersionUID: Long = 0
|
||||||
@@ -42,7 +43,7 @@ data class HttpReportSettings(
|
|||||||
}
|
}
|
||||||
|
|
||||||
data class BuildScanSettings(
|
data class BuildScanSettings(
|
||||||
val customValueLimit: Int
|
val customValueLimit: Int,
|
||||||
): Serializable {
|
): Serializable {
|
||||||
companion object {
|
companion object {
|
||||||
const val serialVersionUID: Long = 0
|
const val serialVersionUID: Long = 0
|
||||||
|
|||||||
+1
-1
@@ -32,7 +32,7 @@ internal fun reportingSettings(rootProject: Project): ReportingSettings {
|
|||||||
?: throw IllegalStateException("Can't configure http report: '${properties.buildReportHttpUrlProperty}' property is mandatory")
|
?: throw IllegalStateException("Can't configure http report: '${properties.buildReportHttpUrlProperty}' property is mandatory")
|
||||||
val password = properties.buildReportHttpPassword
|
val password = properties.buildReportHttpPassword
|
||||||
val user = properties.buildReportHttpUser
|
val user = properties.buildReportHttpUser
|
||||||
HttpReportSettings(url, password, user)
|
HttpReportSettings(url, password, user, properties.buildReportHttpVerboseEnvironment)
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user