diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/history/VcsLogFileHistoryProviderImpl.kt b/platform/vcs-log/impl/src/com/intellij/vcs/log/history/VcsLogFileHistoryProviderImpl.kt index 3bf301e82fa8..e8937d95908e 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/history/VcsLogFileHistoryProviderImpl.kt +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/history/VcsLogFileHistoryProviderImpl.kt @@ -77,9 +77,10 @@ class VcsLogFileHistoryProviderImpl : VcsLogFileHistoryProvider { } private fun triggerFileHistoryUsage(paths: Collection, hash: Hash?) { - val name = if (paths.size > 1) "MultiplePaths" else if (paths.first().isDirectory) "Folder" else "File" - val suffix = if (hash != null) "ForRevision" else "" - VcsLogUsageTriggerCollector.triggerUsage("Show" + name + "History" + suffix) + VcsLogUsageTriggerCollector.triggerUsage("history.shown") { data -> + val kind = if (paths.size > 1) "multiple" else if (paths.first().isDirectory) "folder" else "file" + data.addData("kind", kind).addData("has.revision", hash != null) + } } private fun findOrOpenHistory(project: Project, logManager: VcsLogManager, diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogTabsWatcher.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogTabsWatcher.java index 95ccb6fc6832..55d839614405 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogTabsWatcher.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogTabsWatcher.java @@ -159,7 +159,7 @@ public class VcsLogTabsWatcher implements Disposable { window -> window instanceof VcsLogTab && ((VcsLogTab)window).myTabId.equals(tabId)); if (logWindow != null) { LOG.debug("Selected log window \'" + logWindow + "\'"); - VcsLogUsageTriggerCollector.triggerUsage("TabNavigation"); + VcsLogUsageTriggerCollector.triggerUsage("tab.navigated", null); myRefresher.refresherActivated(logWindow.getRefresher(), false); } } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/statistics/VcsLogUsageTriggerCollector.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/statistics/VcsLogUsageTriggerCollector.java index 5001da617dfb..56fbe8b31efa 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/statistics/VcsLogUsageTriggerCollector.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/statistics/VcsLogUsageTriggerCollector.java @@ -8,29 +8,37 @@ import com.intellij.vcs.log.ui.VcsLogInternalDataKeys; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.function.Consumer; + public class VcsLogUsageTriggerCollector { public static void triggerUsage(@NotNull AnActionEvent e, @NotNull Object action) { - triggerUsage(e, action.getClass().getName()); + triggerUsage(e, action, null); } - public static void triggerUsage(@NotNull AnActionEvent e, @NotNull String text) { - triggerUsage(text, e.getData(VcsLogInternalDataKeys.FILE_HISTORY_UI) != null, e); + public static void triggerUsage(@NotNull AnActionEvent e, @NotNull Object action, @Nullable Consumer configurator) { + triggerUsage("action.called", data -> { + addContext(data, e.getData(VcsLogInternalDataKeys.FILE_HISTORY_UI) != null); + data.addInputEvent(e); + data.addData("class", action.getClass().getName()); + if (configurator != null) configurator.accept(data); + }); } - public static void triggerUsage(@NotNull String text) { - triggerUsage(text, "", null); + public static void triggerUsage(@NotNull String text, boolean isFromHistory, @Nullable Consumer configurator) { + triggerUsage(text, data -> { + addContext(data, isFromHistory); + if (configurator != null) configurator.accept(data); + }); } - public static void triggerUsage(@NotNull String text, boolean isFromHistory, @Nullable AnActionEvent e) { - triggerUsage(text, isFromHistory ? "history" : "log", e); + public static void triggerUsage(@NotNull String text, @Nullable Consumer configurator) { + FeatureUsageData data = new FeatureUsageData(); + if (configurator != null) configurator.accept(data); + FUCounterUsageLogger.getInstance().logEvent("vcs.log.trigger", text, data); } - private static void triggerUsage(@NotNull String text, @NotNull String context, @Nullable AnActionEvent event) { - FeatureUsageData featureUsageData = new FeatureUsageData().addData("context", context); - if (event != null) { - featureUsageData.addInputEvent(event); - } - FUCounterUsageLogger.getInstance().logEvent("vcs.log.trigger", text, featureUsageData); + private static void addContext(@NotNull FeatureUsageData data, boolean isFromHistory) { + data.addData("context", isFromHistory ? "history" : "log"); } } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/GoToParentOrChildAction.kt b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/GoToParentOrChildAction.kt index a5016fd9fc25..b6ee0d7d49df 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/GoToParentOrChildAction.kt +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/GoToParentOrChildAction.kt @@ -32,7 +32,7 @@ open class GoToParentOrChildAction(val parent: Boolean) : DumbAwareAction() { } override fun actionPerformed(e: AnActionEvent) { - VcsLogUsageTriggerCollector.triggerUsage(e, this) + triggerUsage(e) val ui = e.getRequiredData(VcsLogDataKeys.VCS_LOG_UI) as AbstractVcsLogUi val rows = getRowsToJump(ui) @@ -58,7 +58,7 @@ open class GoToParentOrChildAction(val parent: Boolean) : DumbAwareAction() { val text = getActionText(ui.table.model.getCommitMetadata(row)) object : DumbAwareAction(text, "Navigate to $text", null) { override fun actionPerformed(e: AnActionEvent) { - VcsLogUsageTriggerCollector.triggerUsage(e, "Go to ${if (parent) "Parent" else "Child"} Commit.Select from Popup") + triggerUsage(e) ui.jumpToRow(row) } } @@ -66,6 +66,10 @@ open class GoToParentOrChildAction(val parent: Boolean) : DumbAwareAction() { return DefaultActionGroup(actions) } + private fun DumbAwareAction.triggerUsage(e: AnActionEvent) { + VcsLogUsageTriggerCollector.triggerUsage(e, this) { data -> data.addData("parent.commit", parent) } + } + private fun getActionText(commitMetadata: VcsCommitMetadata): String { var text = commitMetadata.id.toShortString() if (commitMetadata !is LoadingDetails) { diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FilterModel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FilterModel.java index c971661d9e90..5f71d0e5a766 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FilterModel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FilterModel.java @@ -2,7 +2,6 @@ package com.intellij.vcs.log.ui.filter; import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.vcs.log.VcsLogDataPack; import com.intellij.vcs.log.VcsLogFilter; import com.intellij.vcs.log.VcsLogFilterCollection; @@ -65,7 +64,8 @@ abstract class FilterModel { } protected static void triggerFilterSet(@NotNull String name) { - VcsLogUsageTriggerCollector.triggerUsage(StringUtil.capitalize(name) + "FilterSet", false, null); + VcsLogUsageTriggerCollector.triggerUsage("filter.set", false, + data -> data.addData("filter_name", name)); } protected static void triggerFilterSet(@Nullable FilterObject filter, diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/GraphTableController.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/GraphTableController.java index baf185ab5389..3ae017eb9fa9 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/GraphTableController.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/GraphTableController.java @@ -209,22 +209,27 @@ public class GraphTableController { private void performRootColumnAction() { if (myColorManager.hasMultiplePaths() && myProperties.exists(CommonUiProperties.SHOW_ROOT_NAMES)) { - VcsLogUsageTriggerCollector.triggerUsage("RootColumnClick"); + triggerClick("root.column"); myProperties.set(CommonUiProperties.SHOW_ROOT_NAMES, !myProperties.get(CommonUiProperties.SHOW_ROOT_NAMES)); } } private static void triggerElementClick(@NotNull PrintElement printElement) { if (printElement instanceof NodePrintElement) { - VcsLogUsageTriggerCollector.triggerUsage("GraphNodeClick"); + triggerClick("node"); } else if (printElement instanceof EdgePrintElement) { if (((EdgePrintElement)printElement).hasArrow()) { - VcsLogUsageTriggerCollector.triggerUsage("GraphArrowClick"); + triggerClick("arrow"); } } } + private static void triggerClick(@NotNull String target) { + VcsLogUsageTriggerCollector.triggerUsage("table.clicked", + data -> data.addData("target", target)); + } + protected int getColumnLeftXCoordinate(int viewColumnIndex) { int x = 0; for (int i = 0; i < viewColumnIndex; i++) { diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java index f6ddfefcaea0..72f2135ba9a9 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java @@ -278,7 +278,7 @@ public class VcsLogGraphTable extends TableWithProgress implements DataProvider, } public void resetColumnWidth(int column) { - VcsLogUsageTriggerCollector.triggerUsage("ColumnWidthReset"); + VcsLogUsageTriggerCollector.triggerUsage("column.reset", null); if (CommonUiProperties.getColumnWidth(myProperties, column) != -1) { CommonUiProperties.saveColumnWidth(myProperties, column, -1); }