mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
platform: send statistics about IDE auto-update (FUS-140)
This commit is contained in:
+13
@@ -0,0 +1,13 @@
|
||||
// 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.openapi.updateSettings.impl;
|
||||
|
||||
import com.intellij.internal.statistic.service.fus.collectors.ApplicationUsageTriggerCollector;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class IdeUpdateUsageTriggerCollector extends ApplicationUsageTriggerCollector {
|
||||
@NotNull
|
||||
@Override
|
||||
public String getGroupId() {
|
||||
return "statistics.ide.autoupdate";
|
||||
}
|
||||
}
|
||||
+6
-1
@@ -8,6 +8,7 @@ import com.intellij.ide.IdeBundle
|
||||
import com.intellij.ide.externalComponents.ExternalComponentManager
|
||||
import com.intellij.ide.plugins.*
|
||||
import com.intellij.ide.util.PropertiesComponent
|
||||
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger
|
||||
import com.intellij.notification.*
|
||||
import com.intellij.openapi.application.*
|
||||
import com.intellij.openapi.application.ex.ApplicationInfoEx
|
||||
@@ -400,8 +401,12 @@ object UpdateChecker {
|
||||
runnable.invoke()
|
||||
}
|
||||
else {
|
||||
FUSApplicationUsageTrigger.getInstance().trigger(IdeUpdateUsageTriggerCollector::class.java, "notification.shown")
|
||||
val message = IdeBundle.message("updates.ready.message", ApplicationNamesInfo.getInstance().fullProductName)
|
||||
showNotification(project, message, runnable, NotificationUniqueType.PLATFORM)
|
||||
showNotification(project, message, {
|
||||
FUSApplicationUsageTrigger.getInstance().trigger(IdeUpdateUsageTriggerCollector::class.java, "notification.clicked")
|
||||
runnable()
|
||||
}, NotificationUniqueType.PLATFORM)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
+22
@@ -3,12 +3,15 @@ package com.intellij.openapi.updateSettings.impl;
|
||||
|
||||
import com.intellij.ide.AppLifecycleListener;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger;
|
||||
import com.intellij.notification.NotificationListener;
|
||||
import com.intellij.notification.NotificationType;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.Application;
|
||||
import com.intellij.openapi.application.ApplicationInfo;
|
||||
import com.intellij.openapi.application.ConfigImportHelper;
|
||||
import com.intellij.openapi.application.PathManager;
|
||||
import com.intellij.openapi.application.ex.ApplicationInfoEx;
|
||||
import com.intellij.openapi.components.ApplicationComponent;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
@@ -19,11 +22,13 @@ import com.intellij.openapi.updateSettings.impl.pluginsAdvertisement.PluginsAdve
|
||||
import com.intellij.openapi.util.BuildNumber;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.text.DateFormatUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import static com.intellij.openapi.application.PathManager.isSnap;
|
||||
@@ -36,6 +41,7 @@ public class UpdateCheckerComponent implements Disposable, ApplicationComponent
|
||||
private static final Logger LOG = Logger.getInstance(UpdateCheckerComponent.class);
|
||||
|
||||
private static final long CHECK_INTERVAL = DateFormatUtil.DAY;
|
||||
static final String AUTO_UPDATE_STARTED_FOR_BUILD_PROPERTY = "ide.autoupdate.started.for.build";
|
||||
|
||||
private final Alarm myCheckForUpdatesAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD);
|
||||
private final Runnable myCheckRunnable = () -> UpdateChecker.updateAndShowResult().doWhenProcessed(() -> queueNextCheck(CHECK_INTERVAL));
|
||||
@@ -118,9 +124,25 @@ public class UpdateCheckerComponent implements Disposable, ApplicationComponent
|
||||
|
||||
@Override
|
||||
public void initComponent() {
|
||||
checkIfPreviousUpdateFailed();
|
||||
PluginsAdvertiser.ensureDeleted();
|
||||
}
|
||||
|
||||
private static void checkIfPreviousUpdateFailed() {
|
||||
PropertiesComponent properties = PropertiesComponent.getInstance();
|
||||
if (ApplicationInfo.getInstance().getBuild().asString().equals(properties.getValue(AUTO_UPDATE_STARTED_FOR_BUILD_PROPERTY))) {
|
||||
File updateErrorsLog = new File(PathManager.getLogPath(), "idea_updater_error.log");
|
||||
try {
|
||||
if (updateErrorsLog.isFile() && !StringUtil.isEmptyOrSpaces(FileUtil.loadFile(updateErrorsLog))) {
|
||||
FUSApplicationUsageTrigger.getInstance().trigger(IdeUpdateUsageTriggerCollector.class, "update.failed");
|
||||
}
|
||||
}
|
||||
catch (IOException ignored) {
|
||||
}
|
||||
}
|
||||
properties.setValue(AUTO_UPDATE_STARTED_FOR_BUILD_PROPERTY, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
}
|
||||
|
||||
+31
-6
@@ -5,6 +5,8 @@ import com.intellij.execution.CommandLineUtil;
|
||||
import com.intellij.ide.BrowserUtil;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.ide.plugins.IdeaPluginDescriptor;
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger;
|
||||
import com.intellij.notification.Notification;
|
||||
import com.intellij.notification.NotificationListener;
|
||||
import com.intellij.notification.NotificationType;
|
||||
@@ -128,6 +130,18 @@ class UpdateInfoDialog extends AbstractUpdateDialog {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void init() {
|
||||
super.init();
|
||||
FUSApplicationUsageTrigger.getInstance().trigger(IdeUpdateUsageTriggerCollector.class, "dialog.shown");
|
||||
if (myPatch == null) {
|
||||
FUSApplicationUsageTrigger.getInstance().trigger(IdeUpdateUsageTriggerCollector.class, "dialog.shown.no.patch");
|
||||
}
|
||||
else if (!ApplicationManager.getApplication().isRestartCapable()) {
|
||||
FUSApplicationUsageTrigger.getInstance().trigger(IdeUpdateUsageTriggerCollector.class, "dialog.shown.manual.patch");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JComponent createCenterPanel() {
|
||||
return new UpdateInfoPanel().myPanel;
|
||||
@@ -217,7 +231,7 @@ class UpdateInfoDialog extends AbstractUpdateDialog {
|
||||
Application app = ApplicationManager.getApplication();
|
||||
if (app.isRestartCapable()) {
|
||||
if (indicator.isShowing()) {
|
||||
app.invokeLater(() -> ((ApplicationImpl)app).exit(true, true, true, command));
|
||||
restartLaterAndRunCommand(command);
|
||||
}
|
||||
else {
|
||||
String title = IdeBundle.message("update.notifications.title");
|
||||
@@ -225,7 +239,7 @@ class UpdateInfoDialog extends AbstractUpdateDialog {
|
||||
UpdateChecker.NOTIFICATIONS.createNotification(title, message, NotificationType.INFORMATION, new NotificationListener.Adapter() {
|
||||
@Override
|
||||
protected void hyperlinkActivated(@NotNull Notification notification, @NotNull HyperlinkEvent e) {
|
||||
app.invokeLater(() -> ((ApplicationImpl)app).exit(true, true, true, command));
|
||||
restartLaterAndRunCommand(command);
|
||||
}
|
||||
}).notify(null);
|
||||
}
|
||||
@@ -237,6 +251,13 @@ class UpdateInfoDialog extends AbstractUpdateDialog {
|
||||
}.queue();
|
||||
}
|
||||
|
||||
private static void restartLaterAndRunCommand(String[] command) {
|
||||
FUSApplicationUsageTrigger.getInstance().trigger(IdeUpdateUsageTriggerCollector.class, "dialog.update.started");
|
||||
PropertiesComponent.getInstance().setValue(UpdateCheckerComponent.AUTO_UPDATE_STARTED_FOR_BUILD_PROPERTY, ApplicationInfo.getInstance().getBuild().asString());
|
||||
ApplicationImpl application = (ApplicationImpl)ApplicationManager.getApplication();
|
||||
application.invokeLater(() -> application.exit(true, true, true, command));
|
||||
}
|
||||
|
||||
private void openDownloadPage() {
|
||||
String url = myNewBuild.getDownloadUrl();
|
||||
assert !StringUtil.isEmptyOrSpaces(url) : "channel:" + myUpdatedChannel.getId() + " build:" + myNewBuild.getNumber();
|
||||
@@ -259,20 +280,24 @@ class UpdateInfoDialog extends AbstractUpdateDialog {
|
||||
}
|
||||
|
||||
String title = IdeBundle.message("update.notifications.title"), message = IdeBundle.message("update.apply.manually.message", file);
|
||||
FUSApplicationUsageTrigger.getInstance().trigger(IdeUpdateUsageTriggerCollector.class, "dialog.manual.patch.prepared");
|
||||
ApplicationManager.getApplication().invokeLater(() -> Messages.showInfoMessage(message, title));
|
||||
}
|
||||
|
||||
private static class ButtonAction extends AbstractAction {
|
||||
private final String myUrl;
|
||||
private final ButtonInfo myInfo;
|
||||
|
||||
private ButtonAction(ButtonInfo info) {
|
||||
private ButtonAction(@NotNull ButtonInfo info) {
|
||||
super(info.getName());
|
||||
myUrl = info.getUrl();
|
||||
myInfo = info;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
BrowserUtil.browse(augmentUrl(myUrl));
|
||||
if (myInfo.isDownload()) {
|
||||
FUSApplicationUsageTrigger.getInstance().trigger(IdeUpdateUsageTriggerCollector.class, "dialog.download.clicked");
|
||||
}
|
||||
BrowserUtil.browse(augmentUrl(myInfo.getUrl()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -436,6 +436,7 @@
|
||||
<statistics.projectUsagesCollector implementation="com.intellij.internal.statistic.collectors.fus.RegistryProjectUsagesCollector"/>
|
||||
<statistics.projectUsagesCollector implementation="com.intellij.featureStatistics.fusCollectors.ProjectLifecycleUsageTriggerCollector"/>
|
||||
<statistics.applicationUsagesCollector implementation="com.intellij.featureStatistics.fusCollectors.AppLifecycleUsageTriggerCollector"/>
|
||||
<statistics.applicationUsagesCollector implementation="com.intellij.openapi.updateSettings.impl.IdeUpdateUsageTriggerCollector"/>
|
||||
<statistic.eventLog.fusEventLoggerProvider implementation="com.intellij.internal.statistic.eventLog.FeatureUsageFileEventLoggerProvider"/>
|
||||
<postStartupActivity implementation="com.intellij.internal.statistic.eventLog.SystemStateMonitor"/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user