Skip to content

Commit 2ce8fcf

Browse files
authored
add logs of requestId for ListAvailableCustomizations calls (#3982)
1 parent bbba98f commit 2ce8fcf

File tree

3 files changed

+68
-8
lines changed

3 files changed

+68
-8
lines changed

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import software.amazon.awssdk.services.codewhispererruntime.model.ListAvailableC
2525
import software.amazon.awssdk.services.codewhispererruntime.model.OptOutPreference
2626
import software.amazon.awssdk.services.codewhispererruntime.model.SendTelemetryEventResponse
2727
import software.amazon.awssdk.services.codewhispererruntime.model.SuggestionState
28-
import software.amazon.awssdk.services.codewhispererruntime.paginators.ListAvailableCustomizationsIterable
28+
import software.aws.toolkits.core.utils.debug
2929
import software.aws.toolkits.core.utils.getLogger
3030
import software.aws.toolkits.core.utils.warn
3131
import software.aws.toolkits.jetbrains.core.AwsClientManager
@@ -36,6 +36,7 @@ import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection
3636
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
3737
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManagerListener
3838
import software.aws.toolkits.jetbrains.core.credentials.pinning.CodeWhispererConnection
39+
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererCustomization
3940
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager
4041
import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage
4142
import software.aws.toolkits.jetbrains.services.codewhisperer.service.RequestContext
@@ -79,7 +80,7 @@ interface CodeWhispererClientAdaptor : Disposable {
7980
isSigv4: Boolean = shouldUseSigv4Client(project)
8081
): ListCodeScanFindingsResponse
8182

82-
fun listAvailableCustomizations(): ListAvailableCustomizationsIterable
83+
fun listAvailableCustomizations(): List<CodeWhispererCustomization>
8384

8485
fun sendUserTriggerDecisionTelemetry(
8586
requestContext: RequestContext,
@@ -190,8 +191,24 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW
190191
}
191192

192193
// DO NOT directly use this method to fetch customizations, use wrapper [CodeWhispererModelConfigurator.listCustomization()] instead
193-
override fun listAvailableCustomizations(): ListAvailableCustomizationsIterable =
194+
override fun listAvailableCustomizations(): List<CodeWhispererCustomization> =
194195
bearerClient().listAvailableCustomizationsPaginator(ListAvailableCustomizationsRequest.builder().build())
196+
.stream()
197+
.toList()
198+
.flatMap { resp ->
199+
LOG.debug {
200+
"listAvailableCustomizations: requestId: ${resp.responseMetadata().requestId()}, customizations: ${
201+
resp.customizations().map { it.name() }
202+
}"
203+
}
204+
resp.customizations().map {
205+
CodeWhispererCustomization(
206+
arn = it.arn(),
207+
name = it.name(),
208+
description = it.description()
209+
)
210+
}
211+
}
195212

196213
override fun sendUserTriggerDecisionTelemetry(
197214
requestContext: RequestContext,

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/customization/CodeWhispererModelConfigurator.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,7 @@ class DefaultCodeWhispererModelConfigurator : CodeWhispererModelConfigurator, Pe
119119
calculateIfIamIdentityCenterConnection(project) {
120120
// 1. invoke API and get result
121121
val listAvailableCustomizationsResult = try {
122-
val result = CodeWhispererClientAdaptor.getInstance(project).listAvailableCustomizations().customizations().map { custom ->
123-
CodeWhispererCustomization(arn = custom.arn(), name = custom.name(), description = custom.description())
124-
}
125-
LOG.debug { "ListAvailableCustomizations: connection ${it.id} result: $result" }
126-
result
122+
CodeWhispererClientAdaptor.getInstance(project).listAvailableCustomizations()
127123
} catch (e: Exception) {
128124
val requestId = (e as? CodeWhispererRuntimeException)?.requestId()
129125
val logMessage = if (CodeWhispererConstants.Customization.noAccessToCustomizationExceptionPredicate(e)) {

jetbrains-core/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererClientAdaptorTest.kt

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,12 @@ import software.amazon.awssdk.services.codewhispererruntime.CodeWhispererRuntime
4040
import software.amazon.awssdk.services.codewhispererruntime.model.CodeAnalysisStatus
4141
import software.amazon.awssdk.services.codewhispererruntime.model.CreateUploadUrlRequest
4242
import software.amazon.awssdk.services.codewhispererruntime.model.CreateUploadUrlResponse
43+
import software.amazon.awssdk.services.codewhispererruntime.model.Customization
4344
import software.amazon.awssdk.services.codewhispererruntime.model.GenerateCompletionsRequest
4445
import software.amazon.awssdk.services.codewhispererruntime.model.GetCodeAnalysisRequest
4546
import software.amazon.awssdk.services.codewhispererruntime.model.GetCodeAnalysisResponse
47+
import software.amazon.awssdk.services.codewhispererruntime.model.ListAvailableCustomizationsRequest
48+
import software.amazon.awssdk.services.codewhispererruntime.model.ListAvailableCustomizationsResponse
4649
import software.amazon.awssdk.services.codewhispererruntime.model.ListCodeAnalysisFindingsRequest
4750
import software.amazon.awssdk.services.codewhispererruntime.model.ListCodeAnalysisFindingsResponse
4851
import software.amazon.awssdk.services.codewhispererruntime.model.OptOutPreference
@@ -51,6 +54,7 @@ import software.amazon.awssdk.services.codewhispererruntime.model.SendTelemetryE
5154
import software.amazon.awssdk.services.codewhispererruntime.model.StartCodeAnalysisRequest
5255
import software.amazon.awssdk.services.codewhispererruntime.model.StartCodeAnalysisResponse
5356
import software.amazon.awssdk.services.codewhispererruntime.paginators.GenerateCompletionsIterable
57+
import software.amazon.awssdk.services.codewhispererruntime.paginators.ListAvailableCustomizationsIterable
5458
import software.amazon.awssdk.services.ssooidc.SsoOidcClient
5559
import software.aws.toolkits.core.TokenConnectionSettings
5660
import software.aws.toolkits.core.utils.test.aString
@@ -68,6 +72,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestU
6872
import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestUtil.sdkHttpResponse
6973
import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererClientAdaptor
7074
import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererClientAdaptorImpl
75+
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererCustomization
7176
import software.aws.toolkits.jetbrains.settings.AwsSettings
7277

7378
class CodeWhispererClientAdaptorTest {
@@ -138,6 +143,48 @@ class CodeWhispererClientAdaptorTest {
138143
assertThat("us-east-1").isEqualTo(SONO_REGION)
139144
}
140145

146+
@Test
147+
fun `listCustomizations`() {
148+
val sdkIterable = ListAvailableCustomizationsIterable(bearerClient, ListAvailableCustomizationsRequest.builder().build())
149+
val mockResponse1 = ListAvailableCustomizationsResponse.builder()
150+
.customizations(
151+
listOf(
152+
Customization.builder().name("custom-1").arn("arn-1").build(),
153+
Customization.builder().name("custom-2").arn("arn-2").build()
154+
)
155+
)
156+
.nextToken("token-1")
157+
.responseMetadata(metadata)
158+
.sdkHttpResponse(sdkHttpResponse)
159+
.build() as ListAvailableCustomizationsResponse
160+
161+
val mockResponse2 = ListAvailableCustomizationsResponse.builder()
162+
.customizations(
163+
listOf(
164+
Customization.builder().name("custom-3").arn("arn-3").build(),
165+
)
166+
)
167+
.nextToken("")
168+
.responseMetadata(metadata)
169+
.sdkHttpResponse(sdkHttpResponse)
170+
.build() as ListAvailableCustomizationsResponse
171+
172+
bearerClient.stub { client ->
173+
on { client.listAvailableCustomizations(any<ListAvailableCustomizationsRequest>()) } doReturnConsecutively listOf(mockResponse1, mockResponse2)
174+
on { client.listAvailableCustomizationsPaginator(any<ListAvailableCustomizationsRequest>()) } doReturn sdkIterable
175+
}
176+
177+
val actual = sut.listAvailableCustomizations()
178+
assertThat(actual).hasSize(3)
179+
assertThat(actual).isEqualTo(
180+
listOf(
181+
CodeWhispererCustomization(name = "custom-1", arn = "arn-1"),
182+
CodeWhispererCustomization(name = "custom-2", arn = "arn-2"),
183+
CodeWhispererCustomization(name = "custom-3", arn = "arn-3")
184+
)
185+
)
186+
}
187+
141188
@Test
142189
fun `generateCompletionsPaginator - bearer`() {
143190
val request = pythonRequest

0 commit comments

Comments
 (0)