From 456949b71e330812debe6dca47728cd93b2b3861 Mon Sep 17 00:00:00 2001 From: "Svetlana.Zemlyanskaya" Date: Wed, 17 Jun 2020 15:26:41 +0200 Subject: [PATCH] FUS: update file name for cached statistics metadata (IDEA-243753) GitOrigin-RevId: 4f012be048c1c67e4cb2b196ca79b2b7e67440ec --- .../storage/TestWhitelistStorageBuilder.kt | 2 +- .../BaseSensitiveDataValidatorTest.kt | 2 +- .../actions/OpenWhitelistFileAction.kt | 3 +- .../actions/WhitelistConfigurationModel.kt | 6 +- .../eventLog/StatisticsEventLogMigration.java | 9 +++ .../BaseEventLogWhitelistPersistence.java | 56 ++++++++++++++++--- .../EventLogTestWhitelistPersistence.java | 11 ++-- .../EventLogWhitelistPersistence.java | 21 ++++--- .../eventLog/whitelist/WhitelistStorage.java | 2 +- 9 files changed, 83 insertions(+), 29 deletions(-) diff --git a/platform/platform-tests/testSrc/com/intellij/internal/statistics/whitelist/storage/TestWhitelistStorageBuilder.kt b/platform/platform-tests/testSrc/com/intellij/internal/statistics/whitelist/storage/TestWhitelistStorageBuilder.kt index c8dda17a384f..e86acb8ba8cc 100644 --- a/platform/platform-tests/testSrc/com/intellij/internal/statistics/whitelist/storage/TestWhitelistStorageBuilder.kt +++ b/platform/platform-tests/testSrc/com/intellij/internal/statistics/whitelist/storage/TestWhitelistStorageBuilder.kt @@ -52,7 +52,7 @@ class TestWhitelistStorage( } private class TestEventLogWhitelistPersistence(recorderId: String, private var content: String?, private var modified: Long) : EventLogWhitelistPersistence(recorderId) { - override fun getCachedWhitelist(): String? = content + override fun getCachedMetadata(): String? = content override fun cacheWhiteList(gsonWhiteListContent: String, lastModified: Long) { content = gsonWhiteListContent diff --git a/platform/platform-tests/testSrc/com/intellij/internal/statistics/whitelist/validator/BaseSensitiveDataValidatorTest.kt b/platform/platform-tests/testSrc/com/intellij/internal/statistics/whitelist/validator/BaseSensitiveDataValidatorTest.kt index 90804cae0009..55a4a8c59c1c 100644 --- a/platform/platform-tests/testSrc/com/intellij/internal/statistics/whitelist/validator/BaseSensitiveDataValidatorTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/internal/statistics/whitelist/validator/BaseSensitiveDataValidatorTest.kt @@ -81,7 +81,7 @@ internal class TestSensitiveDataValidator(storage: WhitelistStorage) : Sensitive } class TestEventLogWhitelistPersistence(private val myContent: String) : EventLogWhitelistPersistence("TEST") { - override fun getCachedWhitelist(): String? { + override fun getCachedMetadata(): String? { return myContent } } diff --git a/platform/statistics/devkit/src/com/intellij/internal/statistic/actions/OpenWhitelistFileAction.kt b/platform/statistics/devkit/src/com/intellij/internal/statistic/actions/OpenWhitelistFileAction.kt index 68f8723784d6..9105b5e99bf5 100644 --- a/platform/statistics/devkit/src/com/intellij/internal/statistic/actions/OpenWhitelistFileAction.kt +++ b/platform/statistics/devkit/src/com/intellij/internal/statistic/actions/OpenWhitelistFileAction.kt @@ -8,6 +8,7 @@ import com.intellij.internal.statistic.StatisticsDevKitUtil import com.intellij.internal.statistic.StatisticsDevKitUtil.showNotification import com.intellij.internal.statistic.eventLog.validator.persistence.BaseEventLogWhitelistPersistence import com.intellij.internal.statistic.eventLog.validator.persistence.EventLogWhitelistPersistence +import com.intellij.internal.statistic.eventLog.validator.persistence.EventLogWhitelistPersistence.EVENTS_SCHEME_FILE import com.intellij.internal.statistic.eventLog.validator.persistence.EventLogWhitelistSettingsPersistence import com.intellij.notification.NotificationType import com.intellij.openapi.actionSystem.AnActionEvent @@ -29,7 +30,7 @@ class OpenWhitelistFileAction(private val myRecorderId: String = StatisticsDevKi File(settings.customPath) } else { - BaseEventLogWhitelistPersistence.getDefaultWhitelistFile(myRecorderId, EventLogWhitelistPersistence.WHITE_LIST_DATA_FILE) + BaseEventLogWhitelistPersistence.getDefaultMetadataFile(myRecorderId, EVENTS_SCHEME_FILE, null) } openFileInEditor(file, project) diff --git a/platform/statistics/devkit/src/com/intellij/internal/statistic/actions/WhitelistConfigurationModel.kt b/platform/statistics/devkit/src/com/intellij/internal/statistic/actions/WhitelistConfigurationModel.kt index e5f324894c82..535f2903772e 100644 --- a/platform/statistics/devkit/src/com/intellij/internal/statistic/actions/WhitelistConfigurationModel.kt +++ b/platform/statistics/devkit/src/com/intellij/internal/statistic/actions/WhitelistConfigurationModel.kt @@ -2,8 +2,8 @@ package com.intellij.internal.statistic.actions import com.intellij.internal.statistic.eventLog.getEventLogProviders -import com.intellij.internal.statistic.eventLog.validator.persistence.BaseEventLogWhitelistPersistence.getDefaultWhitelistFile -import com.intellij.internal.statistic.eventLog.validator.persistence.EventLogWhitelistPersistence.WHITE_LIST_DATA_FILE +import com.intellij.internal.statistic.eventLog.validator.persistence.BaseEventLogWhitelistPersistence.getDefaultMetadataFile +import com.intellij.internal.statistic.eventLog.validator.persistence.EventLogWhitelistPersistence.EVENTS_SCHEME_FILE import com.intellij.internal.statistic.eventLog.validator.persistence.EventLogWhitelistSettingsPersistence import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory import com.intellij.openapi.ui.ComboBox @@ -112,7 +112,7 @@ class WhitelistConfigurationModel { } class WhitelistPathSettings(recorderId: String) { - private val defaultPath: String = getDefaultWhitelistFile(recorderId, WHITE_LIST_DATA_FILE).absolutePath + private val defaultPath: String = getDefaultMetadataFile(recorderId, EVENTS_SCHEME_FILE, null).absolutePath var customPath: String? = null var useCustomPath = false diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/StatisticsEventLogMigration.java b/platform/statistics/src/com/intellij/internal/statistic/eventLog/StatisticsEventLogMigration.java index ede746fc4035..c4dac9995bd5 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/StatisticsEventLogMigration.java +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/StatisticsEventLogMigration.java @@ -2,6 +2,7 @@ package com.intellij.internal.statistic.eventLog; import com.intellij.concurrency.JobScheduler; +import com.intellij.internal.statistic.eventLog.validator.persistence.BaseEventLogWhitelistPersistence; import com.intellij.internal.statistic.service.fus.collectors.FUStatisticsPersistence; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.util.io.FileUtil; @@ -19,10 +20,18 @@ public final class StatisticsEventLogMigration { JobScheduler.getScheduler().schedule(() -> { moveLogsToNewFolder(); + clearDeprecatedMetadataFolder(); FUStatisticsPersistence.clearLegacyStates(); }, 5, TimeUnit.MINUTES); } + private static void clearDeprecatedMetadataFolder() { + Path deprecated = BaseEventLogWhitelistPersistence.getDeprecatedMetadataDir(); + if (Files.exists(deprecated)) { + deleteDir(deprecated); + } + } + private static void moveLogsToNewFolder() { Path newEventLogDir = EventLogConfiguration.INSTANCE.getEventLogDataPath().resolve("logs"); diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/persistence/BaseEventLogWhitelistPersistence.java b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/persistence/BaseEventLogWhitelistPersistence.java index f5643ce56215..027e6808d43e 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/persistence/BaseEventLogWhitelistPersistence.java +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/persistence/BaseEventLogWhitelistPersistence.java @@ -2,6 +2,8 @@ package com.intellij.internal.statistic.eventLog.validator.persistence; import com.intellij.openapi.application.PathManager; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -11,19 +13,55 @@ import java.io.IOException; import java.nio.file.Path; abstract public class BaseEventLogWhitelistPersistence { - public static final String FUS_WHITELIST_PATH = "event-log-whitelist"; + private static final Logger LOG = Logger.getInstance(BaseEventLogWhitelistPersistence.class); + + public static final String DEPRECATED_FUS_METADATA_DIR = "event-log-whitelist"; + public static final String FUS_METADATA_DIR = "event-log-metadata"; @Nullable - public abstract String getCachedWhitelist(); + public abstract String getCachedMetadata(); + + public static File getDefaultMetadataFile(@NotNull String recorderId, + @NotNull String fileName, + @Nullable String deprecatedFileName) throws IOException { + File file = getMetadataByDir(FUS_METADATA_DIR, recorderId, fileName); + if (!file.exists() && StringUtil.isNotEmpty(deprecatedFileName)) { + File deprecated = getMetadataByDir(DEPRECATED_FUS_METADATA_DIR, recorderId, deprecatedFileName); + if (deprecated.exists()) { + if (LOG.isTraceEnabled()) { + LOG.trace("Moving deprecated metadata file to new directory: " + fileName); + } + + if (!FileUtil.createParentDirs(file)) { + LOG.info("Cannot create directories for event log metadata"); + return file; + } + + FileUtil.copy(deprecated, file); + if (!FileUtil.delete(deprecated)) { + LOG.info("Failed deleting deprecated metadata file"); + } + } + } + return file; + } @NotNull - public static File getDefaultWhitelistFile(@NotNull String recorderId, @NotNull String whitelistFileName) throws IOException { - Path configPath = PathManager.getConfigDir(); - Path whitelistDir = configPath - .resolve(FUS_WHITELIST_PATH) - .resolve(StringUtil.toLowerCase(recorderId)); - return whitelistDir. - resolve(whitelistFileName). + public static Path getDeprecatedMetadataDir() { + return getMetadataConfigRoot(DEPRECATED_FUS_METADATA_DIR); + } + + @NotNull + private static File getMetadataByDir(@NotNull String dir, @NotNull String recorderId, @NotNull String fileName) throws IOException { + Path metadataDir = getMetadataConfigRoot(dir); + return metadataDir. + resolve(StringUtil.toLowerCase(recorderId)). + resolve(fileName). toFile().getCanonicalFile(); } + + @NotNull + private static Path getMetadataConfigRoot(@NotNull String dir) { + return PathManager.getConfigDir().resolve(dir); + } } diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/persistence/EventLogTestWhitelistPersistence.java b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/persistence/EventLogTestWhitelistPersistence.java index 88c840006da8..6c874b934d64 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/persistence/EventLogTestWhitelistPersistence.java +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/persistence/EventLogTestWhitelistPersistence.java @@ -26,7 +26,10 @@ public class EventLogTestWhitelistPersistence extends BaseEventLogWhitelistPersi Logger.getInstance(EventLogTestWhitelistPersistence.class); public static final String TEST_RULE = "{util#fus_test_mode}"; - public static final String TEST_WHITE_LIST_DATA_FILE = "test-white-list.json"; + + private static final String DEPRECATED_TEST_EVENTS_SCHEME_FILE = "test-white-list.json"; + private static final String TEST_EVENTS_SCHEME_FILE = "test-events-scheme.json"; + @NotNull private final String myRecorderId; @@ -36,7 +39,7 @@ public class EventLogTestWhitelistPersistence extends BaseEventLogWhitelistPersi @Override @Nullable - public String getCachedWhitelist() { + public String getCachedMetadata() { try { final File file = getWhitelistFile(); if (file.exists()) { @@ -96,7 +99,7 @@ public class EventLogTestWhitelistPersistence extends BaseEventLogWhitelistPersi @NotNull public static WLGroups loadTestWhitelist(@NotNull BaseEventLogWhitelistPersistence persistence) { - final String existing = persistence.getCachedWhitelist(); + final String existing = persistence.getCachedMetadata(); if (StringUtil.isNotEmpty(existing)) { try { return FUStatisticsWhiteListGroupsService.parseWhiteListContent(existing); @@ -130,7 +133,7 @@ public class EventLogTestWhitelistPersistence extends BaseEventLogWhitelistPersi @NotNull public File getWhitelistFile() throws IOException { - return getDefaultWhitelistFile(myRecorderId, TEST_WHITE_LIST_DATA_FILE); + return getDefaultMetadataFile(myRecorderId, TEST_EVENTS_SCHEME_FILE, DEPRECATED_TEST_EVENTS_SCHEME_FILE); } public void updateTestGroups(@NotNull List groups) throws IOException { diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/persistence/EventLogWhitelistPersistence.java b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/persistence/EventLogWhitelistPersistence.java index f4ef9495a6db..0b9e66e7fde8 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/persistence/EventLogWhitelistPersistence.java +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/persistence/EventLogWhitelistPersistence.java @@ -13,9 +13,10 @@ import java.nio.file.Files; import java.nio.file.StandardCopyOption; public class EventLogWhitelistPersistence extends BaseEventLogWhitelistPersistence { - public static final String WHITE_LIST_DATA_FILE = "white-list.json"; - private static final Logger LOG = - Logger.getInstance(EventLogWhitelistPersistence.class); + private static final String DEPRECATED_EVENTS_SCHEME_FILE = "white-list.json"; + public static final String EVENTS_SCHEME_FILE = "events-scheme.json"; + + private static final Logger LOG = Logger.getInstance(EventLogWhitelistPersistence.class); @NotNull private final String myRecorderId; @@ -25,7 +26,7 @@ public class EventLogWhitelistPersistence extends BaseEventLogWhitelistPersisten @Override @Nullable - public String getCachedWhitelist() { + public String getCachedMetadata() { try { File file = getWhitelistFile(); if (file.exists()) return FileUtil.loadFile(file); @@ -44,7 +45,9 @@ public class EventLogWhitelistPersistence extends BaseEventLogWhitelistPersisten } else { File file = getDefaultFile(); - if (!file.exists()) initBuiltinWhiteList(file); + if (!file.exists()) { + initBuiltinMetadata(file); + } return file; } } @@ -60,7 +63,7 @@ public class EventLogWhitelistPersistence extends BaseEventLogWhitelistPersisten } } - private void initBuiltinWhiteList(File file) throws IOException { + private void initBuiltinMetadata(File file) throws IOException { try (InputStream stream = getClass().getClassLoader().getResourceAsStream(builtinWhiteListPath())) { if (stream == null) return; if (!file.getParentFile().exists() && !file.getParentFile().mkdirs()) { @@ -71,7 +74,7 @@ public class EventLogWhitelistPersistence extends BaseEventLogWhitelistPersisten } private String builtinWhiteListPath() { - return "resources/" + FUS_WHITELIST_PATH + "/" + myRecorderId + "/" + WHITE_LIST_DATA_FILE; + return "resources/" + DEPRECATED_FUS_METADATA_DIR + "/" + myRecorderId + "/" + DEPRECATED_EVENTS_SCHEME_FILE; } public long getLastModified() { @@ -79,7 +82,7 @@ public class EventLogWhitelistPersistence extends BaseEventLogWhitelistPersisten } @NotNull - private File getDefaultFile() throws IOException { - return getDefaultWhitelistFile(myRecorderId, WHITE_LIST_DATA_FILE); + public File getDefaultFile() throws IOException { + return getDefaultMetadataFile(myRecorderId, EVENTS_SCHEME_FILE, DEPRECATED_EVENTS_SCHEME_FILE); } } diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/whitelist/WhitelistStorage.java b/platform/statistics/src/com/intellij/internal/statistic/eventLog/whitelist/WhitelistStorage.java index 5066079df5c3..2642c735029e 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/whitelist/WhitelistStorage.java +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/whitelist/WhitelistStorage.java @@ -55,7 +55,7 @@ public class WhitelistStorage extends BaseWhitelistStorage { } private @Nullable String loadValidatorsFromLocalCache(@NotNull String recorderId) { - String whiteListContent = myWhitelistPersistence.getCachedWhitelist(); + String whiteListContent = myWhitelistPersistence.getCachedMetadata(); if (whiteListContent != null) { try { String newVersion = updateValidators(whiteListContent);