mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 03:21:12 +07:00
FUS: migrate "terminalShell" to the new API (IDEA-268269)
GitOrigin-RevId: 90a04f0ccbaa743704f548aad21e2d3a62bc822f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
db2a35fff9
commit
bcbabd5a90
@@ -1,12 +1,12 @@
|
||||
// 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.internal.statistic.collectors.fus
|
||||
|
||||
import com.intellij.internal.statistic.eventLog.FeatureUsageData
|
||||
import com.intellij.internal.statistic.eventLog.events.EventPair
|
||||
import com.intellij.openapi.project.Project
|
||||
|
||||
interface TerminalFusAwareHandler {
|
||||
/**
|
||||
* Fill data to be sent to statistic collector server
|
||||
*/
|
||||
fun fillData(project: Project, workingDirectory: String?, localSession: Boolean, command: String, data: FeatureUsageData)
|
||||
fun fillData(project: Project, workingDirectory: String?, localSession: Boolean, command: String, data: MutableList<EventPair<*>>)
|
||||
}
|
||||
@@ -411,8 +411,9 @@ object EventFields {
|
||||
}
|
||||
|
||||
@JvmField
|
||||
val Version = object : PrimitiveEventField<String?>() {
|
||||
override val name: String = "version"
|
||||
val Version = VersionClass("version")
|
||||
|
||||
class VersionClass(@NonNls override val name: String) : PrimitiveEventField<String?>() {
|
||||
override val validationRule: List<String>
|
||||
get() = listOf("{regexp#version}")
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
<projectService serviceImplementation="org.jetbrains.plugins.terminal.arrangement.TerminalArrangementManager"/>
|
||||
<applicationService serviceImplementation="org.jetbrains.plugins.terminal.arrangement.TerminalCommandHistoryManager"/>
|
||||
<statistics.counterUsagesCollector groupId="terminalShell" version="3"/>
|
||||
<statistics.counterUsagesCollector implementationClass="org.jetbrains.plugins.terminal.TerminalUsageTriggerCollector"/>
|
||||
|
||||
<registryKey key="terminal.Ctrl-E.opens.RecentFiles.popup" defaultValue="false"
|
||||
description="Ctrl+E in terminal opens 'Recent Files' popup on Linux/Windows"/>
|
||||
|
||||
@@ -5,8 +5,10 @@ import com.intellij.execution.Executor
|
||||
import com.intellij.ide.actions.runAnything.activity.RunAnythingCommandProvider
|
||||
import com.intellij.ide.actions.runAnything.activity.RunAnythingProvider
|
||||
import com.intellij.ide.actions.runAnything.activity.RunAnythingRecentProjectProvider
|
||||
import com.intellij.internal.statistic.collectors.fus.ClassNameRuleValidator
|
||||
import com.intellij.internal.statistic.collectors.fus.TerminalFusAwareHandler
|
||||
import com.intellij.internal.statistic.eventLog.FeatureUsageData
|
||||
import com.intellij.internal.statistic.eventLog.events.EventFields
|
||||
import com.intellij.internal.statistic.eventLog.events.EventPair
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys
|
||||
import com.intellij.openapi.actionSystem.DataContext
|
||||
import com.intellij.openapi.actionSystem.impl.SimpleDataContext
|
||||
@@ -57,13 +59,14 @@ private class RunAnythingTerminalBridge : TerminalShellCommandHandler, TerminalF
|
||||
}
|
||||
}
|
||||
|
||||
override fun fillData(project: Project, workingDirectory: String?, localSession: Boolean, command: String, data: FeatureUsageData) {
|
||||
override fun fillData(project: Project, workingDirectory: String?, localSession: Boolean, command: String, data: MutableList<EventPair<*>>) {
|
||||
val dataContext = createDataContext(project, localSession, workingDirectory)
|
||||
val runAnythingProvider = RunAnythingProvider.EP_NAME.extensionList
|
||||
.filter { checkForCLI(it) }
|
||||
.ifEmpty { return }
|
||||
.first { provider -> provider.findMatchingValue(dataContext, command) != null }
|
||||
|
||||
data.addData("runAnythingProvider", runAnythingProvider::class.java.name)
|
||||
data.add(EventFields.StringValidatedByCustomRule("runAnythingProvider",
|
||||
ClassNameRuleValidator::class.java).with(runAnythingProvider::class.java.name))
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,12 @@
|
||||
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.plugins.terminal
|
||||
|
||||
import com.intellij.internal.statistic.collectors.fus.ClassNameRuleValidator
|
||||
import com.intellij.internal.statistic.collectors.fus.TerminalFusAwareHandler
|
||||
import com.intellij.internal.statistic.eventLog.FeatureUsageData
|
||||
import com.intellij.internal.statistic.service.fus.collectors.FUCounterUsageLogger
|
||||
import com.intellij.internal.statistic.eventLog.EventLogGroup
|
||||
import com.intellij.internal.statistic.eventLog.events.EventFields
|
||||
import com.intellij.internal.statistic.eventLog.events.EventPair
|
||||
import com.intellij.internal.statistic.service.fus.collectors.CounterUsagesCollector
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.SystemInfo
|
||||
import com.intellij.openapi.util.Version
|
||||
@@ -11,17 +14,34 @@ import com.intellij.terminal.TerminalShellCommandHandler
|
||||
import com.intellij.util.PathUtil
|
||||
import java.util.*
|
||||
|
||||
class TerminalUsageTriggerCollector {
|
||||
class TerminalUsageTriggerCollector : CounterUsagesCollector() {
|
||||
override fun getGroup(): EventLogGroup = GROUP
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun triggerSshShellStarted(project: Project) {
|
||||
FUCounterUsageLogger.getInstance().logEvent(project, GROUP_ID, "ssh.exec")
|
||||
}
|
||||
private val GROUP = EventLogGroup(GROUP_ID, 4)
|
||||
|
||||
private val TERMINAL_COMMAND_HANDLER_FIELD = EventFields.StringValidatedByCustomRule("terminalCommandHandler",
|
||||
ClassNameRuleValidator::class.java)
|
||||
private val RUN_ANYTHING_PROVIDER_FIELD = EventFields.StringValidatedByCustomRule("runAnythingProvider",
|
||||
ClassNameRuleValidator::class.java)
|
||||
|
||||
private val sshExecEvent = GROUP.registerEvent("ssh.exec")
|
||||
private val terminalCommandExecutedEvent = GROUP.registerEvent("terminal.command.executed")
|
||||
private val terminalSmartCommandExecutedEvent = GROUP.registerVarargEvent("terminal.smart.command.executed",
|
||||
TERMINAL_COMMAND_HANDLER_FIELD,
|
||||
RUN_ANYTHING_PROVIDER_FIELD)
|
||||
private val terminalSmartCommandNotExecutedEvent = GROUP.registerVarargEvent("terminal.smart.command.not.executed",
|
||||
TERMINAL_COMMAND_HANDLER_FIELD,
|
||||
RUN_ANYTHING_PROVIDER_FIELD)
|
||||
private val localExecEvent = GROUP.registerEvent("local.exec",
|
||||
EventFields.VersionClass("os-version"),
|
||||
EventFields.String("shell", KNOWN_SHELLS.toList()))
|
||||
|
||||
@JvmStatic
|
||||
fun triggerCommandExecuted(project: Project) {
|
||||
FUCounterUsageLogger.getInstance().logEvent(project, GROUP_ID, "terminal.command.executed")
|
||||
}
|
||||
fun triggerSshShellStarted(project: Project) = sshExecEvent.log(project)
|
||||
|
||||
@JvmStatic
|
||||
fun triggerCommandExecuted(project: Project) = terminalCommandExecutedEvent.log(project)
|
||||
|
||||
@JvmStatic
|
||||
fun triggerSmartCommand(project: Project,
|
||||
@@ -30,26 +50,25 @@ class TerminalUsageTriggerCollector {
|
||||
command: String,
|
||||
handler: TerminalShellCommandHandler,
|
||||
executed: Boolean) {
|
||||
val data = FeatureUsageData().addData("terminalCommandHandler", handler::class.java.name)
|
||||
val data: MutableList<EventPair<*>> = mutableListOf(TERMINAL_COMMAND_HANDLER_FIELD.with(handler::class.java.name))
|
||||
|
||||
if (handler is TerminalFusAwareHandler) {
|
||||
handler.fillData(project, workingDirectory, localSession, command, data)
|
||||
}
|
||||
val eventId = if (executed) {
|
||||
"terminal.smart.command.executed"
|
||||
|
||||
if (executed) {
|
||||
terminalSmartCommandExecutedEvent.log(project, data)
|
||||
}
|
||||
else {
|
||||
"terminal.smart.command.not.executed"
|
||||
terminalSmartCommandNotExecutedEvent.log(project, data)
|
||||
}
|
||||
FUCounterUsageLogger.getInstance().logEvent(project, GROUP_ID, eventId, data)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun triggerLocalShellStarted(project: Project, shellCommand: Array<String>) {
|
||||
FUCounterUsageLogger.getInstance().logEvent(project, GROUP_ID, "local.exec", FeatureUsageData()
|
||||
.addData("os-version", Version.parseVersion(SystemInfo.OS_VERSION)?.toCompactString() ?: "unknown")
|
||||
.addData("shell", getShellNameForStat(shellCommand.firstOrNull()))
|
||||
)
|
||||
}
|
||||
fun triggerLocalShellStarted(project: Project, shellCommand: Array<String>) =
|
||||
localExecEvent.log(project,
|
||||
Version.parseVersion(SystemInfo.OS_VERSION)?.toCompactString() ?: "unknown",
|
||||
getShellNameForStat(shellCommand.firstOrNull()))
|
||||
|
||||
@JvmStatic
|
||||
private fun getShellNameForStat(shellName: String?): String {
|
||||
@@ -58,7 +77,7 @@ class TerminalUsageTriggerCollector {
|
||||
val ind = name.indexOf(" ")
|
||||
name = if (ind < 0) name else name.substring(0, ind)
|
||||
if (SystemInfo.isFileSystemCaseSensitive) {
|
||||
name = name.toLowerCase(Locale.ENGLISH)
|
||||
name = name.lowercase(Locale.ENGLISH)
|
||||
}
|
||||
name = PathUtil.getFileName(name)
|
||||
name = trimKnownExt(name)
|
||||
@@ -74,7 +93,9 @@ class TerminalUsageTriggerCollector {
|
||||
|
||||
private const val GROUP_ID = "terminalShell"
|
||||
|
||||
private val KNOWN_SHELLS = setOf("activate",
|
||||
private val KNOWN_SHELLS = setOf("unspecified",
|
||||
"other",
|
||||
"activate",
|
||||
"anaconda3",
|
||||
"bash",
|
||||
"cexec",
|
||||
@@ -97,4 +118,4 @@ private val KNOWN_SHELLS = setOf("activate",
|
||||
"ubuntu1804",
|
||||
"wsl",
|
||||
"zsh")
|
||||
private val KNOWN_EXTENSIONS = setOf("exe", "bat", "cmd")
|
||||
private val KNOWN_EXTENSIONS = setOf("exe", "bat", "cmd")
|
||||
Reference in New Issue
Block a user