Skip to content

Commit 6e2a222

Browse files
committed
Adding telemetry field status to utg events and some UX modifications for progress bar
1 parent 3e129b2 commit 6e2a222

File tree

8 files changed

+47
-31
lines changed

8 files changed

+47
-31
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ mockitoKotlin = "5.4.0"
2727
mockk = "1.13.10"
2828
nimbus-jose-jwt = "9.40"
2929
node-gradle = "7.0.2"
30-
telemetryGenerator = "1.0.299"
30+
telemetryGenerator = "1.0.307"
3131
testLogger = "4.0.0"
3232
testRetry = "1.5.10"
3333
# test-only; platform provides slf4j transitively at runtime

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/CodeTestChatItems.kt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,14 @@ fun testGenProgressField(value: Int) = ProgressField(
5151

5252
val fixingTestCasesProgressField = ProgressField(
5353
status = "default",
54-
value= -1,
54+
value = -1,
5555
text = message("testgen.progressbar.fixing_test_cases"),
5656
actions = listOf(cancelTestGenBuildAndExecuteButton)
5757
)
5858

59-
fun createProgressField(messageKey: String): ProgressField {
60-
return ProgressField(
61-
status = "default",
62-
value = -1,
63-
text = message(messageKey),
64-
actions = listOf(if (messageKey == "testgen.progressbar.build_and_execute") cancelFixingTestCasesButton else cancelTestGenBuildAndExecuteButton)
65-
)
66-
}
59+
fun createProgressField(messageKey: String): ProgressField = ProgressField(
60+
status = "default",
61+
value = -1,
62+
text = message(messageKey),
63+
actions = listOf(if (messageKey == "testgen.progressbar.build_and_execute") cancelFixingTestCasesButton else cancelTestGenBuildAndExecuteButton)
64+
)

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/CodeWhispererUTGChatManager.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import software.aws.toolkits.jetbrains.utils.isQConnected
5555
import software.aws.toolkits.resources.message
5656
import software.aws.toolkits.telemetry.AmazonqTelemetry
5757
import software.aws.toolkits.telemetry.MetricResult
58+
import software.aws.toolkits.telemetry.Status
5859
import java.io.ByteArrayInputStream
5960
import java.io.ByteArrayOutputStream
6061
import java.io.File
@@ -616,7 +617,8 @@ class CodeWhispererUTGChatManager(val project: Project, private val cs: Coroutin
616617
isCodeBlockSelected = session.isCodeBlockSelected,
617618
artifactsUploadDuration = session.artifactUploadDuration,
618619
buildZipFileBytes = session.srcZipFileSize,
619-
requestId = session.startTestGenerationRequestId
620+
requestId = session.startTestGenerationRequestId,
621+
status = if (e.message == message("testgen.message.cancelled")) Status.CANCELLED else Status.FAILED,
620622
)
621623
}
622624
session.isGeneratingTests = false

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/controller/CodeTestChatController.kt

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,7 @@ import software.aws.toolkits.jetbrains.services.amazonqCodeTest.CodeWhispererUTG
6161
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.ConversationState
6262
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.FEATURE_NAME
6363
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.InboundAppMessagesHandler
64-
//import software.aws.toolkits.jetbrains.services.amazonqCodeTest.buildAndExecuteProgrogressField
6564
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.createProgressField
66-
//import software.aws.toolkits.jetbrains.services.amazonqCodeTest.fixingTestCasesProgressField
6765
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.messages.Button
6866
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.messages.CodeTestChatMessage
6967
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.messages.CodeTestChatMessageContent
@@ -75,7 +73,6 @@ import software.aws.toolkits.jetbrains.services.amazonqCodeTest.session.Session
7573
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.session.UTG_CHAT_MAX_ITERATION
7674
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.storage.ChatSessionStorage
7775
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.testGenCompletedField
78-
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.testGenProgressField
7976
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.utils.constructBuildAndExecutionSummaryText
8077
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.utils.runBuildOrTestCommand
8178
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendAuthNeededException
@@ -106,6 +103,7 @@ import software.aws.toolkits.telemetry.AmazonqTelemetry
106103
import software.aws.toolkits.telemetry.FeatureId
107104
import software.aws.toolkits.telemetry.InteractionType
108105
import software.aws.toolkits.telemetry.MetricResult
106+
import software.aws.toolkits.telemetry.Status
109107
import software.aws.toolkits.telemetry.UiTelemetry
110108
import java.io.File
111109
import java.nio.file.Files
@@ -316,7 +314,8 @@ class CodeTestChatController(
316314
credentialStartUrl = getStartUrl(project),
317315
result = MetricResult.Succeeded,
318316
perfClientLatency = (Instant.now().toEpochMilli() - session.startTimeOfTestGeneration),
319-
requestId = id
317+
requestId = id,
318+
status = Status.ACCEPTED
320319
)
321320
}
322321
session.isGeneratingTests = false
@@ -690,7 +689,8 @@ class CodeTestChatController(
690689
artifactsUploadDuration = session.artifactUploadDuration,
691690
buildPayloadBytes = session.srcPayloadSize,
692691
buildZipFileBytes = session.srcZipFileSize,
693-
requestId = session.startTestGenerationRequestId
692+
requestId = session.startTestGenerationRequestId,
693+
status = Status.ACCEPTED
694694
)
695695
}
696696

@@ -819,6 +819,7 @@ class CodeTestChatController(
819819
buildZipFileBytes = session.srcZipFileSize,
820820
requestId = session.startTestGenerationRequestId,
821821
update = session.updateBuildCommands,
822+
status = Status.ACCEPTED
822823
)
823824
}
824825
}
@@ -914,7 +915,8 @@ class CodeTestChatController(
914915
artifactsUploadDuration = session.artifactUploadDuration,
915916
buildPayloadBytes = session.srcPayloadSize,
916917
buildZipFileBytes = session.srcZipFileSize,
917-
requestId = session.startTestGenerationRequestId
918+
requestId = session.startTestGenerationRequestId,
919+
status = Status.REJECTED
918920
)
919921
} else {
920922
AmazonqTelemetry.unitTestGeneration(
@@ -942,6 +944,7 @@ class CodeTestChatController(
942944
buildZipFileBytes = session.srcZipFileSize,
943945
requestId = session.startTestGenerationRequestId,
944946
update = session.updateBuildCommands,
947+
status = Status.REJECTED
945948
)
946949
}
947950

@@ -980,6 +983,7 @@ class CodeTestChatController(
980983
buildZipFileBytes = session.srcZipFileSize,
981984
requestId = session.startTestGenerationRequestId,
982985
update = session.updateBuildCommands,
986+
status = Status.ACCEPTED
983987
)
984988
sessionCleanUp(message.tabId)
985989
}
@@ -1019,7 +1023,7 @@ class CodeTestChatController(
10191023
session.testFileRelativePathToProjectRoot,
10201024
codeTestChatHelper
10211025
)
1022-
if(session.buildStatus === BuildStatus.CANCELLED) {
1026+
if (session.buildStatus === BuildStatus.CANCELLED) {
10231027
return
10241028
}
10251029
while (taskContext.buildExitCode < 0) {
@@ -1063,6 +1067,7 @@ class CodeTestChatController(
10631067
buildZipFileBytes = session.srcZipFileSize,
10641068
requestId = session.startTestGenerationRequestId,
10651069
update = session.updateBuildCommands,
1070+
status = Status.ACCEPTED
10661071
)
10671072
sessionCleanUp(message.tabId)
10681073
return
@@ -1130,7 +1135,7 @@ class CodeTestChatController(
11301135
"stop_fixing_test_cases" -> {
11311136
UiTelemetry.click(null as Project?, "unitTestGeneration_cancelFixingTest")
11321137
session.isGeneratingTests = false
1133-
session.buildStatus=BuildStatus.CANCELLED
1138+
session.buildStatus = BuildStatus.CANCELLED
11341139
return
11351140
}
11361141
else -> {

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/messages/CodeTestMessage.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const val CODE_TEST_TAB_NAME = "codetest"
1717
enum class CodeTestButtonId(val id: String) {
1818
StopTestGeneration("stop_test_generation"),
1919
StopTestGenBuildAndExecution("stop_test_gen_build_and_execution"),
20-
StopFixingTestCases("stop_fixing_test_cases")
20+
StopFixingTestCases("stop_fixing_test_cases"),
2121
}
2222

2323
data class Button(

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/model/BuildAndExecuteStatusIcon.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,9 @@
33

44
package software.aws.toolkits.jetbrains.services.amazonqCodeTest.model
55

6-
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.session.BuildAndExecuteProgressStatus
7-
86
enum class BuildAndExecuteStatusIcon(val icon: String) {
97
WAIT("<span>&#9203;</span>"),
108
CURRENT("<span>&#9203;</span>"),
119
DONE("<span style=\"color: green;\">&#10004;</span>"),
1210
FAILED("<span style=\"color: red;\">&#10060;</span>"),
1311
}
14-

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/utils/UTGChatUtil.kt

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ import com.intellij.openapi.util.Key
1717
import com.intellij.openapi.vfs.VirtualFile
1818
import com.intellij.openapi.vfs.VirtualFileManager
1919
import com.intellij.ui.content.impl.ContentImpl
20-
import kotlinx.coroutines.delay
21-
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.cancellingProgressField
2220
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.controller.CodeTestChatHelper
2321
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.model.BuildAndExecuteStatusIcon
2422
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.session.BuildAndExecuteProgressStatus
@@ -29,7 +27,23 @@ import java.io.FileWriter
2927

3028
fun constructBuildAndExecutionSummaryText(currentStatus: BuildAndExecuteProgressStatus, codeTestChatHelper: CodeTestChatHelper): String {
3129
val progressMessages = mutableListOf<String>()
30+
if (currentStatus == BuildAndExecuteProgressStatus.RUN_BUILD) {
31+
progressMessages.add("${BuildAndExecuteStatusIcon.WAIT.icon} ${"Project compiling\n"}")
32+
}
33+
34+
if (currentStatus == BuildAndExecuteProgressStatus.RUN_EXECUTION_TESTS && codeTestChatHelper.getActiveSession().buildStatus == BuildStatus.FAILURE) {
35+
progressMessages.add("${BuildAndExecuteStatusIcon.WAIT.icon} ${"Fixing test failures\n"}")
36+
}
3237

38+
if (currentStatus > BuildAndExecuteProgressStatus.RUN_EXECUTION_TESTS && codeTestChatHelper.getActiveSession().buildStatus == BuildStatus.FAILURE) {
39+
progressMessages.add("${BuildAndExecuteStatusIcon.DONE.icon} ${"Fixed test failures\n"}")
40+
}
41+
42+
if (currentStatus >= BuildAndExecuteProgressStatus.RUN_EXECUTION_TESTS && codeTestChatHelper.getActiveSession().buildStatus == BuildStatus.SUCCESS) {
43+
progressMessages.add("${BuildAndExecuteStatusIcon.DONE.icon} ${"Project compiled\n"}\${BuildAndExecuteStatusIcon.DONE.icon} ${"All tests passed\n"}")
44+
}
45+
// TODO: Commenting out this code to do a better UX in the V2 version after science support
46+
/*
3347
if (currentStatus >= BuildAndExecuteProgressStatus.RUN_BUILD) {
3448
val buildStatus = when (currentStatus) {
3549
BuildAndExecuteProgressStatus.RUN_BUILD -> "in progress"
@@ -55,7 +69,7 @@ fun constructBuildAndExecutionSummaryText(currentStatus: BuildAndExecuteProgress
5569
val icon = if (currentStatus == BuildAndExecuteProgressStatus.RUN_EXECUTION_TESTS) BuildAndExecuteStatusIcon.WAIT.icon else BuildAndExecuteStatusIcon.DONE.icon
5670
progressMessages.add("$icon $buildStatus test failures")
5771
}
58-
72+
*/
5973
if (currentStatus >= BuildAndExecuteProgressStatus.FIXING_TEST_CASES && codeTestChatHelper.getActiveSession().buildStatus == BuildStatus.FAILURE) {
6074
progressMessages.add("\n")
6175
progressMessages.add("**Results**")
@@ -67,7 +81,7 @@ fun constructBuildAndExecutionSummaryText(currentStatus: BuildAndExecuteProgress
6781
return """
6882
Sure, This may take a few minutes and I'll update the progress here.
6983
70-
**Progress summary**
84+
**Progress summary**\n
7185
7286
""".trimIndent() + progressMessages.joinToString("\n")
7387
}
@@ -79,7 +93,7 @@ fun runBuildOrTestCommand(
7993
isBuildCommand: Boolean,
8094
buildAndExecuteTaskContext: BuildAndExecuteTaskContext,
8195
testFileRelativePathToProjectRoot: String,
82-
codeTestChatHelper: CodeTestChatHelper
96+
codeTestChatHelper: CodeTestChatHelper,
8397
) {
8498
val brazilPath = "${System.getProperty("user.home")}/.toolbox/bin:/usr/local/bin:/usr/bin:/bin:/sbin"
8599
if (localCommand.isEmpty()) {
@@ -161,7 +175,7 @@ fun runBuildOrTestCommand(
161175
// Check if the build has been cancelled
162176
if (codeTestChatHelper.getActiveSession().buildStatus == BuildStatus.CANCELLED) {
163177
processHandler.destroyProcess()
164-
console.print("\nBuild cancelled by user\n", ConsoleViewContentType.SYSTEM_OUTPUT)
178+
console.print("Build cancelled by user", ConsoleViewContentType.ERROR_OUTPUT)
165179
if (isBuildCommand) {
166180
buildAndExecuteTaskContext.buildExitCode = 1
167181
} else {

plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2075,11 +2075,11 @@ testgen.no_file_found=Sorry, there isn't a source file open right now that I can
20752075
testgen.placeholder.enter_slash_quick_actions=Enter "/" for quick actions
20762076
testgen.placeholder.modifyCommand=Type command lines or provide instructions...
20772077
testgen.placeholder.newtab=Ask any coding question or type \u0022/\u0022 for actions
2078+
testgen.placeholder.select_an_action_to_proceed=Please select an action to proceed.
20782079
testgen.placeholder.select_an_option = Please select an action to proceed (Accept or Reject)
20792080
testgen.placeholder.view_diff=Select View Diff to see the generated unit tests
20802081
testgen.placeholder.waiting_on_your_inputs=Waiting on your inputs...
2081-
testgen.placeholder.select_an_action_to_proceed=Please select an action to proceed.
2082-
testgen.progressbar.build_and_execute=Compiling project...
2082+
testgen.progressbar.build_and_execute=Project compiling...
20832083
testgen.progressbar.fixing_test_cases=Fixing test failures...
20842084
testgen.progressbar.generate_unit_tests=Generating unit tests...
20852085
toolkit.login.aws_builder_id.already_connected.cancel=Use existing AWS Builder ID

0 commit comments

Comments
 (0)