IDEA-265654: migrate run.configuration.exec to StructuredIdeActivity

GitOrigin-RevId: 63855094d1af8e677e21129fee9675d01a270276
This commit is contained in:
Anastasia Ivanova
2021-04-15 04:50:20 +03:00
committed by intellij-monorepo-bot
parent 439613bc10
commit b6baad842a
6 changed files with 63 additions and 45 deletions
@@ -14,6 +14,7 @@ import com.intellij.execution.filters.TextConsoleBuilderFactory
import com.intellij.execution.impl.ExecutionManagerImpl.Companion.DELEGATED_RUN_PROFILE_KEY
import com.intellij.execution.impl.statistics.RunConfigurationUsageTriggerCollector
import com.intellij.execution.impl.statistics.RunConfigurationUsageTriggerCollector.RunConfigurationFinishType
import com.intellij.execution.impl.statistics.RunConfigurationUsageTriggerCollector.UI_SHOWN_STAGE
import com.intellij.execution.process.*
import com.intellij.execution.runners.ExecutionEnvironment
import com.intellij.execution.runners.ExecutionEnvironmentBuilder
@@ -25,7 +26,7 @@ import com.intellij.execution.ui.ConsoleView
import com.intellij.execution.ui.RunContentDescriptor
import com.intellij.execution.ui.RunContentManager
import com.intellij.ide.SaveAndSyncHandler
import com.intellij.internal.statistic.IdeActivity
import com.intellij.internal.statistic.StructuredIdeActivity
import com.intellij.openapi.Disposable
import com.intellij.openapi.actionSystem.impl.SimpleDataContext
import com.intellij.openapi.application.ApplicationManager
@@ -153,7 +154,7 @@ class ExecutionManagerImpl(private val project: Project) : ExecutionManager(), D
private val inProgress = Collections.synchronizedSet(HashSet<InProgressEntry>())
private fun processNotStarted(environment: ExecutionEnvironment, activity: IdeActivity?) {
private fun processNotStarted(environment: ExecutionEnvironment, activity: StructuredIdeActivity?) {
RunConfigurationUsageTriggerCollector.logProcessFinished(activity, RunConfigurationFinishType.FAILED)
val executorId = environment.executor.id
inProgress.remove(InProgressEntry(executorId, environment.runner.runnerId))
@@ -242,7 +243,7 @@ class ExecutionManagerImpl(private val project: Project) : ExecutionManager(), D
if (!descriptor.isHiddenContent && !environment.isHeadless) {
RunContentManager.getInstance(project).showRunContent(executor, descriptor, environment.contentToReuse)
}
activity?.stageStarted("ui.shown")
activity?.stageStarted(UI_SHOWN_STAGE)
environment.contentToReuse = descriptor
val processHandler = descriptor.processHandler
@@ -817,7 +818,7 @@ fun RunnerAndConfigurationSettings.isOfSameType(runnerAndConfigurationSettings:
return false
}
private fun triggerUsage(environment: ExecutionEnvironment): IdeActivity? {
private fun triggerUsage(environment: ExecutionEnvironment): StructuredIdeActivity? {
val runConfiguration = environment.runnerAndConfigurationSettings?.configuration
val configurationFactory = runConfiguration?.factory ?: return null
return RunConfigurationUsageTriggerCollector.trigger(environment.project, configurationFactory, environment.executor, runConfiguration)
@@ -920,7 +921,7 @@ private class ProcessExecutionListener(private val project: Project,
private val environment: ExecutionEnvironment,
private val processHandler: ProcessHandler,
private val descriptor: RunContentDescriptor,
private val activity: IdeActivity?) : ProcessAdapter() {
private val activity: StructuredIdeActivity?) : ProcessAdapter() {
private val willTerminateNotified = AtomicBoolean()
private val terminateNotified = AtomicBoolean()
@@ -74,7 +74,7 @@ public final class RunConfigurationTypeUsagesCollector extends ProjectUsagesColl
}
final ConfigurationType configurationType = configurationFactory.getType();
List<EventPair> pairs = createFeatureUsageData(configurationType, configurationFactory);
List<EventPair<?>> pairs = createFeatureUsageData(configurationType, configurationFactory);
pairs.addAll(getSettings(settings, runConfiguration));
final Template template = new Template(CONFIGURED_IN_PROJECT_EVENT, pairs);
addOrIncrement(templates, template);
@@ -140,7 +140,7 @@ public final class RunConfigurationTypeUsagesCollector extends ProjectUsagesColl
continue;
}
if (featureUsed) {
List<EventPair> pairs = new ArrayList<>();
List<EventPair<?>> pairs = new ArrayList<>();
pairs.add(ID_FIELD.with(runConfiguration.getType().getId()));
pairs.add(EventFields.PluginInfo.with(info));
pairs.add(FEATURE_NAME_FIELD.with(name));
@@ -151,9 +151,9 @@ public final class RunConfigurationTypeUsagesCollector extends ProjectUsagesColl
}
}
public static @NotNull List<EventPair> createFeatureUsageData(@NotNull ConfigurationType configuration, @Nullable ConfigurationFactory factory) {
public static @NotNull List<EventPair<?>> createFeatureUsageData(@NotNull ConfigurationType configuration, @Nullable ConfigurationFactory factory) {
final String id = configuration instanceof UnknownConfigurationType ? "unknown" : configuration.getId();
List<EventPair> pairs = new ArrayList<>();
List<EventPair<?>> pairs = new ArrayList<>();
pairs.add(ID_FIELD.with(id));
if (factory != null && configuration.getConfigurationFactories().length > 1) {
pairs.add(FACTORY_FIELD.with(factory.getId()));
@@ -172,10 +172,10 @@ public final class RunConfigurationTypeUsagesCollector extends ProjectUsagesColl
private static final class Template {
private final VarargEventId myEventId;
private final List<? super EventPair> myEventPairs;
private final List<EventPair<?>> myEventPairs;
private Template(VarargEventId id,
List<? super EventPair> pairs) {
List<EventPair<?>> pairs) {
myEventId = id;
myEventPairs = pairs;
}
@@ -183,7 +183,7 @@ public final class RunConfigurationTypeUsagesCollector extends ProjectUsagesColl
@NotNull
private MetricEvent createMetricEvent(int count) {
myEventPairs.add(COUNT_FIELD.with(count));
return myEventId.metric(myEventPairs.toArray(new EventPair[0]));
return myEventId.metric(myEventPairs);
}
@Override
@@ -1,7 +1,6 @@
// 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.execution.impl.statistics;
import com.intellij.internal.statistic.IdeActivity;
import com.intellij.internal.statistic.eventLog.events.EventField;
import com.intellij.internal.statistic.eventLog.events.EventFields;
import com.intellij.internal.statistic.service.fus.collectors.FeatureUsageCollectorExtension;
@@ -12,12 +11,12 @@ import java.util.List;
public class RunConfigurationUsageLanguageExtension implements FeatureUsageCollectorExtension {
@Override
public String getGroupId() {
return RunConfigurationUsageTriggerCollector.GROUP;
return RunConfigurationUsageTriggerCollector.GROUP_NAME;
}
@Override
public String getEventId() {
return IdeActivity.STARTED_EVENT_ID;
return "started";
}
@Override
@@ -10,12 +10,14 @@ import com.intellij.execution.target.TargetEnvironmentAwareRunProfile;
import com.intellij.execution.target.TargetEnvironmentConfiguration;
import com.intellij.execution.target.TargetEnvironmentType;
import com.intellij.execution.target.TargetEnvironmentsManager;
import com.intellij.internal.statistic.IdeActivity;
import com.intellij.internal.statistic.eventLog.FeatureUsageData;
import com.intellij.internal.statistic.IdeActivityGroup;
import com.intellij.internal.statistic.StructuredIdeActivity;
import com.intellij.internal.statistic.eventLog.EventLogGroup;
import com.intellij.internal.statistic.eventLog.events.*;
import com.intellij.internal.statistic.eventLog.validator.ValidationResultType;
import com.intellij.internal.statistic.eventLog.validator.rules.EventContext;
import com.intellij.internal.statistic.eventLog.validator.rules.impl.CustomValidationRule;
import com.intellij.internal.statistic.service.fus.collectors.CounterUsagesCollector;
import com.intellij.internal.statistic.utils.PluginInfo;
import com.intellij.internal.statistic.utils.PluginInfoDetectorKt;
import com.intellij.openapi.application.ReadAction;
@@ -25,36 +27,53 @@ import com.intellij.util.concurrency.NonUrgentExecutor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.List;
import static com.intellij.execution.impl.statistics.RunConfigurationTypeUsagesCollector.createFeatureUsageData;
public final class RunConfigurationUsageTriggerCollector {
public static final String GROUP = "run.configuration.exec";
private static final ObjectEventField ADDITIONAL_FIELD = EventFields.createAdditionalDataField(GROUP, "started");
public final class RunConfigurationUsageTriggerCollector extends CounterUsagesCollector {
public static final String GROUP_NAME = "run.configuration.exec";
private static final EventLogGroup GROUP = new EventLogGroup(GROUP_NAME, 61);
private static final ObjectEventField ADDITIONAL_FIELD = EventFields.createAdditionalDataField(GROUP_NAME, "started");
private static final StringEventField EXECUTOR = EventFields.StringValidatedByCustomRule("executor", "run_config_executor");
private static final StringEventField TARGET =
EventFields.StringValidatedByCustomRule("target", RunConfigurationUsageTriggerCollector.RunTargetValidator.RULE_ID);
private static final EnumEventField<RunConfigurationFinishType> FINISH_TYPE =
EventFields.Enum("finish_type", RunConfigurationFinishType.class);
@NotNull
public static IdeActivity trigger(@NotNull Project project,
@NotNull ConfigurationFactory factory,
@NotNull Executor executor,
@Nullable RunConfiguration runConfiguration) {
return new IdeActivity(project, GROUP).startedWithDataAsync(data -> {
return ReadAction.nonBlocking(() -> buildContext(project, factory, executor, runConfiguration, data))
.expireWith(project)
.submit(NonUrgentExecutor.getInstance());
});
private static final IdeActivityGroup ACTIVITY_GROUP = new IdeActivityGroup(GROUP, null,
new EventField<?>[]{ADDITIONAL_FIELD, EXECUTOR,
TARGET,
RunConfigurationTypeUsagesCollector.FACTORY_FIELD,
RunConfigurationTypeUsagesCollector.ID_FIELD,
EventFields.PluginInfo},
new EventField<?>[]{FINISH_TYPE});
public static final VarargEventId UI_SHOWN_STAGE = ACTIVITY_GROUP.registerStage("ui.shown");
@Override
public EventLogGroup getGroup() {
return GROUP;
}
private static @NotNull FeatureUsageData buildContext(@NotNull Project project,
@NotNull ConfigurationFactory factory,
@NotNull Executor executor,
@Nullable RunConfiguration runConfiguration,
@NotNull FeatureUsageData data) {
@NotNull
public static StructuredIdeActivity trigger(@NotNull Project project,
@NotNull ConfigurationFactory factory,
@NotNull Executor executor,
@Nullable RunConfiguration runConfiguration) {
return new StructuredIdeActivity(project, ACTIVITY_GROUP)
.startedAsync(() -> ReadAction.nonBlocking(() -> buildContext(project, factory, executor, runConfiguration))
.expireWith(project)
.submit(NonUrgentExecutor.getInstance()));
}
private static @NotNull List<EventPair<?>> buildContext(@NotNull Project project,
@NotNull ConfigurationFactory factory,
@NotNull Executor executor,
@Nullable RunConfiguration runConfiguration) {
final ConfigurationType configurationType = factory.getType();
List<EventPair> eventPairs = createFeatureUsageData(configurationType, factory);
List<EventPair<?>> eventPairs = createFeatureUsageData(configurationType, factory);
ExecutorGroup<?> group = ExecutorGroup.getGroupIfProxy(executor);
eventPairs.add(EXECUTOR.with(group != null ? group.getId() : executor.getId()));
if (runConfiguration instanceof FusAwareRunConfiguration) {
@@ -71,14 +90,13 @@ public final class RunConfigurationUsageTriggerCollector {
}
}
}
eventPairs.forEach(pair -> pair.addData(data));
return data;
return eventPairs;
}
public static void logProcessFinished(@Nullable IdeActivity activity,
public static void logProcessFinished(@Nullable StructuredIdeActivity activity,
RunConfigurationFinishType finishType) {
if (activity != null) {
activity.finished(data -> data.addData("finish_type", finishType.name()));
activity.finished(() -> Collections.singletonList(FINISH_TYPE.with(finishType)));
}
}
@@ -54,8 +54,8 @@ public class RunDashboardUsagesCollector extends ProjectUsagesCollector {
ConfigurationType configurationType = ContainerUtil.find(configurationTypes, type -> type.getId().equals(dashboardType));
if (configurationType == null) continue;
List<EventPair> data = RunConfigurationTypeUsagesCollector.createFeatureUsageData(configurationType, null);
metricEvents.add(ADDED_RUN_CONFIGURATION.metric(data.toArray(new EventPair[0])));
List<EventPair<?>> data = RunConfigurationTypeUsagesCollector.createFeatureUsageData(configurationType, null);
metricEvents.add(ADDED_RUN_CONFIGURATION.metric(data));
}
}
if (!removedDefaultType.isEmpty()) {
@@ -64,8 +64,8 @@ public class RunDashboardUsagesCollector extends ProjectUsagesCollector {
ConfigurationType configurationType = ContainerUtil.find(configurationTypes, type -> type.getId().equals(removedType));
if (configurationType == null) continue;
List<EventPair> data = RunConfigurationTypeUsagesCollector.createFeatureUsageData(configurationType, null);
metricEvents.add(REMOVED_RUN_CONFIGURATION.metric(data.toArray(new EventPair[0])));
List<EventPair<?>> data = RunConfigurationTypeUsagesCollector.createFeatureUsageData(configurationType, null);
metricEvents.add(REMOVED_RUN_CONFIGURATION.metric(data));
}
}
return metricEvents;
@@ -1037,7 +1037,7 @@
<statistics.counterUsagesCollector groupId="create.directory.dialog" version="2"/>
<statistics.counterUsagesCollector groupId="refactoring.dialog" version="2"/>
<statistics.counterUsagesCollector groupId="project.view.pane.changes" version="1"/>
<statistics.counterUsagesCollector groupId="run.configuration.exec" version="60"/>
<statistics.counterUsagesCollector implementationClass="com.intellij.execution.impl.statistics.RunConfigurationUsageTriggerCollector"/>
<statistics.counterUsagesCollector groupId="intentions" version="57"/>
<statistics.counterUsagesCollector groupId="completion.postfix" version="57"/>