From 2dfc27a33e85a55c28280a8b1129e99d0d77de20 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Wed, 13 Jun 2018 05:39:30 +0300 Subject: [PATCH] [vcs-log] restore statistic collectors FUS-97 follow-up: 1e5c313405afa6bc8646b2dab32c6fc44f6db78e --- .../vcs-log/impl/src/META-INF/vcs-log.xml | 3 + .../statistics/VcsLogFeaturesCollector.java | 73 ++++++++++++++++++ .../statistics/VcsLogRepoSizeCollector.java | 75 +++++++++++++++++++ 3 files changed, 151 insertions(+) create mode 100644 platform/vcs-log/impl/src/com/intellij/vcs/log/statistics/VcsLogFeaturesCollector.java create mode 100644 platform/vcs-log/impl/src/com/intellij/vcs/log/statistics/VcsLogRepoSizeCollector.java diff --git a/platform/vcs-log/impl/src/META-INF/vcs-log.xml b/platform/vcs-log/impl/src/META-INF/vcs-log.xml index 28d0c2df56f7..7da192b173fc 100644 --- a/platform/vcs-log/impl/src/META-INF/vcs-log.xml +++ b/platform/vcs-log/impl/src/META-INF/vcs-log.xml @@ -23,6 +23,9 @@ + + + diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/statistics/VcsLogFeaturesCollector.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/statistics/VcsLogFeaturesCollector.java new file mode 100644 index 000000000000..9d945828bf73 --- /dev/null +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/statistics/VcsLogFeaturesCollector.java @@ -0,0 +1,73 @@ +// Copyright 2000-2018 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.vcs.log.statistics; + +import com.intellij.internal.statistic.beans.UsageDescriptor; +import com.intellij.internal.statistic.service.fus.collectors.ProjectUsagesCollector; +import com.intellij.internal.statistic.service.fus.collectors.UsageDescriptorKeyValidator; +import com.intellij.internal.statistic.utils.StatisticsUtilKt; +import com.intellij.openapi.extensions.Extensions; +import com.intellij.openapi.project.Project; +import com.intellij.util.containers.ContainerUtil; +import com.intellij.vcs.log.graph.PermanentGraph; +import com.intellij.vcs.log.impl.CommonUiProperties; +import com.intellij.vcs.log.impl.MainVcsLogUiProperties; +import com.intellij.vcs.log.impl.VcsProjectLog; +import com.intellij.vcs.log.ui.VcsLogUiImpl; +import com.intellij.vcs.log.ui.highlighters.VcsLogHighlighterFactory; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.Set; + +import static com.intellij.vcs.log.impl.MainVcsLogUiProperties.*; +import static com.intellij.vcs.log.ui.VcsLogUiImpl.LOG_HIGHLIGHTER_FACTORY_EP; + +public class VcsLogFeaturesCollector extends ProjectUsagesCollector { + @NotNull + @Override + public Set getUsages(@NotNull Project project) { + VcsProjectLog projectLog = VcsProjectLog.getInstance(project); + if (projectLog != null) { + VcsLogUiImpl ui = projectLog.getMainLogUi(); + if (ui != null) { + MainVcsLogUiProperties properties = ui.getProperties(); + + Set usages = ContainerUtil.newHashSet(); + usages.add(StatisticsUtilKt.getBooleanUsage("details", properties.get(CommonUiProperties.SHOW_DETAILS))); + usages.add(StatisticsUtilKt.getBooleanUsage("long.edges", properties.get(SHOW_LONG_EDGES))); + + PermanentGraph.SortType sortType = properties.get(BEK_SORT_TYPE); + usages.add(StatisticsUtilKt.getBooleanUsage("sort.linear.bek", sortType.equals(PermanentGraph.SortType.LinearBek))); + usages.add(StatisticsUtilKt.getBooleanUsage("sort.bek", sortType.equals(PermanentGraph.SortType.Bek))); + usages.add(StatisticsUtilKt.getBooleanUsage("sort.normal", sortType.equals(PermanentGraph.SortType.Normal))); + + if (ui.getColorManager().isMultipleRoots()) { + usages.add(StatisticsUtilKt.getBooleanUsage("roots", properties.get(CommonUiProperties.SHOW_ROOT_NAMES))); + } + + usages.add(StatisticsUtilKt.getBooleanUsage("labels.compact", properties.get(COMPACT_REFERENCES_VIEW))); + usages.add(StatisticsUtilKt.getBooleanUsage("labels.showTagNames", properties.get(SHOW_TAG_NAMES))); + + usages.add(StatisticsUtilKt.getBooleanUsage("textFilter.regex", properties.get(TEXT_FILTER_REGEX))); + usages.add(StatisticsUtilKt.getBooleanUsage("textFilter.matchCase", properties.get(TEXT_FILTER_MATCH_CASE))); + + for (VcsLogHighlighterFactory factory: Extensions.getExtensions(LOG_HIGHLIGHTER_FACTORY_EP, project)) { + if (factory.showMenuItem()) { + VcsLogHighlighterProperty property = VcsLogHighlighterProperty.get(factory.getId()); + usages.add(StatisticsUtilKt.getBooleanUsage("highlighter." + UsageDescriptorKeyValidator.ensureProperKey(factory.getId()), + properties.exists(property) && properties.get(property))); + } + } + + return usages; + } + } + return Collections.emptySet(); + } + + @NotNull + @Override + public String getGroupId() { + return "statistics.vcs.log.ui"; + } +} diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/statistics/VcsLogRepoSizeCollector.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/statistics/VcsLogRepoSizeCollector.java new file mode 100644 index 000000000000..4bb470392fce --- /dev/null +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/statistics/VcsLogRepoSizeCollector.java @@ -0,0 +1,75 @@ +// Copyright 2000-2018 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.vcs.log.statistics; + +import com.intellij.internal.statistic.beans.UsageDescriptor; +import com.intellij.internal.statistic.service.fus.collectors.ProjectUsagesCollector; +import com.intellij.internal.statistic.service.fus.collectors.UsageDescriptorKeyValidator; +import com.intellij.internal.statistic.utils.StatisticsUtilKt; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vcs.VcsKey; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.containers.MultiMap; +import com.intellij.vcs.log.VcsLogProvider; +import com.intellij.vcs.log.data.DataPack; +import com.intellij.vcs.log.data.VcsLogData; +import com.intellij.vcs.log.graph.PermanentGraph; +import com.intellij.vcs.log.impl.VcsProjectLog; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.Map; +import java.util.Set; + +import static java.util.Arrays.asList; + +@SuppressWarnings("StringToUpperCaseOrToLowerCaseWithoutLocale") +public class VcsLogRepoSizeCollector extends ProjectUsagesCollector { + + @NotNull + @Override + public Set getUsages(@NotNull Project project) { + VcsProjectLog projectLog = VcsProjectLog.getInstance(project); + VcsLogData logData = projectLog.getDataManager(); + if (logData != null) { + DataPack dataPack = logData.getDataPack(); + if (dataPack.isFull()) { + PermanentGraph permanentGraph = dataPack.getPermanentGraph(); + MultiMap groupedRoots = groupRootsByVcs(dataPack.getLogProviders()); + + Set usages = ContainerUtil.newHashSet(); + usages.add(StatisticsUtilKt.getCountingUsage("commit.count", permanentGraph.getAllCommits().size(), + asList(0, 1, 100, 1000, 10 * 1000, 100 * 1000, 500 * 1000, 1000 * 1000))); + usages.add(StatisticsUtilKt.getCountingUsage("branches.count", dataPack.getRefsModel().getBranches().size(), + asList(0, 1, 10, 50, 100, 500, 1000, 5 * 1000, 10 * 1000, 20 * 1000, 50 * 1000))); + usages.add(StatisticsUtilKt.getCountingUsage("users.count", logData.getAllUsers().size(), + asList(0, 1, 10, 50, 100, 500, 1000, 5 * 1000, 10 * 1000, 20 * 1000, 50 * 1000))); + + for (VcsKey vcs: groupedRoots.keySet()) { + String vcsKey = UsageDescriptorKeyValidator.ensureProperKey(vcs.getName().toLowerCase()); + usages.add(StatisticsUtilKt.getCountingUsage(vcsKey + ".root.count", groupedRoots.get(vcs).size(), + asList(0, 1, 2, 5, 8, 15, 30, 50, 100, 300, 500))); + } + return usages; + } + } + return Collections.emptySet(); + } + + @NotNull + private static MultiMap groupRootsByVcs(@NotNull Map providers) { + MultiMap result = MultiMap.create(); + for (Map.Entry entry: providers.entrySet()) { + VirtualFile root = entry.getKey(); + VcsKey vcs = entry.getValue().getSupportedVcs(); + result.putValue(vcs, root); + } + return result; + } + + @NotNull + @Override + public String getGroupId() { + return "statistics.vcs.log.data"; + } +}