Skip to content

Commit fca45a8

Browse files
damntreckyNick Ardecky
andauthored
Add validation on startup (#4138)
* Chore - Add code transform validation on startup --------- Co-authored-by: Nick Ardecky <[email protected]>
1 parent ad3831f commit fca45a8

File tree

4 files changed

+28
-7
lines changed

4 files changed

+28
-7
lines changed

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerManager.kt

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -205,11 +205,11 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
205205
if (isModernizationInProgress.getAndSet(true)) return@launch
206206
val validationResult = validate(project)
207207
runInEdt {
208+
sendValidationResultTelemetry(validationResult)
208209
if (validationResult.valid) {
209210
runModernize(validationResult.validatedBuildFiles) ?: isModernizationInProgress.set(false)
210211
} else {
211212
warnUnsupportedProject(validationResult.invalidReason)
212-
sendValidationResultTelemetry(validationResult)
213213
isModernizationInProgress.set(false)
214214
}
215215
}
@@ -224,15 +224,24 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
224224
)
225225
}
226226

227-
private fun sendValidationResultTelemetry(validationResult: ValidationResult) {
228-
if (!validationResult.valid) {
227+
private fun sendValidationResultTelemetry(validationResult: ValidationResult, onProjectFirstOpen: Boolean = false) {
228+
// Old telemetry event to be fired only when users click on transform
229+
if (!validationResult.valid && !onProjectFirstOpen) {
229230
CodetransformTelemetry.isDoubleClickedToTriggerInvalidProject(
230231
codeTransformPreValidationError = validationResult.invalidTelemetryReason.category ?: CodeTransformPreValidationError.Unknown,
231232
codeTransformSessionId = CodeTransformTelemetryState.instance.getSessionId(),
232233
result = Result.Failed,
233234
reason = validationResult.invalidTelemetryReason.additonalInfo
234235
)
235236
}
237+
// New projectDetails metric should always be fired whether the project was valid or invalid
238+
CodetransformTelemetry.projectDetails(
239+
codeTransformSessionId = CodeTransformTelemetryState.instance.getSessionId(),
240+
result = if (!validationResult.valid) Result.Failed else Result.Unknown,
241+
reason = if (!validationResult.valid) validationResult.invalidTelemetryReason.additonalInfo else null,
242+
codeTransformPreValidationError = validationResult.invalidTelemetryReason.category ?: CodeTransformPreValidationError.Unknown,
243+
codeTransformLocalJavaVersion = project.tryGetJdk().toString()
244+
)
236245
}
237246

238247
fun stopModernize() {
@@ -442,15 +451,24 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
442451
}
443452
}
444453

445-
fun tryResumeJob() = projectCoroutineScope(project).launch {
454+
fun tryResumeJob(onProjectFirstOpen: Boolean = false) = projectCoroutineScope(project).launch {
446455
try {
447456
val notYetResumed = isResumingJob.compareAndSet(false, true)
457+
// If the job is already running, compareAndSet will return false because the expected
458+
// behavior is that the job is not running when trying to resume
448459
if (!notYetResumed) {
449460
return@launch
450461
}
451462

452463
LOG.info { "Attempting to resume job, current state is: $managerState" }
453464
if (!managerState.flags.getOrDefault(StateFlags.IS_ONGOING, false)) return@launch
465+
466+
// Gather project details
467+
if (onProjectFirstOpen) {
468+
val validationResult = validate(project)
469+
sendValidationResultTelemetry(validationResult, onProjectFirstOpen)
470+
}
471+
454472
val context = managerState.toSessionContext(project)
455473
val session = CodeModernizerSession(context)
456474
val lastJobId = managerState.getLatestJobId()

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerSession.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,8 @@ class CodeModernizerSession(
286286
codeTransformApiNames = CodeTransformApiNames.UploadZip,
287287
codeTransformSessionId = CodeTransformTelemetryState.instance.getSessionId(),
288288
codeTransformRunTimeLatency = calculateTotalLatency(uploadStartTime, Instant.now()),
289-
codeTransformTotalByteSize = payload.length().toInt()
289+
codeTransformTotalByteSize = payload.length().toInt(),
290+
codeTransformRequestId = createUploadUrlResponse.responseMetadata().requestId()
290291
)
291292
LOG.warn { "Upload complete" }
292293
}

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerStartupActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class CodeModernizerStartupActivity : StartupActivity.DumbAware {
1414
*/
1515
override fun runActivity(project: Project) {
1616
if (!isCodeModernizerAvailable(project)) return
17-
CodeModernizerManager.getInstance(project).tryResumeJob()
17+
val codeModernizerInstance = CodeModernizerManager.getInstance(project)
18+
codeModernizerInstance.tryResumeJob(true)
1819
}
1920
}

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/cwc/controller/ChatController.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ import software.aws.toolkits.jetbrains.services.cwc.messages.OnboardingPageInter
7373
import software.aws.toolkits.jetbrains.services.cwc.messages.QuickActionMessage
7474
import software.aws.toolkits.jetbrains.services.cwc.storage.ChatSessionStorage
7575
import software.aws.toolkits.resources.message
76+
import software.aws.toolkits.telemetry.CodeTransformStartSrcComponents
7677
import software.aws.toolkits.telemetry.CodetransformTelemetry
7778
import software.aws.toolkits.telemetry.CwsprChatCommandType
7879
import java.time.Instant
@@ -140,7 +141,7 @@ class ChatController private constructor(
140141
ApplicationManager.getApplication().invokeLater {
141142
runInEdt {
142143
if (!isActive) {
143-
manager.validateAndStart()
144+
manager.validateAndStart(CodeTransformStartSrcComponents.ChatPrompt)
144145
} else {
145146
manager.getBottomToolWindow().show()
146147
}

0 commit comments

Comments
 (0)