diff options
author | Stas Negara <snegara@google.com> | 2015-05-21 14:39:44 -0700 |
---|---|---|
committer | Stas Negara <snegara@google.com> | 2015-05-21 16:14:25 -0700 |
commit | 82c2340fe3a1daba89edb239958b0ba09e2f5587 (patch) | |
tree | 4d318fded370914c76cb1af4cc1c77c8ec016b89 | |
parent | c5e0c3d74500c5825b01e3d312caad3f5926bdb7 (diff) | |
download | testing-82c2340fe3a1daba89edb239958b0ba09e2f5587.tar.gz |
Add user activity tracking.
Change-Id: I282179816a9ccd6bfd139e2f266dbd948dd76af8
8 files changed, 78 insertions, 3 deletions
diff --git a/src/com/google/gct/testing/CloudConfigurationChooserDialog.java b/src/com/google/gct/testing/CloudConfigurationChooserDialog.java index 830e02c..7c4028c 100644 --- a/src/com/google/gct/testing/CloudConfigurationChooserDialog.java +++ b/src/com/google/gct/testing/CloudConfigurationChooserDialog.java @@ -17,11 +17,13 @@ package com.google.gct.testing; import com.android.annotations.Nullable; import com.android.tools.idea.run.CloudConfiguration.Kind; +import com.android.tools.idea.stats.UsageTracker; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.gct.testing.dimension.ConfigurationChangeEvent; import com.google.gct.testing.dimension.ConfigurationChangeListener; +import com.google.gct.testing.util.CloudTestingTracking; import com.intellij.execution.ExecutionBundle; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnAction; @@ -110,8 +112,12 @@ public class CloudConfigurationChooserDialog extends DialogWrapper implements Co if (configurationKind == SINGLE_DEVICE) { setTitle("Single Device Configurations"); + UsageTracker.getInstance().trackEvent(CloudTestingTracking.CLOUD_TESTING, CloudTestingTracking.CONFIGURE_CLOUD_DEVICE, + CloudTestingTracking.SESSION_LABEL, null); } else { setTitle("Matrix Configurations"); + UsageTracker.getInstance().trackEvent(CloudTestingTracking.CLOUD_TESTING, CloudTestingTracking.CONFIGURE_MATRIX, + CloudTestingTracking.SESSION_LABEL, null); } getOKAction().setEnabled(true); diff --git a/src/com/google/gct/testing/CloudConfigurationProviderImpl.java b/src/com/google/gct/testing/CloudConfigurationProviderImpl.java index ffc46aa..8b3a53e 100644 --- a/src/com/google/gct/testing/CloudConfigurationProviderImpl.java +++ b/src/com/google/gct/testing/CloudConfigurationProviderImpl.java @@ -21,6 +21,7 @@ import com.android.tools.idea.run.CloudConfiguration.Kind; import com.android.tools.idea.run.CloudConfigurationProvider; import com.android.tools.idea.sdk.IdeSdks; //import com.glavsoft.viewer.Viewer; +import com.android.tools.idea.stats.UsageTracker; import com.google.api.client.util.Maps; import com.google.api.client.util.Sets; import com.google.api.services.storage.Storage; @@ -42,6 +43,7 @@ import com.google.gct.testing.launcher.CloudTestsLauncher; import com.google.gct.testing.results.GoogleCloudTestListener; import com.google.gct.testing.results.GoogleCloudTestResultsConnectionUtil; import com.google.gct.testing.results.GoogleCloudTestingResultParser; +import com.google.gct.testing.util.CloudTestingTracking; import com.intellij.execution.DefaultExecutionResult; import com.intellij.execution.ExecutionException; import com.intellij.execution.ExecutionResult; @@ -274,6 +276,8 @@ public class CloudConfigurationProviderImpl extends CloudConfigurationProvider { @Override public void launchCloudDevice(int selectedConfigurationId, @NotNull String cloudProjectId, @NotNull AndroidFacet facet) { + UsageTracker.getInstance() + .trackEvent(CloudTestingTracking.CLOUD_TESTING, CloudTestingTracking.LAUNCH_CLOUD_DEVICE, CloudTestingTracking.SESSION_LABEL, null); CloudConfigurationImpl cloudConfiguration = CloudTestingUtils.getConfigurationById(selectedConfigurationId, facet); @@ -416,6 +420,8 @@ public class CloudConfigurationProviderImpl extends CloudConfigurationProvider { @Override public ExecutionResult executeCloudMatrixTests(int selectedConfigurationId, String cloudProjectId, AndroidRunningState runningState, Executor executor) throws ExecutionException { + UsageTracker.getInstance() + .trackEvent(CloudTestingTracking.CLOUD_TESTING, CloudTestingTracking.RUN_TEST_MATRIX, CloudTestingTracking.SESSION_LABEL, null); Project project = runningState.getFacet().getModule().getProject(); diff --git a/src/com/google/gct/testing/CloudTestingUtils.java b/src/com/google/gct/testing/CloudTestingUtils.java index d1ed7a9..6b6abc3 100644 --- a/src/com/google/gct/testing/CloudTestingUtils.java +++ b/src/com/google/gct/testing/CloudTestingUtils.java @@ -16,6 +16,8 @@ package com.google.gct.testing; import com.android.tools.idea.run.CloudConfiguration; +import com.android.tools.idea.stats.UsageTracker; +import com.google.gct.testing.util.CloudTestingTracking; import com.intellij.icons.AllIcons; import com.intellij.notification.Notification; import com.intellij.notification.NotificationListener; @@ -126,6 +128,8 @@ public class CloudTestingUtils { + ">Report this issue</a> (please copy/paste the text below into the form)<br><br>" + getDetailedErrorMessage(errorMessage.substring(newLineIndex + 1)) + "</html>" : "No details..."; + UsageTracker.getInstance().trackEvent(CloudTestingTracking.CLOUD_TESTING, CloudTestingTracking.BACKEND_ERROR, + CloudTestingTracking.SESSION_LABEL + "|" + userErrorMessage, null); showCascadingErrorMessages(project, errorDialogTitle, userErrorMessage, detailedErrorMessage); } diff --git a/src/com/google/gct/testing/DebugConfigurationAction.java b/src/com/google/gct/testing/DebugConfigurationAction.java index cbea10c..81c7c79 100644 --- a/src/com/google/gct/testing/DebugConfigurationAction.java +++ b/src/com/google/gct/testing/DebugConfigurationAction.java @@ -17,9 +17,11 @@ package com.google.gct.testing; import com.android.ddmlib.AndroidDebugBridge; import com.android.ddmlib.IDevice; +import com.android.tools.idea.stats.UsageTracker; import com.google.gct.testing.results.GoogleCloudTestProxy.GoogleCloudRootTestProxy; import com.google.gct.testing.results.GoogleCloudTestTreeView; import com.google.gct.testing.results.GoogleCloudTestingResultsForm; +import com.google.gct.testing.util.CloudTestingTracking; import com.intellij.execution.ExecutionException; import com.intellij.execution.RunnerRegistry; import com.intellij.execution.configurations.RunProfile; @@ -83,6 +85,9 @@ public class DebugConfigurationAction extends AnAction { assert !isRootNode(selectedNode); // The action should have been disabled for the root node. + UsageTracker.getInstance().trackEvent( + CloudTestingTracking.CLOUD_TESTING, CloudTestingTracking.DEBUG_FROM_RESULTS, CloudTestingTracking.SESSION_LABEL, null); + String configurationName; String className = null; String methodName = null; diff --git a/src/com/google/gct/testing/ScreenshotComparisonDialog.java b/src/com/google/gct/testing/ScreenshotComparisonDialog.java index e1110e3..f16e27f 100644 --- a/src/com/google/gct/testing/ScreenshotComparisonDialog.java +++ b/src/com/google/gct/testing/ScreenshotComparisonDialog.java @@ -15,6 +15,7 @@ */ package com.google.gct.testing; +import com.android.tools.idea.stats.UsageTracker; import com.google.common.base.Function; import com.google.common.collect.Iterables; import com.google.common.collect.Ordering; @@ -22,6 +23,7 @@ import com.google.gct.testing.ui.AddCompareScreenshotPanel; import com.google.gct.testing.ui.AddScreenshotListener; import com.google.gct.testing.ui.WipePanel; import com.google.gct.testing.ui.WipePanelCallback; +import com.google.gct.testing.util.CloudTestingTracking; import com.intellij.execution.testframework.AbstractTestProxy; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnAction; @@ -71,7 +73,7 @@ public class ScreenshotComparisonDialog { private AddCompareScreenshotPanel addScreenshotPanel; private ActionButton myDecrementStepButton; private ActionButton myIncrementStepButton; - private Function<ConfigurationResult,String> getName; + private volatile int loadedScreenshotsCount = 0; public ScreenshotComparisonDialog(Project project, @@ -151,6 +153,9 @@ public class ScreenshotComparisonDialog { updateMaxStep(); updateScreenshotName(); builder.show(); + + UsageTracker.getInstance().trackEvent(CloudTestingTracking.CLOUD_TESTING, CloudTestingTracking.COMPARE_SCREENSHOTS_OPENED, + CloudTestingTracking.SESSION_LABEL, loadedScreenshotsCount); } public Window getWindow() { @@ -339,4 +344,10 @@ public class ScreenshotComparisonDialog { notifyHeaderListenersAboutStep(true); } } + + public void incrementLoadedScreenshotsCount() { + synchronized (this) { + loadedScreenshotsCount++; + } + } } diff --git a/src/com/google/gct/testing/ScreenshotComparisonPanel.java b/src/com/google/gct/testing/ScreenshotComparisonPanel.java index 235f146..52dc124 100644 --- a/src/com/google/gct/testing/ScreenshotComparisonPanel.java +++ b/src/com/google/gct/testing/ScreenshotComparisonPanel.java @@ -323,6 +323,9 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane @Override public void run() { loadedImage = configurationResult.getScreenshotForTestAndStep(test, step); // A long-running operation. + if (loadedImage != null) { + parent.incrementLoadedScreenshotsCount(); + } if (isObsolete()) { return; } diff --git a/src/com/google/gct/testing/ShowScreenshotsAction.java b/src/com/google/gct/testing/ShowScreenshotsAction.java index 3d9ccb2..20a1d93 100644 --- a/src/com/google/gct/testing/ShowScreenshotsAction.java +++ b/src/com/google/gct/testing/ShowScreenshotsAction.java @@ -15,20 +15,20 @@ */ package com.google.gct.testing; +import com.android.tools.idea.stats.UsageTracker; import com.google.common.base.Function; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import com.google.gct.testing.results.GoogleCloudTestProxy; import com.google.gct.testing.results.GoogleCloudTestProxy.GoogleCloudRootTestProxy; import com.google.gct.testing.results.GoogleCloudTestResultsViewer; import com.google.gct.testing.results.GoogleCloudTestTreeView; import com.google.gct.testing.results.GoogleCloudTestingResultsForm; +import com.google.gct.testing.util.CloudTestingTracking; import com.intellij.execution.testframework.AbstractTestProxy; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.PlatformDataKeys; -import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.ui.MessageType; import org.jetbrains.annotations.Nullable; @@ -58,6 +58,9 @@ public class ShowScreenshotsAction extends AnAction { @Override public void actionPerformed(final AnActionEvent e) { + UsageTracker.getInstance().trackEvent( + CloudTestingTracking.CLOUD_TESTING, CloudTestingTracking.COMPARE_SCREENSHOTS_CLICKED, CloudTestingTracking.SESSION_LABEL, null); + final GoogleCloudTestTreeView sender = e.getData(GoogleCloudTestTreeView.CLOUD_TEST_RUNNER_VIEW); if (sender == null) { return; diff --git a/src/com/google/gct/testing/util/CloudTestingTracking.java b/src/com/google/gct/testing/util/CloudTestingTracking.java new file mode 100644 index 0000000..fa7470c --- /dev/null +++ b/src/com/google/gct/testing/util/CloudTestingTracking.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.gct.testing.util; + +import java.util.UUID; + +public class CloudTestingTracking { + + // categories + public static final String CLOUD_TESTING = "com.google.cloud.testing"; + + // actions + public static final String RUN_TEST_MATRIX = "run.test.matrix"; + public static final String LAUNCH_CLOUD_DEVICE = "launch.cloud.device"; + public static final String COMPARE_SCREENSHOTS_CLICKED = "compare.screenshots.clicked"; + public static final String COMPARE_SCREENSHOTS_OPENED = "compare.screenshots.opened"; + public static final String DEBUG_FROM_RESULTS = "debug.from.results"; + public static final String BACKEND_ERROR = "backend.error"; + public static final String CONFIGURE_MATRIX = "configure.matrix"; + public static final String CONFIGURE_CLOUD_DEVICE = "configure.cloud.device"; + + // labels + public static final String SESSION_LABEL = UUID.randomUUID().toString(); +} |