Index diagnostic: use system tyme zone for times in the diagnostic reports.

GitOrigin-RevId: ca77484bd2d7b40f02aa8b9c18871b522a8e9a96
This commit is contained in:
Sergey Patrikeev
2020-06-08 14:40:58 +03:00
committed by intellij-monorepo-bot
parent e91501eaa4
commit c02ca05a5e
4 changed files with 44 additions and 33 deletions
@@ -2,9 +2,7 @@
package com.intellij.util.indexing.diagnostic.dto
import com.intellij.util.indexing.diagnostic.*
import com.intellij.util.text.DateFormatUtil
import java.time.Duration
import java.time.Instant
fun TimeNano.toMillis(): TimeMillis = this / 1_000_000
@@ -12,8 +10,6 @@ fun TimeNano.toMillis(): TimeMillis = this / 1_000_000
// Can be used to skip int value from JSON if it is equal to 0 (to not pollute the JSON report).
typealias PositiveInt = Int?
typealias PresentableTime = String
fun Int.toPositiveInt() = takeIf { it > 0 }
fun FileProviderIndexStatistics.toJson(): JsonFileProviderIndexStatistics {
@@ -71,23 +67,20 @@ private fun FileProviderIndexStatistics.aggregateStatsPerIndexer(): List<JsonFil
}
}
private fun Instant.toPresentableTime(): PresentableTime =
DateFormatUtil.getIso8601Format().format(this.toEpochMilli())
fun ProjectIndexingHistory.IndexingTimes.toJson() =
JsonProjectIndexingHistoryTimes(
JsonDuration(Duration.between(indexingStart, indexingEnd).toNanos()),
JsonDuration(Duration.between(scanFilesStart, scanFilesEnd).toNanos()),
JsonDuration(Duration.between(pushPropertiesStart, pushPropertiesEnd).toNanos()),
JsonDuration(Duration.between(indexExtensionsStart, indexExtensionsEnd).toNanos()),
indexingStart!!.toPresentableTime(),
indexingEnd!!.toPresentableTime(),
pushPropertiesStart!!.toPresentableTime(),
pushPropertiesEnd!!.toPresentableTime(),
indexExtensionsStart!!.toPresentableTime(),
indexExtensionsEnd!!.toPresentableTime(),
scanFilesStart!!.toPresentableTime(),
scanFilesEnd!!.toPresentableTime()
JsonDateTime(pushPropertiesStart!!),
JsonDateTime(pushPropertiesEnd!!),
JsonDateTime(scanFilesStart!!),
JsonDateTime(scanFilesEnd!!),
JsonDateTime(indexExtensionsStart!!),
JsonDateTime(indexExtensionsEnd!!),
JsonDateTime(indexingStart!!),
JsonDateTime(indexingEnd!!)
)
private fun calculatePercentages(part: Long, total: Long): JsonPercentages =
@@ -0,0 +1,23 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.util.indexing.diagnostic.dto
import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
import com.fasterxml.jackson.databind.annotation.JsonSerialize
import java.time.Instant
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
@JsonSerialize(using = JsonDateTime.Companion::class)
data class JsonDateTime(val instant: Instant) {
companion object : JsonSerializer<JsonDateTime>() {
override fun serialize(value: JsonDateTime, gen: JsonGenerator, serializers: SerializerProvider?) {
gen.writeString(value.presentableDateTime())
}
}
fun presentableDateTime(): String =
ZonedDateTime.ofInstant(instant, ZoneId.systemDefault()).format(DateTimeFormatter.RFC_1123_DATE_TIME)
}
@@ -3,15 +3,13 @@ package com.intellij.util.indexing.diagnostic.dto
import com.intellij.openapi.application.ApplicationInfo
import com.intellij.openapi.util.SystemInfo
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
import java.time.Instant
data class JsonIndexDiagnosticAppInfo(
val build: String,
val buildDate: String,
val buildDate: JsonDateTime,
val productCode: String,
val generated: String,
val generated: JsonDateTime,
val os: String,
val runtime: String
) {
@@ -20,12 +18,9 @@ data class JsonIndexDiagnosticAppInfo(
val appInfo = ApplicationInfo.getInstance()
return JsonIndexDiagnosticAppInfo(
build = appInfo.build.asStringWithoutProductCode(),
buildDate = ZonedDateTime.ofInstant(
appInfo.buildDate.toInstant(), ZoneId.systemDefault()
).format(DateTimeFormatter.RFC_1123_DATE_TIME),
buildDate = JsonDateTime(appInfo.buildDate.toInstant()),
productCode = appInfo.build.productCode,
generated = ZonedDateTime.now().format(
DateTimeFormatter.RFC_1123_DATE_TIME),
generated = JsonDateTime(Instant.now()),
os = SystemInfo.getOsNameAndVersion(),
runtime = SystemInfo.JAVA_VENDOR + " " + SystemInfo.JAVA_VERSION + " " + SystemInfo.JAVA_RUNTIME_VERSION
)
@@ -8,12 +8,12 @@ data class JsonProjectIndexingHistoryTimes(
val pushPropertiesTime: JsonDuration,
val indexExtensionsTime: JsonDuration,
val indexingStart: PresentableTime,
val indexingEnd: PresentableTime,
val pushPropertiesStart: PresentableTime,
val pushPropertiesEnd: PresentableTime,
val indexExtensionsStart: PresentableTime,
val indexExtensionsEnd: PresentableTime,
val scanFilesStart: PresentableTime,
val scanFilesEnd: PresentableTime
val pushPropertiesStart: JsonDateTime,
val pushPropertiesEnd: JsonDateTime,
val scanFilesStart: JsonDateTime,
val scanFilesEnd: JsonDateTime,
val indexExtensionsStart: JsonDateTime,
val indexExtensionsEnd: JsonDateTime,
val indexingStart: JsonDateTime,
val indexingEnd: JsonDateTime
)