Jonathan Jenne 248be23804 06-12-2022
2022-12-06 14:08:20 +01:00

66 lines
2.0 KiB
VB.net

Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Logging
Imports ECM.JobRunner.Common
Public Class JobStatus
Inherits BaseClass
Public ReadOnly Entries As New List(Of StatusItem)
Public Sub New(pLogConfig As LogConfig)
MyBase.New(pLogConfig)
End Sub
Public Sub Start(pJob As Quartz.IJobExecutionContext)
Dim oStatus = GetJobStatus(pJob)
Logger.Info("Starting Job [{0}]", oStatus.Id)
If oStatus IsNot Nothing Then
oStatus.Name = pJob.JobDetail.Key.Name
oStatus.StartTime = Date.Now
oStatus.Executing = True
End If
End Sub
Public Sub Update(pJob As Quartz.IJobExecutionContext, pCurrent As Integer, pTotal As Integer)
Dim oStatus = GetJobStatus(pJob)
Logger.Debug("Updating Job [{0}] with Status [{1}/{2}]", oStatus.Id, pCurrent, pTotal)
If oStatus IsNot Nothing Then
oStatus.ProgressTotal = pTotal
oStatus.ProgressCurrent = pCurrent
oStatus.ExecutionTime = pJob.JobRunTime
End If
End Sub
Public Sub Complete(pJob As Quartz.IJobExecutionContext)
Dim oStatus = GetJobStatus(pJob)
Logger.Info("Completing Job [{0}]", oStatus.Id)
If oStatus IsNot Nothing Then
oStatus.ProgressCurrent = oStatus.ProgressTotal
oStatus.ExecutionTime = pJob.JobRunTime
oStatus.Executing = False
oStatus.CompleteTime = Date.Now
End If
End Sub
Private Function GetJobStatus(pJob As Quartz.IJobExecutionContext) As StatusItem
Dim oJobId = GetJobId(pJob)
Dim oExists = Entries.Where(Function(e) e.Id = oJobId).Any()
If Not oExists Then
Entries.Add(New StatusItem With {.Id = oJobId})
End If
Return Entries.Where(Function(e) e.Id = oJobId).SingleOrDefault()
End Function
Private Function GetJobId(pJob As Quartz.IJobExecutionContext) As String
Return pJob.JobDetail.Key.ToString() & pJob.FireTimeUtc.ToString("u")
End Function
End Class