GTW-1136 dump format changed to json

GitOrigin-RevId: 5181fbc2ece0ca7ae54fc928ddfb01d2459ad3b9
This commit is contained in:
Eugene Lazurin
2022-08-18 18:53:15 +02:00
committed by intellij-monorepo-bot
parent b975923710
commit 02cfe4fd74
3 changed files with 88 additions and 74 deletions

View File

@@ -1,73 +0,0 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.ide
import com.intellij.idea.AppExitCodes
import com.intellij.openapi.application.ModernApplicationStarter
import java.io.File
import java.lang.management.ManagementFactory
import kotlin.system.exitProcess
internal class DumpLaunchParametersStarter : ModernApplicationStarter() {
override val commandName: String
get() = "dump-launch-parameters"
override fun premain(args: List<String>) {
val argsMap = args.fold(Pair(emptyMap<String, List<String>>(), "")) { (map, lastKey), elem ->
if (elem.startsWith("-")) Pair(map + (elem to emptyList()), elem)
else Pair(map + (lastKey to map.getOrDefault(lastKey, emptyList()) + elem), lastKey)
}.first
if (!argsMap.containsKey("-f") || argsMap["-f"]!!.isEmpty()) {
exitProcess(AppExitCodes.STARTUP_EXCEPTION)
}
val outputDir = argsMap["-f"]!![0]
val launchParametersDump = File(outputDir)
writeVmOptionsInFile(launchParametersDump)
writeCommandLineArgumentsInFile(launchParametersDump, args)
if (argsMap.containsKey("-p") && !argsMap["-p"]!!.isEmpty()) {
launchParametersDump.appendText("[javaSystemProperties]\n")
argsMap["-p"]?.forEach { writeJavaSystemPropertyInFile(launchParametersDump, it) }
}
if (argsMap.containsKey("-e") && !argsMap["-e"]!!.isEmpty()) {
launchParametersDump.appendText("[environmentVariables]\n")
argsMap["-e"]?.forEach { writeEnvironmentVariableInFile(launchParametersDump, it) }
}
exitProcess(0)
}
override suspend fun start(args: List<String>) {
exitProcess(0)
}
private fun writeVmOptionsInFile(dumpFile: File) {
val vmOptions = ManagementFactory.getRuntimeMXBean().inputArguments
dumpFile.appendText("[vmOptions]\n")
vmOptions.forEachIndexed { i, vmOption ->
dumpFile.appendText("vmOption.$i=$vmOption\n")
}
}
private fun writeCommandLineArgumentsInFile(dumpFile: File, args: List<String>) {
dumpFile.appendText("[arguments]\n")
args.forEachIndexed { i, argument ->
dumpFile.appendText("argument.$i=$argument\n")
}
}
private fun writeJavaSystemPropertyInFile(dumpFile: File, property: String) {
val javaProperty = System.getProperty(property)
dumpFile.appendText("$property=$javaProperty\n")
}
private fun writeEnvironmentVariableInFile(dumpFile: File, envVariable: String) {
val environmentVariable = System.getenv(envVariable)
dumpFile.appendText("$envVariable=$environmentVariable\n")
}
}

View File

@@ -22,7 +22,7 @@
<appStarter id="warmup" implementation="com.intellij.warmup.ProjectIndexesWarmup"/>
<appStarter id="buildEventsScheme" implementation="com.intellij.internal.statistic.eventLog.events.scheme.EventsSchemeBuilderAppStarter"/>
<appStarter id="dumpActions" implementation="com.intellij.internal.statistic.utils.DumpActionsAppStarter"/>
<appStarter id="dumpLaunchParameters" implementation="com.intellij.ide.DumpLaunchParametersStarter"/>
<appStarter id="dumpLaunchParameters" implementation="com.intellij.internal.statistic.utils.DumpLaunchParametersStarter"/>
<protocolHandler implementation="com.intellij.openapi.application.JBProtocolHandler"/>
<groupConfigurable id="appearance" weight="70"

View File

@@ -0,0 +1,87 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.internal.statistic.utils
import com.google.gson.Gson
import com.intellij.idea.AppExitCodes
import com.intellij.openapi.application.ModernApplicationStarter
import java.io.File
import java.lang.management.ManagementFactory
import kotlin.system.exitProcess
data class ParameterValue(
val parameterName: String,
val parameterValue: String
)
data class LaunchParameters(
val groupOfParametersName: String,
val parameters: MutableList<ParameterValue>
)
internal class DumpLaunchParametersStarter : ModernApplicationStarter() {
override val commandName: String
get() = "dump-launch-parameters"
override fun premain(args: List<String>) {
val argsMap = args.fold(Pair(emptyMap<String, List<String>>(), "")) { (map, lastKey), elem ->
if (elem.startsWith("-")) Pair(map + (elem to emptyList()), elem)
else Pair(map + (lastKey to map.getOrDefault(lastKey, emptyList()) + elem), lastKey)
}.first
if (!argsMap.containsKey("-f") || argsMap["-f"]!!.isEmpty()) {
exitProcess(AppExitCodes.STARTUP_EXCEPTION)
}
val outputFile = argsMap["-f"]!![0]
val launchParametersDump = File(outputFile)
val launchParameters = mutableListOf<LaunchParameters>()
launchParameters.add(getVmOptions())
launchParameters.add(getCommandLineArguments(args))
if (argsMap.containsKey("-p") && !argsMap["-p"]!!.isEmpty()) {
val javaSystemProperties: MutableList<ParameterValue> = mutableListOf()
argsMap["-p"]?.forEach { javaSystemProperties.add(getJavaSystemProperty(it)) }
launchParameters.add(LaunchParameters("javaSystemProperties", javaSystemProperties))
}
if (argsMap.containsKey("-e") && !argsMap["-e"]!!.isEmpty()) {
val environmentVariables: MutableList<ParameterValue> = mutableListOf()
argsMap["-e"]?.forEach { environmentVariables.add(getEnvironmentVariable(it)) }
launchParameters.add(LaunchParameters("environmentVariables", environmentVariables))
}
launchParametersDump.appendText(Gson().toJson(launchParameters))
exitProcess(0)
}
override suspend fun start(args: List<String>) {
exitProcess(0)
}
private fun getVmOptions(): LaunchParameters {
val vmOptionsFromJava = ManagementFactory.getRuntimeMXBean().inputArguments
val vmOptionsParameters: MutableList<ParameterValue> = mutableListOf()
vmOptionsFromJava.forEachIndexed { i, vmOption ->
vmOptionsParameters.add(ParameterValue("vmOption.$i", vmOption))
}
return LaunchParameters("vmOptions", vmOptionsParameters)
}
private fun getCommandLineArguments(args: List<String>): LaunchParameters {
val arguments: MutableList<ParameterValue> = mutableListOf()
args.forEachIndexed { i, argument ->
arguments.add(ParameterValue("argument.$i", argument))
}
return LaunchParameters("arguments", arguments)
}
private fun getJavaSystemProperty(property: String): ParameterValue {
return ParameterValue(property, System.getProperty(property))
}
private fun getEnvironmentVariable(envVariable: String): ParameterValue {
return ParameterValue(envVariable, System.getenv(envVariable))
}
}