From 58c5f6360051aa8feba389d00fa0cd6aeb7199ac Mon Sep 17 00:00:00 2001 From: "Svetlana.Zemlyanskaya" Date: Wed, 10 Jun 2020 20:40:09 +0200 Subject: [PATCH] FUS: check that state collector is implemented in JB plugin GitOrigin-RevId: 886bc8b76db314d9f675d4ea0c4a7183724b0c3c --- .../fus/collectors/FUStateUsagesLogger.java | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/platform/statistics/src/com/intellij/internal/statistic/service/fus/collectors/FUStateUsagesLogger.java b/platform/statistics/src/com/intellij/internal/statistic/service/fus/collectors/FUStateUsagesLogger.java index 127c34146bc6..22f392402531 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/service/fus/collectors/FUStateUsagesLogger.java +++ b/platform/statistics/src/com/intellij/internal/statistic/service/fus/collectors/FUStateUsagesLogger.java @@ -6,6 +6,8 @@ import com.intellij.internal.statistic.eventLog.EventLogGroup; import com.intellij.internal.statistic.eventLog.EventLogSystemEvents; import com.intellij.internal.statistic.eventLog.FeatureUsageData; import com.intellij.internal.statistic.eventLog.fus.FeatureUsageLogger; +import com.intellij.internal.statistic.utils.PluginInfo; +import com.intellij.internal.statistic.utils.PluginInfoDetectorKt; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; @@ -33,13 +35,11 @@ public class FUStateUsagesLogger implements UsagesCollectorConsumer { synchronized (LOCK) { List> futures = new ArrayList<>(); for (ProjectUsagesCollector usagesCollector : ProjectUsagesCollector.getExtensions(this)) { - final EventLogGroup group = new EventLogGroup(usagesCollector.getGroupId(), usagesCollector.getVersion()); - try { - futures.add(logUsagesAsStateEvents(project, group, usagesCollector.getData(project), - usagesCollector.getMetrics(project, indicator))); - } - catch (Throwable th) { - futures.add(logCollectingUsageFailed(project, group, th)); + PluginInfo info = PluginInfoDetectorKt.getPluginInfo(usagesCollector.getClass()); + if (info.isDevelopedByJetBrains()) { + EventLogGroup group = new EventLogGroup(usagesCollector.getGroupId(), usagesCollector.getVersion()); + Promise> metrics = usagesCollector.getMetrics(project, indicator); + futures.add(logMetricsOrError(project, group, usagesCollector.getData(project), metrics)); } } return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); @@ -50,19 +50,34 @@ public class FUStateUsagesLogger implements UsagesCollectorConsumer { synchronized (LOCK) { List> futures = new ArrayList<>(); for (ApplicationUsagesCollector usagesCollector : ApplicationUsagesCollector.getExtensions(this)) { - final EventLogGroup group = new EventLogGroup(usagesCollector.getGroupId(), usagesCollector.getVersion()); - try { - futures.add(logUsagesAsStateEvents(null, group, usagesCollector.getData(), - Promises.resolvedPromise(usagesCollector.getMetrics()))); - } - catch (Throwable th) { - futures.add(logCollectingUsageFailed(null, group, th)); + PluginInfo info = PluginInfoDetectorKt.getPluginInfo(usagesCollector.getClass()); + if (info.isDevelopedByJetBrains()) { + EventLogGroup group = new EventLogGroup(usagesCollector.getGroupId(), usagesCollector.getVersion()); + Promise> metrics = Promises.resolvedPromise(usagesCollector.getMetrics()); + futures.add(logMetricsOrError(null, group, usagesCollector.getData(), metrics)); } } return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); } } + private static CompletableFuture logMetricsOrError(@Nullable Project project, + @NotNull EventLogGroup group, + @Nullable FeatureUsageData context, + @NotNull Promise> metricsPromise) { + try { + return logUsagesAsStateEvents(project, group, context, metricsPromise); + } + catch (Throwable th) { + if (project != null && project.isDisposed()) { + return CompletableFuture.completedFuture(null); + } + + FeatureUsageData data = new FeatureUsageData().addProject(project); + return FeatureUsageLogger.INSTANCE.logState(group, EventLogSystemEvents.STATE_COLLECTOR_FAILED, data.build()); + } + } + private static @NotNull CompletableFuture logUsagesAsStateEvents(@Nullable Project project, @NotNull EventLogGroup group, @Nullable FeatureUsageData context, @@ -90,16 +105,6 @@ public class FUStateUsagesLogger implements UsagesCollectorConsumer { return future; } - private static @NotNull CompletableFuture logCollectingUsageFailed(@Nullable Project project, - @NotNull EventLogGroup group, - @NotNull Throwable error) { - if (project != null && project.isDisposed()) { - return CompletableFuture.completedFuture(null); - } - return FeatureUsageLogger.INSTANCE.logState(group, EventLogSystemEvents.STATE_COLLECTOR_FAILED, - new FeatureUsageData().addProject(project).build()); - } - @Nullable private static FeatureUsageData addProject(@Nullable Project project, @Nullable FeatureUsageData context) {