diff --git a/third_party/src/main/java/com/jetbrains/lang/dart/analytics/Analytics.kt b/third_party/src/main/java/com/jetbrains/lang/dart/analytics/Analytics.kt index c95d5fb1d..aa0259924 100644 --- a/third_party/src/main/java/com/jetbrains/lang/dart/analytics/Analytics.kt +++ b/third_party/src/main/java/com/jetbrains/lang/dart/analytics/Analytics.kt @@ -19,6 +19,7 @@ import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.project.Project import com.jetbrains.lang.dart.dtd.DTDProcess import com.jetbrains.lang.dart.dtd.DTDProcessListener +import com.jetbrains.lang.dart.ide.toolingDaemon.DartToolingDaemonService import com.jetbrains.lang.dart.sdk.DartSdk import com.jetbrains.lang.dart.util.PrintingLogger import de.roderick.weberknecht.WebSocketException @@ -253,14 +254,12 @@ abstract class AnalyticsData(type: String, val project: Project? = null) { } object AnalyticsConstants { - /** * The unique identifier for an action or event. */ @JvmField val ID = StringValue("id") - /** * The UI location where an action was invoked, as provided by * [com.intellij.openapi.actionSystem.PlaceProvider.getPlace] (for example, "MainMenu", @@ -322,8 +321,47 @@ internal object NoOpReporter : AnalyticsReporter() { } internal object UnifiedAnalyticsReporter : AnalyticsReporter() { + object UAProperty { + const val EVENT = "event" + const val EVENT_DATA = "eventData" + const val EVENT_NAME = "ide_event" + const val TOOL = "tool" + } + + const val IDE_EVENT = "ide_event" + override fun process(data: AnalyticsData) { - // TODO (pq): implement + val project = data.project ?: return + + val params = JsonObject() + params.addProperty(UAProperty.TOOL, getToolName()) + + val event = JsonObject() + event.addProperty(UAProperty.EVENT_NAME, IDE_EVENT) + + val evenData = JsonObject() + for (entry in data.data) { + when (val value = entry.value) { + is String -> evenData.addProperty(entry.key, value) + is Boolean -> evenData.addProperty(entry.key, value) + is Int -> evenData.addProperty(entry.key, value) + else -> { + // TODO (pq): consider logging + } + } + } + event.add(UAProperty.EVENT_DATA, evenData) + + // Note: encoded as a string. + params.addProperty(UAProperty.EVENT, event.toString()) + + // TODO (pq): temporary + // print(params.toString()) + + DartToolingDaemonService.getInstance(project).sendRequest("${UnifiedAnalytics.SERVICE_NAME}.${UnifiedAnalytics.SEND}", params, true) { response: JsonObject -> + // TODO (pq): temporary + // print(response) + } } } diff --git a/third_party/src/main/java/com/jetbrains/lang/dart/ide/actions/DartPubActionBase.kt b/third_party/src/main/java/com/jetbrains/lang/dart/ide/actions/DartPubActionBase.kt index 6503c7581..e4af5910e 100644 --- a/third_party/src/main/java/com/jetbrains/lang/dart/ide/actions/DartPubActionBase.kt +++ b/third_party/src/main/java/com/jetbrains/lang/dart/ide/actions/DartPubActionBase.kt @@ -45,6 +45,8 @@ import com.intellij.ui.content.ContentFactory import com.intellij.ui.content.ContentManager import com.intellij.ui.content.MessageView import com.jetbrains.lang.dart.DartBundle +import com.jetbrains.lang.dart.analytics.Analytics +import com.jetbrains.lang.dart.analytics.AnalyticsData import com.jetbrains.lang.dart.analyzer.DartAnalysisServerService import com.jetbrains.lang.dart.excludeBuildAndToolCacheFolders import com.jetbrains.lang.dart.flutter.FlutterUtil @@ -82,6 +84,8 @@ abstract class DartPubActionBase : AnAction(), DumbAware { override fun actionPerformed(e: AnActionEvent) { val (module, pubspecYamlFile) = getModuleAndPubspecYamlFile(e) ?: return + + Analytics.report(AnalyticsData.forAction(this, e)) performPubAction(module, pubspecYamlFile, true) }