Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ class ViewJobAction : AnAction() {
project,
attributes.requesters[0].connectionConfig,
virtualFile.filenameInternal,
attributes.jobInfo
attributes.jobInfo,
attributes
)
}
}
Expand Down
54 changes: 44 additions & 10 deletions src/main/kotlin/org/zowe/explorer/ui/build/jobs/JobBuildTreeView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,19 @@ import com.intellij.openapi.actionSystem.DataProvider
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer
import com.intellij.ui.components.JBPanel
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import org.zowe.explorer.config.ConfigService
import org.zowe.explorer.config.connect.ConnectionConfig
import org.zowe.explorer.dataops.DataOpsManager
import org.zowe.explorer.dataops.attributes.RemoteJobAttributes
import org.zowe.explorer.dataops.log.JobLogFetcher
import org.zowe.explorer.dataops.log.JobProcessInfo
import org.zowe.explorer.dataops.log.MFLogger
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import org.zowe.kotlinsdk.SpoolFile
import org.zowe.kotlinsdk.annotations.ZVersion
import java.awt.BorderLayout
import java.text.SimpleDateFormat
import java.util.*
import javax.swing.JComponent
import javax.swing.tree.DefaultMutableTreeNode
Expand All @@ -62,15 +66,20 @@ class JobBuildTreeView(
consoleView: ConsoleView,
dataOpsManager: DataOpsManager,
workingDir: String = "",
project: Project
project: Project,
attributes: RemoteJobAttributes?
) : ExecutionConsole, DataProvider, JBPanel<JobBuildTreeView>() {

private val buildId = jobLogInfo.jobId ?: "UNKNOWN JOB ID"
private val jobNameNotNull = jobLogInfo.jobName ?: "UNKNOWN JOB"
private val connectionConfig = jobLogInfo.connectionConfig

private val buildDescriptor = DefaultBuildDescriptor(buildId, jobNameNotNull, workingDir, Date().time)
private val treeConsoleView = BuildTreeConsoleView(project, buildDescriptor, consoleView) { false }
private val execStarted = getTimestampFromStr(attributes?.jobInfo?.execStarted, connectionConfig)
private val execSubmitted = getTimestampFromStr(attributes?.jobInfo?.execSubmitted, connectionConfig)
private val execEnded = getTimestampFromStr(attributes?.jobInfo?.execEnded, connectionConfig)

private val buildDescriptor = DefaultBuildDescriptor(buildId, jobNameNotNull, workingDir, execStarted ?: execSubmitted ?: Date().time)
private val treeConsoleView = BuildTreeConsoleView(project, buildDescriptor, consoleView) { false }

private val actionToolbarGroup: ActionGroup = ActionManager.getInstance().getAction("org.zowe.explorer.actions.JobsLogActionBarGroup") as ActionGroup
private val place: String = "Jobs Log"
Expand Down Expand Up @@ -109,7 +118,9 @@ class JobBuildTreeView(
val cachedSpoolLog = jobLogger.logFetcher.getCachedLog()
if (cachedSpoolLog.count() != spoolFileToLogMap.count()) {
cachedSpoolLog.minus(spoolFileToLogMap.keys).forEach {
treeConsoleView.onEvent(buildId, StartEventImpl(it.key.id, buildId, Date().time, it.key.ddName))
treeConsoleView.onEvent(
buildId, StartEventImpl(it.key.id, buildId, execStarted ?: execSubmitted ?: Date().time, it.key.ddName)
)
}
cachedSpoolLog.forEach {
val prevLog = spoolFileToLogMap[it.key] ?: ""
Expand Down Expand Up @@ -164,17 +175,40 @@ class JobBuildTreeView(
finalLogFiles
.forEach {
treeConsoleView.onEvent(
buildId,
FinishEventImpl(it.key.id, buildId, Date().time, it.key.ddName, FailureResultImpl())
buildId, FinishEventImpl(
it.key.id,
buildId,
execEnded ?: execStarted ?: execSubmitted ?: Date().time,
it.key.ddName,
FailureResultImpl()
)
)
}
treeConsoleView.onEvent(
buildId,
FinishBuildEventImpl(buildId, buildId, Date().time, buildId, FailureResultImpl())
buildId, FinishBuildEventImpl(
buildId, buildId, execEnded ?: execStarted ?: execSubmitted ?: Date().time, buildId, FailureResultImpl()
)
)
}
}

/**
* The function converts a date string to a timestamp from the beginning of the epoch
*/
private fun getTimestampFromStr(attrDate: String?, connectionConfig: ConnectionConfig): Long? {
return if (attrDate != null) {
try {
if (connectionConfig.zVersion < ZVersion.ZOS_2_4)
SimpleDateFormat("dd MMM yyyy hh.mm.ss").parse(attrDate).time
else
SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS'Z'").parse(attrDate).time
} catch (e: Exception) {
null
}
}
else null
}

/**
* The function recursively sets the job execution status icon
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,15 @@ import com.intellij.ui.content.ContentManagerEvent
import com.intellij.ui.content.ContentManagerListener
import com.intellij.util.messages.Topic
import org.zowe.explorer.config.connect.ConnectionConfig
import org.zowe.explorer.dataops.attributes.RemoteJobAttributes
import org.zowe.explorer.dataops.log.JobProcessInfo
import org.zowe.explorer.utils.subscribe
import org.zowe.kotlinsdk.Job
import org.zowe.kotlinsdk.SubmitJobRequest

interface JobHandler {
fun submitted(project: Project, connectionConfig: ConnectionConfig, mfFilePath: String, jobRequest: SubmitJobRequest)
fun viewed(project: Project, connectionConfig: ConnectionConfig, mfFileName: String, jobStatus: Job)
fun viewed(project: Project, connectionConfig: ConnectionConfig, mfFileName: String, jobStatus: Job, attributes: RemoteJobAttributes)
}

@JvmField
Expand Down Expand Up @@ -58,7 +59,8 @@ class JobsWindowFactory: ToolWindowFactory {
connectionConfig: ConnectionConfig,
mfFilePath: String,
jobId: String?,
jobName: String?
jobName: String?,
attributes: RemoteJobAttributes? = null
) {
runInEdt {
toolWindow.setAvailable(true, null)
Expand All @@ -71,7 +73,8 @@ class JobsWindowFactory: ToolWindowFactory {
BuildTextConsoleView(project, true, emptyList()),
service(),
mfFilePath,
project
project,
attributes
)

Disposer.register(toolWindow.disposable, jobBuildTreeView)
Expand Down Expand Up @@ -101,8 +104,8 @@ class JobsWindowFactory: ToolWindowFactory {
override fun submitted(project: Project, connectionConfig: ConnectionConfig, mfFilePath: String, jobRequest: SubmitJobRequest) {
addJobBuildContentTab(project, toolWindow, connectionConfig, mfFilePath, jobRequest.jobid, jobRequest.jobname)
}
override fun viewed(project: Project, connectionConfig: ConnectionConfig, mfFileName: String, jobStatus: Job) {
addJobBuildContentTab(project, toolWindow, connectionConfig, mfFileName, jobStatus.jobId, jobStatus.jobName)
override fun viewed(project: Project, connectionConfig: ConnectionConfig, mfFileName: String, jobStatus: Job, attributes: RemoteJobAttributes) {
addJobBuildContentTab(project, toolWindow, connectionConfig, mfFileName, jobStatus.jobId, jobStatus.jobName, attributes)
}
}
)
Expand Down
Loading