Skip to content

Commit db41289

Browse files
authored
Add JobId to Code Transform History (#4087)
1 parent d8ba11d commit db41289

File tree

8 files changed

+30
-22
lines changed

8 files changed

+30
-22
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "feature",
3+
"description" : "Add Job Id to Code Transform Job History"
4+
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
352352
codeTransformationSession = session
353353
initModernizationJobUI(false, project.getModuleOrProjectNameForFile(session.sessionContext.configurationFile))
354354
codeModernizerBottomWindowPanelManager.setResumeJobUI(currentJobResult, plan, session.sessionContext.sourceJavaVersion)
355-
session.resumeJob(currentJobResult.creationTime())
355+
session.resumeJob(currentJobResult.creationTime(), lastJobId)
356356
val result = handleJobStarted(lastJobId, session)
357357
postModernizationJob(result)
358358
} catch (e: Exception) {
@@ -606,7 +606,7 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
606606
// Code successfully stopped toast will display when post job is run after this
607607
CodetransformTelemetry.totalRunTime(
608608
codeTransformSessionId = CodeTransformTelemetryState.instance.getSessionId(),
609-
codeTransformResultStatusMessage = "JobCanceled",
609+
codeTransformResultStatusMessage = "JobCancelled",
610610
codeTransformRunTimeLatency = calculateTotalLatency(CodeTransformTelemetryState.instance.getStartTime(), Instant.now())
611611
)
612612
}
@@ -615,7 +615,7 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
615615
notifyTransformationFailedToStop(e.localizedMessage)
616616
CodetransformTelemetry.totalRunTime(
617617
codeTransformSessionId = CodeTransformTelemetryState.instance.getSessionId(),
618-
codeTransformResultStatusMessage = "JobCanceled",
618+
codeTransformResultStatusMessage = "JobCancelled",
619619
codeTransformRunTimeLatency = calculateTotalLatency(CodeTransformTelemetryState.instance.getStartTime(), Instant.now())
620620
)
621621
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,15 +116,15 @@ class CodeModernizerSession(
116116
return CodeModernizerStartJobResult.Cancelled
117117
}
118118
val startJobResponse = startJob(uploadId)
119-
state.putJobHistory(sessionContext, "STARTED")
119+
state.putJobHistory(sessionContext, TransformationStatus.STARTED, startJobResponse.transformationJobId())
120120
state.currentJobStatus = TransformationStatus.STARTED
121121
CodeModernizerStartJobResult.Started(JobId(startJobResponse.transformationJobId()))
122122
} catch (e: AlreadyDisposedException) {
123123
LOG.warn { e.localizedMessage }
124124
return CodeModernizerStartJobResult.Disposed
125125
} catch (e: Exception) {
126126
val errorMessage = "Failed to start job"
127-
state.putJobHistory(sessionContext, "FAILED TO START")
127+
state.putJobHistory(sessionContext, TransformationStatus.FAILED)
128128
state.currentJobStatus = TransformationStatus.FAILED
129129
CodetransformTelemetry.logGeneralError(
130130
codeTransformApiErrorMessage = errorMessage,
@@ -161,7 +161,7 @@ class CodeModernizerSession(
161161
state.currentJobStatus = new
162162
sessionContext.project.refreshCwQTree()
163163
val instant = Instant.now()
164-
state.updateJobHistory(sessionContext, new.name, instant)
164+
state.updateJobHistory(sessionContext, new, instant)
165165
setCurrentJobStopTime(new, instant)
166166
setCurrentJobSummary(new)
167167
jobTransitionHandler(new, plan)
@@ -250,7 +250,7 @@ class CodeModernizerSession(
250250
/**
251251
* This will resume the job, i.e. it will resume the main job loop kicked of by [createModernizationJob]
252252
*/
253-
fun resumeJob(startTime: Instant) = state.putJobHistory(sessionContext, "Started", startTime)
253+
fun resumeJob(startTime: Instant, jobId: JobId) = state.putJobHistory(sessionContext, TransformationStatus.STARTED, jobId.id, startTime)
254254

255255
/*
256256
* Adapted from [CodeWhispererCodeScanSession]
@@ -412,7 +412,7 @@ class CodeModernizerSession(
412412
isPartialSuccess = true
413413
}
414414
val instant = Instant.now()
415-
state.updateJobHistory(sessionContext, new.name, instant)
415+
state.updateJobHistory(sessionContext, new, instant)
416416
setCurrentJobStopTime(new, instant)
417417
jobTransitionHandler(new, plan)
418418
LOG.warn { "in awaitJobCompletion, state changed for job $jobId: $old -> $new" }

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codemodernizer/model/JobHistoryItem.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@ import java.time.Instant
77
import kotlin.time.Duration.Companion.seconds
88
import kotlin.time.toKotlinDuration
99

10-
data class JobHistoryItem(val moduleName: String, val status: String, val startTime: Instant, val runTime: java.time.Duration) {
10+
data class JobHistoryItem(val moduleName: String, val status: String, val startTime: Instant, val runTime: java.time.Duration, val jobId: String) {
1111
operator fun get(col: Int): Any = when (col) {
1212
0 -> moduleName
1313
1 -> status
1414
2 -> startTime
1515
3 -> runTime.toKotlinDuration().inWholeSeconds.seconds.toString()
16+
4 -> jobId
1617
else -> throw IllegalArgumentException("Invalid column $col")
1718
}
1819
}

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codemodernizer/panels/CodeModernizerJobHistoryTablePanel.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ class CodeModernizerJobHistoryTablePanel : JPanel(BorderLayout()) {
2121
message("codemodernizer.toolwindow.table.header.module_name"),
2222
message("codemodernizer.toolwindow.table.header.status"),
2323
message("codemodernizer.toolwindow.table.header.date"),
24-
message("codemodernizer.toolwindow.table.header.run_length")
24+
message("codemodernizer.toolwindow.table.header.run_length"),
25+
message("codemodernizer.toolwindow.table.header.job_id"),
2526
)
2627
var tableData: Array<JobHistoryItem> = emptyArray()
2728
var tableModel = JobHistoryTableModel(tableData, columnNames)

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codemodernizer/state/CodeModernizerSessionState.kt

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,24 @@ class CodeModernizerSessionState {
2929
var transformationSummary: TransformationSummary? = null
3030
var currentJobId: JobId? = null
3131

32-
private fun getJobItemId(sessionContext: CodeModernizerSessionContext) = Path(sessionContext.configurationFile.path).toAbsolutePath().toString()
33-
fun putJobHistory(sessionContext: CodeModernizerSessionContext, status: String, startedAt: Instant = Instant.now()) {
34-
val id = getJobItemId(sessionContext)
32+
private fun getJobModuleName(sessionContext: CodeModernizerSessionContext) = Path(sessionContext.configurationFile.path).toAbsolutePath().toString()
33+
fun putJobHistory(sessionContext: CodeModernizerSessionContext, status: TransformationStatus, jobId: String = "", startedAt: Instant = Instant.now()) {
34+
val moduleName = getJobModuleName(sessionContext)
3535
val jobHistoryItem = JobHistoryItem(
36-
id,
37-
status,
36+
moduleName,
37+
status.name,
3838
startedAt,
3939
Duration.ZERO,
40+
jobId,
4041
)
41-
previousJobHistory[id] = jobHistoryItem
42+
previousJobHistory[moduleName] = jobHistoryItem
4243
}
4344

44-
fun updateJobHistory(sessionContext: CodeModernizerSessionContext, newStatus: String, endTime: Instant) {
45-
val id = getJobItemId(sessionContext)
46-
val jobStatus = previousJobHistory.get(id) ?: throw CodeModernizerException("Unable to update the job history for $id")
45+
fun updateJobHistory(sessionContext: CodeModernizerSessionContext, newStatus: TransformationStatus, endTime: Instant) {
46+
val moduleName = getJobModuleName(sessionContext)
47+
val jobStatus = previousJobHistory.get(moduleName) ?: throw CodeModernizerException("Unable to update the job history for $moduleName")
4748
val timeTaken = Duration.between(jobStatus.startTime, endTime)
48-
previousJobHistory[id] = jobStatus.copy(status = newStatus, runTime = timeTaken)
49+
previousJobHistory[moduleName] = jobStatus.copy(status = newStatus.name, runTime = timeTaken)
4950
}
5051

5152
fun getJobHistory(): Array<JobHistoryItem> = previousJobHistory.values.toTypedArray()

jetbrains-core/tst/software/aws/toolkits/jetbrains/services/codewhisperer/codemodernizer/panels/CodeModernizerJobHistoryPanelTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@ class CodeModernizerJobHistoryPanelTest {
1717
@Test
1818
fun `does render table with headers and text`() {
1919
val testData = arrayOf(
20-
JobHistoryItem("Java8Test", "Completed", Instant.now(), Duration.ZERO),
20+
JobHistoryItem("Java8Test", "Completed", Instant.now(), Duration.ZERO, "MockJobId"),
2121
)
2222
val tablePanelMock = spy(CodeModernizerJobHistoryTablePanel())
2323
tablePanelMock.setDefaultUI()
2424
tablePanelMock.updateTableData(testData)
2525
verify(tablePanelMock, times(1)).setDefaultUI()
2626
verify(tablePanelMock, times(1)).updateTableData(testData)
2727
assertThat(tablePanelMock.headerLabel.text).isEqualTo("Transformation job history")
28-
assertThat(tablePanelMock.jbTable.columnCount).isEqualTo(4)
28+
assertThat(tablePanelMock.jbTable.columnCount).isEqualTo(5)
2929
assertThat(tablePanelMock.jbTable.isEmpty).isFalse()
3030
assertThat(tablePanelMock.tableData).isEqualTo(testData)
3131
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,7 @@ codemodernizer.toolwindow.scan_in_progress.stopping=Stopping the job...
590590
codemodernizer.toolwindow.scan_in_progress.transforming=Amazon Q is transforming your code. Details will appear soon.
591591
codemodernizer.toolwindow.stop_scan=Stop job
592592
codemodernizer.toolwindow.table.header.date=Date
593+
codemodernizer.toolwindow.table.header.job_id=Job Id
593594
codemodernizer.toolwindow.table.header.module_name=Module name
594595
codemodernizer.toolwindow.table.header.run_length=Job running time
595596
codemodernizer.toolwindow.table.header.status=Status

0 commit comments

Comments
 (0)