FUS: report run-configurations defined in listed plugins

This commit is contained in:
Svetlana.Zemlyanskaya
2018-11-21 18:01:06 +01:00
parent 8d36a04ca2
commit 14f50fe5df
3 changed files with 52 additions and 25 deletions
@@ -128,16 +128,7 @@ class ExecutionManagerKtImpl(project: Project) : ExecutionManagerImpl(project) {
private fun triggerUsage(environment: ExecutionEnvironment) {
val runConfiguration = environment.runnerAndConfigurationSettings?.configuration ?: return
val configurationFactory = runConfiguration.factory ?: return
val configurationType = configurationFactory.type
if (configurationType is UnknownConfigurationType) return
var key = configurationType.id
if (configurationType.configurationFactories.size > 1) {
key += "." + configurationFactory.id
}
FUSProjectUsageTrigger.getInstance(environment.project).trigger(RunConfigurationUsageTriggerCollector::class.java, key,
FUSUsageContext.create(environment.executor.id))
RunConfigurationUsageTriggerCollector.trigger(environment.project, configurationFactory, environment.executor)
}
private class ProcessExecutionListener(private val project: Project,
@@ -10,10 +10,14 @@ import com.intellij.execution.configurations.UnknownConfigurationType;
import com.intellij.internal.statistic.beans.UsageDescriptor;
import com.intellij.internal.statistic.service.fus.collectors.FUSUsageContext;
import com.intellij.internal.statistic.service.fus.collectors.ProjectUsagesCollector;
import com.intellij.internal.statistic.utils.PluginType;
import com.intellij.internal.statistic.utils.StatisticsUtilKt;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import gnu.trove.TObjectIntHashMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashSet;
import java.util.Objects;
@@ -40,21 +44,15 @@ public abstract class AbstractRunConfigurationTypeUsagesCollector extends Projec
continue;
}
final ConfigurationType configurationType = configurationFactory.getType();
if (configurationType instanceof UnknownConfigurationType) {
continue;
}
final StringBuilder keyBuilder = new StringBuilder();
keyBuilder.append(configurationType.getId());
if (configurationType.getConfigurationFactories().length > 1) {
keyBuilder.append(".").append(configurationFactory.getId());
}
final Template template = new Template(keyBuilder.toString(), createContext(settings, runConfiguration));
if (templates.containsKey(template)) {
templates.increment(template);
}
else {
templates.put(template, 1);
final String key = toReportedId(configurationFactory);
if (StringUtil.isNotEmpty(key)) {
final Template template = new Template(key, createContext(settings, runConfiguration));
if (templates.containsKey(template)) {
templates.increment(template);
}
else {
templates.put(template, 1);
}
}
}
}
@@ -65,6 +63,25 @@ public abstract class AbstractRunConfigurationTypeUsagesCollector extends Projec
return result;
}
@Nullable
public static String toReportedId(@NotNull ConfigurationFactory factory) {
final ConfigurationType configurationType = factory.getType();
if (configurationType instanceof UnknownConfigurationType) {
return null;
}
final PluginType type = StatisticsUtilKt.getPluginType(configurationType.getClass());
if (!type.isSafeToReport()) {
return null;
}
final StringBuilder keyBuilder = new StringBuilder();
keyBuilder.append(configurationType.getId());
if (configurationType.getConfigurationFactories().length > 1) {
keyBuilder.append(".").append(factory.getId());
}
return keyBuilder.toString();
}
private static FUSUsageContext createContext(@NotNull RunnerAndConfigurationSettings settings,
@NotNull RunConfiguration runConfiguration) {
return FUSUsageContext.create(
@@ -1,13 +1,32 @@
// 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.execution.impl.statistics;
import com.intellij.execution.Executor;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.internal.statistic.service.fus.collectors.FUSProjectUsageTrigger;
import com.intellij.internal.statistic.service.fus.collectors.FUSUsageContext;
import com.intellij.internal.statistic.service.fus.collectors.ProjectUsageTriggerCollector;
import com.intellij.internal.statistic.utils.PluginType;
import com.intellij.internal.statistic.utils.StatisticsUtilKt;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import org.jetbrains.annotations.NotNull;
public class RunConfigurationUsageTriggerCollector extends ProjectUsageTriggerCollector {
private static final String UNKNOWN = "UNKNOWN";
@NotNull
@Override
public String getGroupId() {
return "statistics.run.configuration.start";
}
public static void trigger(@NotNull Project project, @NotNull ConfigurationFactory factory, @NotNull Executor executor) {
final String key = AbstractRunConfigurationTypeUsagesCollector.toReportedId(factory);
if (StringUtil.isNotEmpty(key)) {
final PluginType type = StatisticsUtilKt.getPluginType(executor.getClass());
final FUSUsageContext context = FUSUsageContext.create(type.isSafeToReport() ? executor.getId() : UNKNOWN);
FUSProjectUsageTrigger.getInstance(project).trigger(RunConfigurationUsageTriggerCollector.class, key, context);
}
}
}