Skip to content

Commit c79e57c

Browse files
authored
Merge branch 'feature/q-lsp-chat' into q-lsp-chat
2 parents 9571433 + 1dafb99 commit c79e57c

File tree

6 files changed

+328
-1
lines changed

6 files changed

+328
-1
lines changed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_
8282
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.STOP_CHAT_RESPONSE
8383
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendChatPromptRequest
8484
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.StopResponseMessage
85+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TELEMETRY_EVENT
8586
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.LspEditorUtil
8687
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.LspEditorUtil.toUriString
8788
import software.aws.toolkits.jetbrains.services.amazonq.util.command
@@ -439,6 +440,9 @@ class BrowserConnector(
439440
ShowSettingsUtil.getInstance().showSettingsDialog(browser.project, CodeWhispererConfigurable::class.java)
440441
}
441442
}
443+
TELEMETRY_EVENT -> {
444+
handleChat(AmazonQChatServer.telemetryEvent, node)
445+
}
442446
}
443447
}
444448

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQChatServer.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PROMP
4343
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PromptInputOptionChangeParams
4444
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
4545
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickParams
46+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TELEMETRY_EVENT
4647
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionParams
4748
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabEventParams
4849
import kotlin.reflect.KProperty
@@ -201,4 +202,9 @@ object AmazonQChatServer : JsonRpcMethodProvider {
201202
CHAT_CREATE_PROMPT,
202203
CreatePromptParams::class.java
203204
)
205+
206+
val telemetryEvent = JsonRpcNotification(
207+
TELEMETRY_EVENT,
208+
Any::class.java
209+
)
204210
}

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowS
4646
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogResult
4747
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.ConnectionMetadata
4848
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.SsoProfileData
49+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.TelemetryParsingUtil
4950
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererModelConfigurator
51+
import software.aws.toolkits.jetbrains.services.telemetry.TelemetryService
5052
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
5153
import software.aws.toolkits.resources.message
5254
import java.io.File
@@ -60,8 +62,39 @@ import java.util.concurrent.TimeUnit
6062
* Concrete implementation of [AmazonQLanguageClient] to handle messages sent from server
6163
*/
6264
class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageClient {
65+
66+
private fun handleTelemetryMap(telemetryMap: Map<*, *>) {
67+
try {
68+
val name = telemetryMap["name"] as? String ?: return
69+
70+
@Suppress("UNCHECKED_CAST")
71+
val data = telemetryMap["data"] as? Map<String, Any> ?: return
72+
73+
TelemetryService.getInstance().record(project) {
74+
datum(name) {
75+
unit(TelemetryParsingUtil.parseMetricUnit(telemetryMap["unit"]))
76+
value(telemetryMap["value"] as? Double ?: 1.0)
77+
passive(telemetryMap["passive"] as? Boolean ?: false)
78+
79+
telemetryMap["result"]?.let { result ->
80+
metadata("result", result.toString())
81+
}
82+
83+
data.forEach { (key, value) ->
84+
metadata(key, value.toString())
85+
}
86+
}
87+
}
88+
} catch (e: Exception) {
89+
LOG.warn(e) { "Failed to process telemetry event: $telemetryMap" }
90+
}
91+
}
92+
6393
override fun telemetryEvent(`object`: Any) {
64-
println(`object`)
94+
when (`object`) {
95+
is Map<*, *> -> handleTelemetryMap(`object`)
96+
else -> LOG.warn { "Unexpected telemetry event: $`object`" }
97+
}
6598
}
6699

67100
override fun publishDiagnostics(diagnostics: PublishDiagnosticsParams) {

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/FlareChatCommands.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,4 @@ const val PROMPT_INPUT_OPTIONS_CHANGE = "aws/chat/promptInputOptionChange"
4141
const val SEND_CHAT_COMMAND_PROMPT = "aws/chat/sendChatPrompt"
4242
const val SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD = "aws/showSaveFileDialog"
4343
const val STOP_CHAT_RESPONSE = "stopChatResponse"
44+
const val TELEMETRY_EVENT = "telemetry/event"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.jetbrains.services.amazonq.lsp.util
5+
6+
import software.amazon.awssdk.services.toolkittelemetry.model.MetricUnit
7+
8+
object TelemetryParsingUtil {
9+
10+
fun parseMetricUnit(value: Any?): MetricUnit =
11+
when (value) {
12+
is String -> MetricUnit.fromValue(value) ?: MetricUnit.NONE
13+
is MetricUnit -> value
14+
else -> MetricUnit.NONE
15+
}
16+
}

0 commit comments

Comments
 (0)