Skip to content
Merged
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
841947a
handle telemetry/event messages
samgst-amazon Mar 26, 2025
d660a3c
Update plugins/amazonq/shared/jetbrains-community/src/software/aws/to…
samgst-amazon Mar 26, 2025
c880e8d
Update plugins/amazonq/shared/jetbrains-community/src/software/aws/to…
samgst-amazon Mar 26, 2025
4831a5c
Merge branch 'feature/q-lsp' into samgst/q-lsp-telemetry
samgst-amazon Mar 26, 2025
085e456
parse metricUnit in util
samgst-amazon Mar 26, 2025
c3cd86f
Merge branch 'feature/q-lsp' into samgst/q-lsp-telemetry
samgst-amazon Mar 26, 2025
6d97ddc
warn for bad telemetryEvent case
samgst-amazon Mar 26, 2025
792b087
update test case
samgst-amazon Mar 26, 2025
0e22516
detekt
samgst-amazon Mar 27, 2025
37a0193
style
samgst-amazon Mar 27, 2025
e97eb33
style
samgst-amazon Mar 27, 2025
3219b41
Merge branch 'main' into samgst/q-lsp-telemetry
samgst-amazon Apr 18, 2025
e4309da
Merge branch 'main' into samgst/q-lsp-telemetry
rli May 8, 2025
f2507f2
Merge branch 'main' into samgst/q-lsp-telemetry
samgst-amazon May 9, 2025
e6083d3
Merge branch 'feature/q-lsp-chat' into samgst/q-lsp-telemetry
samgst-amazon May 9, 2025
f3f6f6f
merge error
samgst-amazon May 9, 2025
b698c0b
detekt
samgst-amazon May 9, 2025
c545757
handle mynah ui telemetry event
samgst-amazon May 9, 2025
a0881c2
detekt
samgst-amazon May 9, 2025
75c1a01
remove print
samgst-amazon May 9, 2025
666437e
send notification to server
samgst-amazon May 9, 2025
6b30379
detekt
samgst-amazon May 9, 2025
1058210
Merge branch 'feature/q-lsp-chat' into samgst/q-lsp-telemetry
samgst-amazon May 12, 2025
ea52630
fix data classes
samgst-amazon May 12, 2025
ac06230
remove createTime from datum builder
samgst-amazon May 13, 2025
ff7f920
detekt
samgst-amazon May 13, 2025
3652c52
Merge branch 'feature/q-lsp-chat' into samgst/q-lsp-telemetry
samgst-amazon May 13, 2025
cab6460
Merge branch 'feature/q-lsp-chat' into samgst/q-lsp-telemetry
samgst-amazon May 14, 2025
77457f2
Merge remote-tracking branch 'origin/samgst/q-lsp-telemetry' into sam…
samgst-amazon May 14, 2025
7d82d95
refactor lsp notification
samgst-amazon May 14, 2025
d8c3f12
remove unused data class
samgst-amazon May 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,12 @@
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickNotification
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.StopResponseMessage
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TELEMETRY_EVENT
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionRequest
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabEventParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabEventRequest
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TelemetryEventNotification
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.LspEditorUtil
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.LspEditorUtil.toUriString
import software.aws.toolkits.jetbrains.services.amazonq.util.command
Expand Down Expand Up @@ -473,6 +475,11 @@
ShowSettingsUtil.getInstance().showSettingsDialog(browser.project, CodeWhispererConfigurable::class.java)
}
}
TELEMETRY_EVENT -> {
handleChatNotification<TelemetryEventNotification, Map<String, Any?>>(node) { server, params ->

Check warning on line 479 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L479 was not covered by tests
server.sendTelemetry(params)
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,15 @@
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogResult
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.ConnectionMetadata
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.SsoProfileData
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.TelemetryParsingUtil
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererModelConfigurator
import software.aws.toolkits.jetbrains.services.telemetry.TelemetryService
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
import software.aws.toolkits.resources.message
import java.io.File
import java.nio.file.Files
import java.nio.file.Paths
import java.time.Instant
import java.util.UUID
import java.util.concurrent.CompletableFuture
import java.util.concurrent.TimeUnit
Expand All @@ -60,8 +63,40 @@
* Concrete implementation of [AmazonQLanguageClient] to handle messages sent from server
*/
class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageClient {

private fun handleTelemetryMap(telemetryMap: Map<*, *>) {
try {

Check warning on line 68 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L68 was not covered by tests
val name = telemetryMap["name"] as? String ?: return

@Suppress("UNCHECKED_CAST")

Check warning on line 71 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L71 was not covered by tests
val data = telemetryMap["data"] as? Map<String, Any> ?: return
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this the correct action here? are there any telemetry events we want to be emitting that would have no data?


TelemetryService.getInstance().record(project) {
datum(name) {
createTime(Instant.now())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

time should be extracted from the metric?

unit(TelemetryParsingUtil.parseMetricUnit(telemetryMap["unit"]))

Check warning on line 77 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L74 - L77 were not covered by tests
value(telemetryMap["value"] as? Double ?: 1.0)
passive(telemetryMap["passive"] as? Boolean ?: false)

telemetryMap["result"]?.let { result ->
metadata("result", result.toString())

Check warning on line 82 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L82 was not covered by tests
}

data.forEach { (key, value) ->
metadata(key, value.toString())
}
}
}
} catch (e: Exception) {
LOG.warn(e) { "Failed to process telemetry event: $telemetryMap" }

Check warning on line 91 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L85 - L91 were not covered by tests
}
}

Check warning on line 93 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L93 was not covered by tests

override fun telemetryEvent(`object`: Any) {
println(`object`)
when (`object`) {

Check warning on line 96 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L96 was not covered by tests
is Map<*, *> -> handleTelemetryMap(`object`)
else -> LOG.warn { "Unexpected telemetry event: $`object`" }

Check warning on line 98 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L98 was not covered by tests
}
}

override fun publishDiagnostics(diagnostics: PublishDiagnosticsParams) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PROMP
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PromptInputOptionChangeParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TELEMETRY_EVENT
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionResult
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabEventParams
Expand Down Expand Up @@ -149,4 +150,7 @@ interface AmazonQLanguageServer : LanguageServer {

@JsonNotification(CHAT_CREATE_PROMPT)
fun createPrompt(params: CreatePromptParams): CompletableFuture<Unit>

@JsonNotification(TELEMETRY_EVENT)
fun sendTelemetry(params: Any): CompletableFuture<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,4 @@ const val PROMPT_INPUT_OPTIONS_CHANGE = "aws/chat/promptInputOptionChange"
const val SEND_CHAT_COMMAND_PROMPT = "aws/chat/sendChatPrompt"
const val SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD = "aws/showSaveFileDialog"
const val STOP_CHAT_RESPONSE = "stopChatResponse"
const val TELEMETRY_EVENT = "telemetry/event"
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat

class TelemetryEventNotification(
override val command: String = TELEMETRY_EVENT,
override val params: Map<String, Any?>,
) : ChatNotification<Map<String, Any?>>

Check warning on line 9 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/TelemetryEventNotification.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/TelemetryEventNotification.kt#L6-L9

Added lines #L6 - L9 were not covered by tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.amazonq.lsp.util

import software.amazon.awssdk.services.toolkittelemetry.model.MetricUnit

object TelemetryParsingUtil {

fun parseMetricUnit(value: Any?): MetricUnit =
when (value) {

Check warning on line 11 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/TelemetryParsingUtil.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/TelemetryParsingUtil.kt#L11

Added line #L11 was not covered by tests
is String -> MetricUnit.fromValue(value) ?: MetricUnit.NONE
is MetricUnit -> value
else -> MetricUnit.NONE
}

Check warning on line 15 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/TelemetryParsingUtil.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/TelemetryParsingUtil.kt#L14-L15

Added lines #L14 - L15 were not covered by tests
}
Loading
Loading