merge historyitem and statusitem
This commit is contained in:
@@ -12,27 +12,27 @@ Namespace Scheduler
|
||||
|
||||
Private ReadOnly Logger As Logger
|
||||
Private ReadOnly LogConfig As LogConfig
|
||||
Private ReadOnly History As JobHistory
|
||||
'Private ReadOnly History As JobHistory
|
||||
|
||||
Public Sub New(pLogConfig As LogConfig, pJobHistory As JobHistory)
|
||||
Public Sub New(pLogConfig As LogConfig)
|
||||
MyBase.New()
|
||||
|
||||
LogConfig = pLogConfig
|
||||
Logger = pLogConfig.GetLogger()
|
||||
History = pJobHistory
|
||||
'History = pJobHistory
|
||||
End Sub
|
||||
|
||||
Public Overrides Function JobWasExecuted(context As IJobExecutionContext, jobException As JobExecutionException, Optional cancellationToken As Threading.CancellationToken = Nothing) As Task
|
||||
' TODO: This might not be needed anymore
|
||||
'
|
||||
If jobException Is Nothing Then
|
||||
If TypeOf context.Result Is JobResult Then
|
||||
Dim oResult As JobResult = context.Result
|
||||
History.AddSuccess(context.JobDetail.Key.Name, oResult.Description, oResult.Steps)
|
||||
Else
|
||||
|
||||
History.AddSuccess(context.JobDetail.Key.Name, "Job Successful!", New List(Of HistoryItem.HistoryStep))
|
||||
If TypeOf context.Result Is StatusItem Then
|
||||
Dim oResult As StatusItem = context.Result
|
||||
Logger.Info("Job [{0}] was executed in [{1}]!", oResult.Name, oResult.ExecutionTime)
|
||||
'History.AddSuccess(context.JobDetail.Key.Name, oResult.Description, oResult.Steps)
|
||||
End If
|
||||
Else
|
||||
History.AddError(context.JobDetail.Key.Name, jobException.Message, New List(Of HistoryItem.HistoryStep))
|
||||
'History.AddError(context.JobDetail.Key.Name, jobException.Message, New List(Of HistoryItem.HistoryStep))
|
||||
End If
|
||||
|
||||
Return MyBase.JobWasExecuted(context, jobException, cancellationToken)
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
Imports ECM.JobRunner.Common
|
||||
|
||||
Public Class JobResult
|
||||
Public Property Successful As Boolean
|
||||
Public Property Description As String
|
||||
Public Property Steps As List(Of HistoryItem.HistoryStep)
|
||||
End Class
|
||||
@@ -51,7 +51,7 @@ Namespace Scheduler
|
||||
|
||||
' initialize the scheduler
|
||||
Scheduler = Await Factory.GetScheduler()
|
||||
Scheduler.ListenerManager.AddJobListener(New JobListener(LogConfig, State.JobHistory))
|
||||
Scheduler.ListenerManager.AddJobListener(New JobListener(LogConfig))
|
||||
|
||||
' start the scheduler
|
||||
Await Scheduler.Start()
|
||||
|
||||
@@ -19,6 +19,7 @@ Public Class JobStatus
|
||||
If oStatus IsNot Nothing Then
|
||||
oStatus.Name = pJob.JobDetail.Key.Name
|
||||
oStatus.StartTime = Date.Now
|
||||
oStatus.UpdateTime = Date.Now
|
||||
oStatus.Executing = True
|
||||
End If
|
||||
End Sub
|
||||
@@ -32,28 +33,56 @@ Public Class JobStatus
|
||||
oStatus.ProgressTotal = pTotal
|
||||
oStatus.ProgressCurrent = pCurrent
|
||||
oStatus.ExecutionTime = pJob.JobRunTime
|
||||
oStatus.UpdateTime = Date.Now
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Public Sub Complete(pJob As Quartz.IJobExecutionContext)
|
||||
Public Function CompleteWithError(pJob As Quartz.IJobExecutionContext, pSteps As List(Of StatusItem.HistoryStep), pException As Exception) As StatusItem
|
||||
Return CompleteWithError(pJob, pSteps, pException.Message)
|
||||
End Function
|
||||
|
||||
Public Function CompleteWithError(pJob As Quartz.IJobExecutionContext, pSteps As List(Of StatusItem.HistoryStep), pMessage As String) As StatusItem
|
||||
Dim oStatus = GetJobStatus(pJob)
|
||||
|
||||
Logger.Info("Completing Job [{0}]", oStatus.Id)
|
||||
Logger.Info("Completing Job [{0}] with Error", oStatus.Id)
|
||||
|
||||
If oStatus IsNot Nothing Then
|
||||
oStatus.ProgressCurrent = oStatus.ProgressTotal
|
||||
oStatus.ExecutionTime = pJob.JobRunTime
|
||||
oStatus.Executing = False
|
||||
oStatus.CompleteTime = Date.Now
|
||||
oStatus.FailureMessage = pMessage
|
||||
oStatus.Successful = False
|
||||
oStatus.Steps = pSteps
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Return oStatus
|
||||
End Function
|
||||
|
||||
Public Function CompleteWithSuccess(pJob As Quartz.IJobExecutionContext, pSteps As List(Of StatusItem.HistoryStep), pMessage As String) As StatusItem
|
||||
Dim oStatus = GetJobStatus(pJob)
|
||||
|
||||
Logger.Info("Completing Job [{0}] with Success", oStatus.Id)
|
||||
|
||||
If oStatus IsNot Nothing Then
|
||||
oStatus.ProgressCurrent = oStatus.ProgressTotal
|
||||
oStatus.ExecutionTime = pJob.JobRunTime
|
||||
oStatus.Executing = False
|
||||
oStatus.CompleteTime = Date.Now
|
||||
oStatus.SuccessMessage = pMessage
|
||||
oStatus.Successful = False
|
||||
oStatus.Steps = pSteps
|
||||
End If
|
||||
|
||||
Return oStatus
|
||||
End Function
|
||||
|
||||
Private Function GetJobStatus(pJob As Quartz.IJobExecutionContext) As StatusItem
|
||||
Dim oJobId = GetJobId(pJob)
|
||||
Dim oExists = Entries.Where(Function(e) e.Id = oJobId).Any()
|
||||
Dim oExists = Entries.Where(Function(e) e.JobId = oJobId).Any()
|
||||
|
||||
If Not oExists Then
|
||||
Entries.Add(New StatusItem With {.Id = oJobId})
|
||||
Entries.Add(New StatusItem(oJobId))
|
||||
End If
|
||||
|
||||
Return Entries.Where(Function(e) e.Id = oJobId).SingleOrDefault()
|
||||
|
||||
@@ -16,7 +16,7 @@ Namespace Scheduler.Jobs
|
||||
Friend ExecutionId As String
|
||||
Friend Name As String
|
||||
|
||||
Friend ResultItems As New List(Of HistoryItem.HistoryStep)
|
||||
Friend JobSteps As New List(Of StatusItem.HistoryStep)
|
||||
|
||||
Private ctx As IJobExecutionContext
|
||||
|
||||
@@ -34,8 +34,10 @@ Namespace Scheduler.Jobs
|
||||
ExecutionId = Guid.NewGuid.ToString()
|
||||
Id = Integer.Parse(oArgs.Item("Id"))
|
||||
Name = oArgs.Item("Name")
|
||||
|
||||
State.JobStatus.Start(ctx)
|
||||
|
||||
Logger.Info("Job [{0}] is starting!", Id)
|
||||
|
||||
Return oJobData.Item(Constants.Scheduler.JOB_CONFIG_ARGUMENTS)
|
||||
End Function
|
||||
|
||||
@@ -43,43 +45,47 @@ Namespace Scheduler.Jobs
|
||||
State.JobStatus.Update(ctx, pCurrentValue, pTotalValue)
|
||||
End Sub
|
||||
|
||||
Public Sub LogStep(pLevel As HistoryItem.StepLevel, pMessage As String, ParamArray pArgs As String())
|
||||
ResultItems.Add(New HistoryItem.HistoryStep With {
|
||||
Public Sub LogDebug(pMessage As String, ParamArray pArgs As String())
|
||||
Logger.Debug(pMessage, pArgs)
|
||||
JobSteps.Add(New StatusItem.HistoryStep With {
|
||||
.Message = String.Format(pMessage, pArgs),
|
||||
.Level = pLevel
|
||||
.Level = StatusItem.STEP_DEBUG
|
||||
})
|
||||
End Sub
|
||||
|
||||
Public Function CompleteJob() As Task(Of Boolean)
|
||||
ctx.Result = New JobResult With {
|
||||
.Successful = True,
|
||||
.Steps = ResultItems,
|
||||
.Description = "Job completed."
|
||||
}
|
||||
State.JobStatus.Complete(ctx)
|
||||
Public Sub LogInfo(pMessage As String, ParamArray pArgs As String())
|
||||
Logger.Info(pMessage, pArgs)
|
||||
JobSteps.Add(New StatusItem.HistoryStep With {
|
||||
.Message = String.Format(pMessage, pArgs),
|
||||
.Level = StatusItem.STEP_INFO
|
||||
})
|
||||
End Sub
|
||||
|
||||
Public Sub LogWarning(pMessage As String, ParamArray pArgs As String())
|
||||
Logger.Warn(pMessage, pArgs)
|
||||
JobSteps.Add(New StatusItem.HistoryStep With {
|
||||
.Message = String.Format(pMessage, pArgs),
|
||||
.Level = StatusItem.STEP_WARNING
|
||||
})
|
||||
End Sub
|
||||
|
||||
Public Sub LogError(pMessage As String, ParamArray pArgs As String())
|
||||
Logger.Error(pMessage, pArgs)
|
||||
JobSteps.Add(New StatusItem.HistoryStep With {
|
||||
.Message = String.Format(pMessage, pArgs),
|
||||
.Level = StatusItem.STEP_ERROR
|
||||
})
|
||||
End Sub
|
||||
|
||||
|
||||
Public Function CompleteJob(pMessage As String) As Task(Of Boolean)
|
||||
ctx.Result = State.JobStatus.CompleteWithSuccess(ctx, JobSteps, pMessage)
|
||||
Return Task.FromResult(True)
|
||||
End Function
|
||||
|
||||
Public Function CompleteJob(pCompletionMessage As String) As Task(Of Boolean)
|
||||
ctx.Result = New JobResult With {
|
||||
.Successful = True,
|
||||
.Steps = ResultItems,
|
||||
.Description = pCompletionMessage
|
||||
}
|
||||
State.JobStatus.Complete(ctx)
|
||||
|
||||
Return Task.FromResult(True)
|
||||
End Function
|
||||
|
||||
Public Function CompleteJob(pException As Exception) As Task(Of Boolean)
|
||||
ctx.Result = New JobResult With {
|
||||
.Successful = False,
|
||||
.Steps = ResultItems,
|
||||
.Description = pException.Message
|
||||
}
|
||||
State.JobStatus.Complete(ctx)
|
||||
|
||||
Public Function CompleteJobWithError(pException As Exception) As Task(Of Boolean)
|
||||
ctx.Result = State.JobStatus.CompleteWithError(ctx, JobSteps, pException)
|
||||
Return Task.FromResult(False)
|
||||
End Function
|
||||
End Class
|
||||
|
||||
@@ -8,18 +8,17 @@ Namespace Scheduler.Jobs
|
||||
|
||||
Private Function IJob_Execute(context As IJobExecutionContext) As Task Implements IJob.Execute
|
||||
Dim oArgs = MyBase.InitializeJob(context)
|
||||
Dim oRandom = New Random()
|
||||
|
||||
Logger.Info("I'm a debug Job!")
|
||||
Logger.Info("Name: [{0}]", Name)
|
||||
Dim oTotal As Integer = oRandom.Next(5, 15)
|
||||
For index = 1 To oTotal
|
||||
Logger.Info("We are still waiting [{0}/{1}]", index, oTotal)
|
||||
LogInfo("We are still waiting [{0}/{1}]", index, oTotal)
|
||||
|
||||
Dim oResult = New JobResult() With {
|
||||
.Description = $"I'm a debug job and my result was [{Guid.NewGuid}]."
|
||||
}
|
||||
Threading.Thread.Sleep(1000)
|
||||
Next
|
||||
|
||||
context.Result = oResult
|
||||
|
||||
CompleteJob("Done!")
|
||||
Return Task.FromResult(True)
|
||||
Return CompleteJob("Finished, not waiting anymore!")
|
||||
End Function
|
||||
End Class
|
||||
End Namespace
|
||||
|
||||
@@ -6,47 +6,6 @@ Imports ECM.JobRunner.Common
|
||||
|
||||
Namespace Scheduler.Jobs
|
||||
|
||||
''' <summary>
|
||||
'''
|
||||
''' Parameters / Properties
|
||||
''' =======================
|
||||
'''
|
||||
''' - SourceDirectory
|
||||
''' - TargetDirectory
|
||||
''' - Include Subdirectories
|
||||
''' - Delete Subdirectories
|
||||
''' - Backup
|
||||
''' - BackupFolder
|
||||
''' - Overwrite
|
||||
''' - Windream DocType
|
||||
''' - Delete Files
|
||||
''' - Delete Directory
|
||||
''' - Delay
|
||||
'''
|
||||
''' Rules
|
||||
''' ======
|
||||
'''
|
||||
''' - TargetIndex
|
||||
''' - Active
|
||||
''' - Index From
|
||||
''' - Static
|
||||
''' - Static Value
|
||||
''' - File
|
||||
''' - Folder
|
||||
''' - Index Type
|
||||
''' - Separator
|
||||
''' - Current Date
|
||||
''' - Current Short Date
|
||||
''' - KOMPLETT
|
||||
''' - BEREICH
|
||||
''' - REST
|
||||
''' - TRENNZEICHEN
|
||||
''' - Separator
|
||||
''' - Remove Zeroes
|
||||
''' - Include Extension
|
||||
''' - OrderKey
|
||||
'''
|
||||
''' </summary>
|
||||
Public Class FileImportJob
|
||||
Inherits BaseJob
|
||||
Implements IJob
|
||||
@@ -69,7 +28,7 @@ Namespace Scheduler.Jobs
|
||||
Dim oObjectType = State.ObjectTypes.Where(Function(o) o.Name = oProfile.ObjectTypeName).SingleOrDefault()
|
||||
|
||||
If IO.Directory.Exists(oProfile.SourceFolder) = False Then
|
||||
LogStep(HistoryItem.StepLevel.Error, "Source directory [{0}] does not exist!", oProfile.SourceFolder)
|
||||
LogError("Source directory [{0}] does not exist!", oProfile.SourceFolder)
|
||||
Return Task.FromResult(False)
|
||||
End If
|
||||
|
||||
@@ -84,8 +43,7 @@ Namespace Scheduler.Jobs
|
||||
Return CompleteJob("No files for profile")
|
||||
End If
|
||||
|
||||
Logger.Info("[{0}] files found in source directory [{1}]", oFileNames.Count, oProfile.SourceFolder)
|
||||
LogStep(HistoryItem.StepLevel.Info, "{0} files found in source directory {1}", oFileNames.Count, oProfile.SourceFolder)
|
||||
LogInfo("{0} files found in source directory {1}", oFileNames.Count, oProfile.SourceFolder)
|
||||
|
||||
' - [ ] Process Rules, build list of files and indexes
|
||||
' - [x] Process Regex to filter out files
|
||||
@@ -110,15 +68,13 @@ Namespace Scheduler.Jobs
|
||||
' Check time to filter out files
|
||||
Dim oDateFilteredFiles = oFilteredFiles.Where(Function(f) FileIsOlderThan(f, pMinutes:=1)).ToList()
|
||||
Dim oDateFilteredCount = oFilteredFiles.Except(oDateFilteredFiles).Count()
|
||||
Logger.Debug("[{0}] Files filtered out for being too new.", oDateFilteredCount)
|
||||
LogStep(HistoryItem.StepLevel.Debug, "{0} Files filtered out for being too new.", oDateFilteredCount)
|
||||
LogDebug("{0} Files filtered out for being too new.", oDateFilteredCount)
|
||||
oFilteredFiles = oDateFilteredFiles
|
||||
|
||||
' Process Regex to filter out files
|
||||
Dim oRegexFilteredFiles = oFilteredFiles.Where(Function(f) Not FileMatchesRegex(f, oRegexList))
|
||||
Dim oRegexFilteredCount = oFilteredFiles.Except(oRegexFilteredFiles).Count()
|
||||
Logger.Debug("[{0}] Files filtered out for matching exclusion Regex.", oRegexFilteredCount)
|
||||
LogStep(HistoryItem.StepLevel.Debug, "{0} Files filtered out for matching exclusion Regex.", oRegexFilteredCount)
|
||||
LogDebug("{0} Files filtered out for matching exclusion Regex.", oRegexFilteredCount)
|
||||
oFilteredFiles = oDateFilteredFiles
|
||||
|
||||
'-------------------------------------------------------------------------------------------------
|
||||
@@ -143,8 +99,7 @@ Namespace Scheduler.Jobs
|
||||
oImportedFiles.Add(oFile)
|
||||
Next
|
||||
|
||||
Logger.Info("[{0}] files successfully Imported!", oImportedFiles.Count)
|
||||
LogStep(HistoryItem.StepLevel.Info, "{0} files successfully Imported!", oImportedFiles.Count)
|
||||
LogInfo("{0} files successfully Imported!", oImportedFiles.Count)
|
||||
|
||||
Dim oIndexedFiles As New List(Of ImportFile)
|
||||
For Each oFile In oImportedFiles
|
||||
@@ -156,8 +111,7 @@ Namespace Scheduler.Jobs
|
||||
Logger.Info("Indexing of file [{0}] done!", oFile.FilePathWindream)
|
||||
Next
|
||||
|
||||
Logger.Info("[{0}] files successfully Indexed!", oIndexedFiles.Count)
|
||||
LogStep(HistoryItem.StepLevel.Info, "{0} files successfully Indexed!", oIndexedFiles.Count)
|
||||
LogInfo("{0} files successfully Indexed!", oIndexedFiles.Count)
|
||||
|
||||
If oProfile.DeleteFiles = True Then
|
||||
Logger.Debug("Deleting [{0}] files before finishing job.", oFiles.Count)
|
||||
@@ -175,10 +129,9 @@ Namespace Scheduler.Jobs
|
||||
Return CompleteJob($"{oImportedFiles.Count} files successfully Processed!")
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
LogError("Unexpected Error: [{0}]", ex.Message)
|
||||
|
||||
LogStep(HistoryItem.StepLevel.Error, "Unexpected Error: [{0}]", ex.Message)
|
||||
|
||||
Return CompleteJob(ex)
|
||||
Return CompleteJobWithError(ex)
|
||||
End Try
|
||||
End Function
|
||||
|
||||
@@ -287,8 +240,7 @@ Namespace Scheduler.Jobs
|
||||
oValue = oValue.Substring(oStartIndex, oLength)
|
||||
Catch ex As Exception
|
||||
Dim oMessage = "Method SUBSTRING could not be applied to Index '{0}' and Parameters StartIndex [{1}], Length [{2}]. Error: '{3}'"
|
||||
LogStep(HistoryItem.StepLevel.Error, oMessage, oStep.IndexName, ex.Message, oStep.Argument1, oStep.Argument2)
|
||||
Logger.Error(ex)
|
||||
LogError(oMessage, oStep.IndexName, ex.Message, oStep.Argument1, oStep.Argument2)
|
||||
End Try
|
||||
|
||||
Case Common.Constants.METHOD_SPLIT
|
||||
@@ -306,8 +258,7 @@ Namespace Scheduler.Jobs
|
||||
Dim oSplit = oValue.Split(oSeparator)
|
||||
oValue = oSplit(oIndex)
|
||||
Catch ex As Exception
|
||||
LogStep(HistoryItem.StepLevel.Error, "Method SPLIT could not be applied to Index '{0}'. Error: '{1}'", oStep.IndexName, ex.Message)
|
||||
Logger.Error(ex)
|
||||
LogError("Method SPLIT could not be applied to Index '{0}'. Error: '{1}'", oStep.IndexName, ex.Message)
|
||||
End Try
|
||||
|
||||
Case Common.Constants.METHOD_REGEX
|
||||
@@ -321,8 +272,7 @@ Namespace Scheduler.Jobs
|
||||
oValue = oFalseValue
|
||||
End If
|
||||
Catch ex As Exception
|
||||
LogStep(HistoryItem.StepLevel.Error, "Method REGEX could not be applied to Index '{0}'. Error: '{1}'", oStep.IndexName, ex.Message)
|
||||
Logger.Error(ex)
|
||||
LogError("Method REGEX could not be applied to Index '{0}'. Error: '{1}'", oStep.IndexName, ex.Message)
|
||||
End Try
|
||||
|
||||
Case Common.Constants.METHOD_VALUE
|
||||
|
||||
@@ -11,14 +11,7 @@ Namespace Scheduler.Jobs
|
||||
|
||||
Logger.Info("Running File Index [{0}]", Name)
|
||||
|
||||
Dim oResult = New JobResult() With {
|
||||
.Description = $"File Index Job [{Name}] completed!"
|
||||
}
|
||||
|
||||
context.Result = oResult
|
||||
|
||||
CompleteJob("Done!")
|
||||
Return Task.FromResult(True)
|
||||
Return CompleteJob("Done!")
|
||||
End Function
|
||||
End Class
|
||||
End Namespace
|
||||
|
||||
Reference in New Issue
Block a user