diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/connect/StatisticsService.java b/platform/platform-impl/src/com/intellij/internal/statistic/connect/StatisticsService.java index 3fe21714ecf1..ba461ae117c8 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/connect/StatisticsService.java +++ b/platform/platform-impl/src/com/intellij/internal/statistic/connect/StatisticsService.java @@ -16,7 +16,12 @@ package com.intellij.internal.statistic.connect; +import com.intellij.openapi.extensions.ExtensionPointName; + public interface StatisticsService { + ExtensionPointName EP_NAME = + ExtensionPointName.create("com.intellij.statisticsService"); + StatisticsResult send(); } diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/updater/SendStatisticsProjectComponent.java b/platform/platform-impl/src/com/intellij/internal/statistic/updater/SendStatisticsProjectComponent.java index d2792d5801e1..90ec8877e16c 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/updater/SendStatisticsProjectComponent.java +++ b/platform/platform-impl/src/com/intellij/internal/statistic/updater/SendStatisticsProjectComponent.java @@ -19,22 +19,31 @@ import com.intellij.internal.statistic.StatisticsUploadAssistant; import com.intellij.internal.statistic.connect.RemotelyConfigurableStatisticsService; import com.intellij.internal.statistic.connect.StatisticsConnectionService; import com.intellij.internal.statistic.connect.StatisticsHttpClientSender; +import com.intellij.internal.statistic.connect.StatisticsService; import com.intellij.notification.NotificationDisplayType; import com.intellij.notification.NotificationsConfiguration; import com.intellij.notification.impl.NotificationsConfigurationImpl; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.ProjectComponent; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupManager; import com.intellij.util.Alarm; +import com.intellij.util.containers.ContainerUtilRt; import org.jetbrains.annotations.NotNull; +import java.util.Arrays; +import java.util.Collection; + public class SendStatisticsProjectComponent implements ProjectComponent { + + private static final Logger LOG = Logger.getInstance("#" + SendStatisticsProjectComponent.class.getName()); + private static final int DELAY_IN_MIN = 10; private Project myProject; - private Alarm myAlarm; + private Alarm myAlarm; public SendStatisticsProjectComponent(Project project) { myProject = project; @@ -68,21 +77,33 @@ public class SendStatisticsProjectComponent implements ProjectComponent { StatisticsNotificationManager.showNotification(statisticsService, myProject); } else { + Collection services = ContainerUtilRt.newArrayList(); if (StatisticsUploadAssistant.isSendAllowed() && StatisticsUploadAssistant.isTimeToSend()) { - runWithDelay(statisticsService); + services.add(statisticsService); + } + services.addAll(Arrays.asList(StatisticsService.EP_NAME.getExtensions())); + if (!services.isEmpty()) { + runWithDelay(services); } } } - private void runWithDelay(final @NotNull RemotelyConfigurableStatisticsService statisticsService) { + private void runWithDelay(final @NotNull Collection statisticsServices) { myAlarm.addRequest(new Runnable() { @Override public void run() { if (DumbService.isDumb(myProject)) { - runWithDelay(statisticsService); + runWithDelay(statisticsServices); } else { - statisticsService.send(); + for (StatisticsService service : statisticsServices) { + try { + service.send(); + } + catch (Exception e) { + LOG.warn("Unexpected error during sending stats data via service " + service, e); + } + } } } }, DELAY_IN_MIN * 60 * 1000); diff --git a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml index 8aa89c93ae80..9a4ad82a2a35 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml @@ -141,6 +141,7 @@ +