mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[json] IJPL-173495 Report failures to FUS to be able to investigate a missing downloads problem faster
GitOrigin-RevId: 109ad24b92cd2ebd43b24f20279d2725a61d4121
This commit is contained in:
committed by
intellij-monorepo-bot
parent
8d61d23a40
commit
ea77354891
@@ -120,6 +120,7 @@
|
||||
|
||||
<pluginSuggestionProvider implementation="com.jetbrains.jsonSchema.wiremock.WireMockSuggestionProvider"/>
|
||||
<statistics.counterUsagesCollector implementationClass="com.jetbrains.jsonSchema.fus.JsonFeatureUsageCollector"/>
|
||||
<statistics.counterUsagesCollector implementationClass="com.jetbrains.jsonSchema.fus.JsonHttpFileLoadingUsageCollector"/>
|
||||
<statistics.validation.customValidationRule implementation="com.jetbrains.jsonSchema.fus.JsonSchemaIdValidationRule"/>
|
||||
</extensions>
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.jetbrains.jsonSchema.fus
|
||||
|
||||
import com.intellij.internal.statistic.eventLog.EventLogGroup
|
||||
import com.intellij.internal.statistic.eventLog.events.EventFields
|
||||
import com.intellij.internal.statistic.service.fus.collectors.CounterUsagesCollector
|
||||
import com.intellij.openapi.vfs.impl.http.RemoteFileState
|
||||
|
||||
internal object JsonHttpFileLoadingUsageCollector : CounterUsagesCollector() {
|
||||
private val jsonHttpFileResolveGroup = EventLogGroup(
|
||||
id = "json.http.file.resolve",
|
||||
version = 1,
|
||||
)
|
||||
|
||||
internal val jsonSchemaHighlightingSessionData =
|
||||
jsonHttpFileResolveGroup.registerVarargEvent(
|
||||
"json.schema.highlighting.session.finished",
|
||||
JsonHttpFileNioFile,
|
||||
JsonHttpFileNioFileCanBeRead,
|
||||
JsonHttpFileNioFileLength,
|
||||
JsonHttpFileVfsFile,
|
||||
JsonHttpFileSyncRefreshVfsFile,
|
||||
JsonHttpFileVfsFileValidity,
|
||||
JsonHttpFileDownloadState
|
||||
)
|
||||
|
||||
override fun getGroup(): EventLogGroup = jsonHttpFileResolveGroup
|
||||
}
|
||||
|
||||
internal val JsonHttpFileNioFile = EventFields.Boolean("nio_file_resolve_status", "Remote schema found via nio.file api")
|
||||
internal val JsonHttpFileNioFileCanBeRead = EventFields.Boolean("nio_file_can_read_status", "Remote schema found via nio.file api can be read")
|
||||
internal val JsonHttpFileNioFileLength = EventFields.RoundedLong("nio_file_length_status", "Remote schema found via nio.file api length")
|
||||
internal val JsonHttpFileVfsFile = EventFields.Boolean("vfs_file_resolve_status", "Remote schema found via VFS api")
|
||||
internal val JsonHttpFileSyncRefreshVfsFile = EventFields.Boolean("vfs_refresh_file_resolve_status", "Remote schema found via VFS api after explicit synchronous refresh")
|
||||
internal val JsonHttpFileVfsFileValidity = EventFields.Boolean("vfs_file_validity_status", "Remote schema VFS file validity")
|
||||
internal val JsonHttpFileDownloadState = EventFields.Enum<JsonRemoteSchemaDownloadState>("http_file_download_status", "Remote file download state")
|
||||
|
||||
internal enum class JsonRemoteSchemaDownloadState {
|
||||
DOWNLOADING_NOT_STARTED,
|
||||
DOWNLOADING_IN_PROGRESS,
|
||||
DOWNLOADED,
|
||||
ERROR_OCCURRED,
|
||||
NO_STATE;
|
||||
|
||||
companion object {
|
||||
fun fromRemoteFileState(state: RemoteFileState?): JsonRemoteSchemaDownloadState {
|
||||
return when (state) {
|
||||
null -> NO_STATE
|
||||
RemoteFileState.DOWNLOADING_NOT_STARTED -> DOWNLOADING_NOT_STARTED
|
||||
RemoteFileState.DOWNLOADING_IN_PROGRESS -> DOWNLOADING_IN_PROGRESS
|
||||
RemoteFileState.DOWNLOADED -> DOWNLOADED
|
||||
RemoteFileState.ERROR_OCCURRED -> ERROR_OCCURRED
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.openapi.vfs.impl.http.HttpVirtualFile
|
||||
import com.jetbrains.jsonSchema.fus.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@@ -27,6 +28,15 @@ internal fun logSchemaDownloadFailureDiagnostics(schemaFile: HttpVirtualFile, pr
|
||||
val anotherFileLookupAttempt = VfsUtil.findFile(schemaFile.toNioPath(), true)
|
||||
val isNull = anotherFileLookupAttempt == null
|
||||
val isValid = anotherFileLookupAttempt?.isValid
|
||||
JsonHttpFileLoadingUsageCollector.jsonSchemaHighlightingSessionData.log(
|
||||
JsonHttpFileNioFile.with(nioFileExists),
|
||||
JsonHttpFileNioFileCanBeRead.with(canRead),
|
||||
JsonHttpFileNioFileLength.with(nioFileLength),
|
||||
JsonHttpFileVfsFile.with(schemaFile.fileInfo?.localFile != null),
|
||||
JsonHttpFileSyncRefreshVfsFile.with(anotherFileLookupAttempt != null),
|
||||
JsonHttpFileVfsFileValidity.with(isValid ?: false),
|
||||
JsonHttpFileDownloadState.with(JsonRemoteSchemaDownloadState.fromRemoteFileState(stateOrNull))
|
||||
)
|
||||
Logger.getInstance(schemaFile.javaClass).error("$instantData, syncRefreshFileIsNull: $isNull, syncRefreshFileIsValid: $isValid")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user