Skip to content

Commit 44e2486

Browse files
authored
Q Code Transform - Minor UI changes (#4616)
1 parent 312cc91 commit 44e2486

File tree

6 files changed

+99
-42
lines changed

6 files changed

+99
-42
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Q Code Transform - Add troubleshooting document links to UI messages"
4+
}

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/ArtifactHandler.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import software.aws.toolkits.core.utils.info
2626
import software.aws.toolkits.jetbrains.core.coroutines.getCoroutineBgContext
2727
import software.aws.toolkits.jetbrains.core.coroutines.projectCoroutineScope
2828
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.NoTokenInitializedException
29-
import software.aws.toolkits.jetbrains.services.amazonq.CODE_TRANSFORM_TROUBLESHOOT_DOC_ARTIFACT
29+
import software.aws.toolkits.jetbrains.services.amazonq.CODE_TRANSFORM_TROUBLESHOOT_DOC_DOWNLOAD_ERROR_OVERVIEW
3030
import software.aws.toolkits.jetbrains.services.codemodernizer.client.GumbyClient
3131
import software.aws.toolkits.jetbrains.services.codemodernizer.commands.CodeTransformMessageListener
3232
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModernizerArtifact
@@ -319,7 +319,7 @@ class ArtifactHandler(private val project: Project, private val clientAdaptor: G
319319
project,
320320
listOf(
321321
openTroubleshootingGuideNotificationAction(
322-
CODE_TRANSFORM_TROUBLESHOOT_DOC_ARTIFACT
322+
CODE_TRANSFORM_TROUBLESHOOT_DOC_DOWNLOAD_ERROR_OVERVIEW
323323
)
324324
),
325325
)
@@ -332,7 +332,7 @@ class ArtifactHandler(private val project: Project, private val clientAdaptor: G
332332
project,
333333
listOf(
334334
openTroubleshootingGuideNotificationAction(
335-
CODE_TRANSFORM_TROUBLESHOOT_DOC_ARTIFACT
335+
CODE_TRANSFORM_TROUBLESHOOT_DOC_DOWNLOAD_ERROR_OVERVIEW
336336
)
337337
),
338338
)
@@ -346,7 +346,7 @@ class ArtifactHandler(private val project: Project, private val clientAdaptor: G
346346
project,
347347
listOf(
348348
openTroubleshootingGuideNotificationAction(
349-
CODE_TRANSFORM_TROUBLESHOOT_DOC_ARTIFACT
349+
CODE_TRANSFORM_TROUBLESHOOT_DOC_DOWNLOAD_ERROR_OVERVIEW
350350
)
351351
),
352352
)

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerSession.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -328,12 +328,12 @@ class CodeModernizerSession(
328328
val createUploadUrlResponse = clientAdaptor.createHilUploadUrl(sha256checksum, jobId = jobId)
329329

330330
LOG.info {
331-
"Uploading zip with checksum $sha256checksum using uploadId: ${
331+
"Uploading hil artifact with checksum $sha256checksum using uploadId: ${
332332
createUploadUrlResponse.uploadId()
333333
} and size ${(payload.length() / 1000).toInt()}kB"
334334
}
335335
if (isDisposed.get()) {
336-
throw AlreadyDisposedException("Disposed when about to upload zip to s3")
336+
throw AlreadyDisposedException("Disposed when about to upload hil artifact to s3")
337337
}
338338
val uploadStartTime = Instant.now()
339339
try {
@@ -373,12 +373,12 @@ class CodeModernizerSession(
373373
val createUploadUrlResponse = clientAdaptor.createGumbyUploadUrl(sha256checksum)
374374

375375
LOG.info {
376-
"Uploading zip at ${payload.path} with checksum $sha256checksum using uploadId: ${
376+
"Uploading project artifact at ${payload.path} with checksum $sha256checksum using uploadId: ${
377377
createUploadUrlResponse.uploadId()
378378
} and size ${(payload.length() / 1000).toInt()}kB"
379379
}
380380
if (isDisposed.get()) {
381-
throw AlreadyDisposedException("Disposed when about to upload zip to s3")
381+
throw AlreadyDisposedException("Disposed when about to upload project artifact to s3")
382382
}
383383
val uploadStartTime = Instant.now()
384384
try {
@@ -389,7 +389,7 @@ class CodeModernizerSession(
389389
createUploadUrlResponse.kmsKeyArn().orEmpty(),
390390
) { shouldStop.get() }
391391
} catch (e: Exception) {
392-
val errorMessage = "Unexpected error when uploading artifact to S3: $e"
392+
val errorMessage = "Unexpected error when uploading project artifact to S3: $e"
393393
LOG.error { errorMessage }
394394
// emit this metric here manually since we don't use callApi(), which emits its own metric
395395
telemetry.apiError(errorMessage, CodeTransformApiNames.UploadZip, createUploadUrlResponse.uploadId())

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/constants/CodeTransformChatItems.kt

Lines changed: 57 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,14 @@ import com.intellij.openapi.project.Project
77
import com.intellij.openapi.vfs.VirtualFile
88
import software.amazon.awssdk.services.codewhispererstreaming.model.TransformationDownloadArtifactType
99
import software.aws.toolkits.jetbrains.services.amazonq.CODE_TRANSFORM_PREREQUISITES
10+
import software.aws.toolkits.jetbrains.services.amazonq.CODE_TRANSFORM_TROUBLESHOOT_DOC_ALLOW_S3_ACCESS
11+
import software.aws.toolkits.jetbrains.services.amazonq.CODE_TRANSFORM_TROUBLESHOOT_DOC_CONFIGURE_PROXY
12+
import software.aws.toolkits.jetbrains.services.amazonq.CODE_TRANSFORM_TROUBLESHOOT_DOC_DOWNLOAD_ERROR_OVERVIEW
13+
import software.aws.toolkits.jetbrains.services.amazonq.CODE_TRANSFORM_TROUBLESHOOT_DOC_DOWNLOAD_EXPIRED
1014
import software.aws.toolkits.jetbrains.services.amazonq.CODE_TRANSFORM_TROUBLESHOOT_DOC_MVN_FAILURE
1115
import software.aws.toolkits.jetbrains.services.amazonq.CODE_TRANSFORM_TROUBLESHOOT_DOC_PROJECT_SIZE
16+
import software.aws.toolkits.jetbrains.services.amazonq.CODE_TRANSFORM_TROUBLESHOOT_DOC_REMOVE_WILDCARD
17+
import software.aws.toolkits.jetbrains.services.amazonq.CODE_TRANSFORM_TROUBLESHOOT_DOC_UPLOAD_ERROR_OVERVIEW
1218
import software.aws.toolkits.jetbrains.services.codemodernizer.messages.Button
1319
import software.aws.toolkits.jetbrains.services.codemodernizer.messages.CodeTransformButtonId
1420
import software.aws.toolkits.jetbrains.services.codemodernizer.messages.CodeTransformChatMessageContent
@@ -247,12 +253,39 @@ fun buildCompileLocalFailedChatContent() = CodeTransformChatMessageContent(
247253

248254
fun buildZipUploadFailedChatMessage(failureReason: UploadFailureReason): String {
249255
val resultMessage = when (failureReason) {
250-
is UploadFailureReason.PRESIGNED_URL_EXPIRED -> message("codemodernizer.chat.message.upload_failed_url_expired")
251-
is UploadFailureReason.HTTP_ERROR -> message("codemodernizer.chat.message.upload_failed_http_error", failureReason.statusCode)
256+
is UploadFailureReason.PRESIGNED_URL_EXPIRED -> "${message(
257+
"codemodernizer.chat.message.upload_failed_url_expired"
258+
)}\n\n${message(
259+
"codemodernizer.chat.message.validation.error.more_info",
260+
CODE_TRANSFORM_TROUBLESHOOT_DOC_ALLOW_S3_ACCESS
261+
)}"
262+
263+
is UploadFailureReason.HTTP_ERROR -> "${message(
264+
"codemodernizer.chat.message.upload_failed_http_error",
265+
failureReason.statusCode
266+
)}\n\n${message(
267+
"codemodernizer.chat.message.validation.error.more_info",
268+
CODE_TRANSFORM_TROUBLESHOOT_DOC_UPLOAD_ERROR_OVERVIEW
269+
)}"
270+
252271
is UploadFailureReason.CONNECTION_REFUSED -> message("codemodernizer.chat.message.upload_failed_connection_refused")
253-
is UploadFailureReason.OTHER -> message("codemodernizer.chat.message.upload_failed_other", failureReason.errorMessage)
272+
273+
is UploadFailureReason.OTHER -> "${message(
274+
"codemodernizer.chat.message.upload_failed_other",
275+
failureReason.errorMessage
276+
)}\n\n${message(
277+
"codemodernizer.chat.message.validation.error.more_info",
278+
CODE_TRANSFORM_TROUBLESHOOT_DOC_UPLOAD_ERROR_OVERVIEW
279+
)}"
280+
254281
is UploadFailureReason.CREDENTIALS_EXPIRED -> message("q.connection.expired")
255-
is UploadFailureReason.SSL_HANDSHAKE_ERROR -> message("codemodernizer.chat.message.upload_failed_ssl_error")
282+
283+
is UploadFailureReason.SSL_HANDSHAKE_ERROR -> "${message(
284+
"codemodernizer.chat.message.upload_failed_ssl_error"
285+
)}\n\n${message(
286+
"codemodernizer.chat.message.validation.error.more_info",
287+
CODE_TRANSFORM_TROUBLESHOOT_DOC_CONFIGURE_PROXY
288+
)}"
256289
}
257290
return resultMessage
258291
}
@@ -459,36 +492,40 @@ fun buildHilCannotResumeContent() = CodeTransformChatMessageContent(
459492

460493
fun buildDownloadFailureChatContent(downloadFailureReason: DownloadFailureReason): CodeTransformChatMessageContent? {
461494
val artifactText = getDownloadedArtifactTextFromType(downloadFailureReason.artifactType)
462-
val message = when (downloadFailureReason) {
463-
is DownloadFailureReason.SSL_HANDSHAKE_ERROR -> message(
464-
"codemodernizer.chat.message.download_failed_ssl",
465-
artifactText
495+
val (message, docLink) = when (downloadFailureReason) {
496+
is DownloadFailureReason.SSL_HANDSHAKE_ERROR -> Pair(
497+
message("codemodernizer.chat.message.download_failed_ssl", artifactText),
498+
CODE_TRANSFORM_TROUBLESHOOT_DOC_CONFIGURE_PROXY,
466499
)
467500

468-
is DownloadFailureReason.PROXY_WILDCARD_ERROR -> message(
469-
"codemodernizer.chat.message.download_failed_wildcard",
470-
artifactText
501+
is DownloadFailureReason.PROXY_WILDCARD_ERROR -> Pair(
502+
message("codemodernizer.chat.message.download_failed_wildcard", artifactText),
503+
CODE_TRANSFORM_TROUBLESHOOT_DOC_REMOVE_WILDCARD,
471504
)
472505

473-
is DownloadFailureReason.OTHER -> message(
474-
"codemodernizer.chat.message.download_failed_other",
475-
artifactText,
476-
downloadFailureReason.errorMessage
506+
is DownloadFailureReason.OTHER -> Pair(
507+
message("codemodernizer.chat.message.download_failed_other", artifactText, downloadFailureReason.errorMessage),
508+
CODE_TRANSFORM_TROUBLESHOOT_DOC_DOWNLOAD_ERROR_OVERVIEW,
477509
)
478510
is DownloadFailureReason.CREDENTIALS_EXPIRED -> return null // credential expiry resets chat, no point emitting a message
479-
is DownloadFailureReason.INVALID_ARTIFACT -> {
511+
is DownloadFailureReason.INVALID_ARTIFACT ->
480512
if (downloadFailureReason.artifactType == TransformationDownloadArtifactType.CLIENT_INSTRUCTIONS) {
481-
message("codemodernizer.chat.message.download_failed_client_instructions_expired")
513+
Pair(
514+
message("codemodernizer.chat.message.download_failed_client_instructions_expired"),
515+
CODE_TRANSFORM_TROUBLESHOOT_DOC_DOWNLOAD_EXPIRED,
516+
)
482517
} else {
483-
message("codemodernizer.chat.message.download_failed_invalid_artifact", artifactText)
518+
Pair(
519+
message("codemodernizer.chat.message.download_failed_invalid_artifact", artifactText),
520+
CODE_TRANSFORM_TROUBLESHOOT_DOC_DOWNLOAD_EXPIRED,
521+
)
484522
}
485-
}
486523
}
487524

488525
// DownloadFailureReason.OTHER might be retryable, so including buttons to allow retry.
489526
return CodeTransformChatMessageContent(
490527
type = CodeTransformChatMessageType.FinalizedAnswer,
491-
message = message,
528+
message = "$message\n\n${message("codemodernizer.chat.message.validation.error.more_info", docLink)}",
492529
buttons = if (downloadFailureReason.artifactType == TransformationDownloadArtifactType.CLIENT_INSTRUCTIONS &&
493530
(downloadFailureReason is DownloadFailureReason.OTHER || downloadFailureReason is DownloadFailureReason.SSL_HANDSHAKE_ERROR)
494531
) {

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

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,30 @@ const val SERVER_SIDE_ENCRYPTION = "x-amz-server-side-encryption"
88
const val AWS_KMS = "aws:kms"
99
const val SERVER_SIDE_ENCRYPTION_AWS_KMS_KEY_ID = "x-amz-server-side-encryption-aws-kms-key-id"
1010
const val CONTENT_SHA256 = "x-amz-checksum-sha256"
11+
12+
const val CODE_TRANSFORM_TROUBLESHOOT_DOC_PROJECT_SIZE =
13+
"https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/troubleshooting-code-transformation.html#reduce-project-size"
14+
15+
const val CODE_TRANSFORM_TROUBLESHOOT_DOC_CONFIGURE_PROXY =
16+
"https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/troubleshooting-code-transformation.html#configure-proxy"
17+
18+
const val CODE_TRANSFORM_TROUBLESHOOT_DOC_ALLOW_S3_ACCESS =
19+
"https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/troubleshooting-code-transformation.html#allowlist-s3-bucket"
20+
1121
const val CODE_TRANSFORM_TROUBLESHOOT_DOC_MVN_FAILURE =
1222
"https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/troubleshooting-code-transformation.html#maven-commands-failing"
13-
const val CODE_TRANSFORM_TROUBLESHOOT_DOC_PROJECT_SIZE =
14-
"https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/troubleshooting-code-transformation.html#project-size-limit"
23+
24+
const val CODE_TRANSFORM_TROUBLESHOOT_DOC_DOWNLOAD_EXPIRED =
25+
"https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/troubleshooting-code-transformation.html#download-24-hrs"
26+
27+
const val CODE_TRANSFORM_TROUBLESHOOT_DOC_REMOVE_WILDCARD =
28+
"https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/troubleshooting-code-transformation.html#remove-wildcard"
29+
30+
const val CODE_TRANSFORM_TROUBLESHOOT_DOC_UPLOAD_ERROR_OVERVIEW =
31+
"https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/troubleshooting-code-transformation.html#project-upload-fail"
32+
33+
const val CODE_TRANSFORM_TROUBLESHOOT_DOC_DOWNLOAD_ERROR_OVERVIEW =
34+
"https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/troubleshooting-code-transformation.html#download-code-fail"
35+
1536
const val CODE_TRANSFORM_PREREQUISITES =
1637
"https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/code-transformation.html#prerequisites"
17-
const val CODE_TRANSFORM_TROUBLESHOOT_DOC_ARTIFACT =
18-
"https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/troubleshooting-code-transformation.html#output-artifact-size-limit"
19-
20-
const val RESUME_TRANSFORM_USER_ACTION_COMPLETED = "COMPLETED"
21-
const val RESUME_TRANSFORM_USER_ACTION_REJECTED = "REJECTED"

0 commit comments

Comments
 (0)