merge historyitem and statusitem

This commit is contained in:
Jonathan Jenne 2022-12-20 12:00:15 +01:00
parent 835467f0d7
commit 343f47ca29
16 changed files with 187 additions and 219 deletions

View File

@ -1,10 +1,8 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8"?>
<configuration> <configuration>
<system.diagnostics> <system.diagnostics>
<sources> <sources>
<source name="System.ServiceModel" <source name="System.ServiceModel" switchValue="Warning" propagateActivity="true">
switchValue="Warning"
propagateActivity="true" >
<listeners> <listeners>
<add name="xml"/> <add name="xml"/>
</listeners> </listeners>
@ -16,20 +14,12 @@
</source> </source>
</sources> </sources>
<sharedListeners> <sharedListeners>
<add name="xml" <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="E:\LogFiles\ECMJobRunner.svclog"/>
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="E:\LogFiles\ECMJobRunner.svclog" />
</sharedListeners> </sharedListeners>
</system.diagnostics> </system.diagnostics>
<system.serviceModel> <system.serviceModel>
<diagnostics wmiProviderEnabled="true"> <diagnostics wmiProviderEnabled="true">
<messageLogging <messageLogging logEntireMessage="true" logMalformedMessages="false" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false" maxMessagesToLog="3000" maxSizeOfMessageToLog="2000"/>
logEntireMessage="true"
logMalformedMessages="false"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="false"
maxMessagesToLog="3000"
maxSizeOfMessageToLog="2000"/>
</diagnostics> </diagnostics>
</system.serviceModel> </system.serviceModel>
<startup> <startup>

View File

@ -14,6 +14,7 @@
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion> <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
@ -125,6 +126,7 @@
<Compile Include="My Project\Application.Designer.vb"> <Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon> <DependentUpon>Application.myapp</DependentUpon>
<DesignTime>True</DesignTime>
</Compile> </Compile>
<Compile Include="ProjectInstaller.Designer.vb"> <Compile Include="ProjectInstaller.Designer.vb">
<DependentUpon>ProjectInstaller.vb</DependentUpon> <DependentUpon>ProjectInstaller.vb</DependentUpon>
@ -133,9 +135,7 @@
<SubType>Component</SubType> <SubType>Component</SubType>
</Compile> </Compile>
<Compile Include="Scheduler\JobConfig.vb" /> <Compile Include="Scheduler\JobConfig.vb" />
<Compile Include="Scheduler\JobHistory.vb" />
<Compile Include="Scheduler\JobListener.vb" /> <Compile Include="Scheduler\JobListener.vb" />
<Compile Include="Scheduler\JobResult.vb" />
<Compile Include="Scheduler\JobScheduler.vb" /> <Compile Include="Scheduler\JobScheduler.vb" />
<Compile Include="Scheduler\JobStatus.vb" /> <Compile Include="Scheduler\JobStatus.vb" />
<Compile Include="Scheduler\Jobs\DebugJob.vb" /> <Compile Include="Scheduler\Jobs\DebugJob.vb" />

View File

@ -1,10 +1,10 @@
'------------------------------------------------------------------------------ '------------------------------------------------------------------------------
' <auto-generated> ' <auto-generated>
' This code was generated by a tool. ' Dieser Code wurde von einem Tool generiert.
' Runtime Version:4.0.30319.42000 ' Laufzeitversion:4.0.30319.42000
' '
' Changes to this file may cause incorrect behavior and will be lost if ' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
' the code is regenerated. ' der Code erneut generiert wird.
' </auto-generated> ' </auto-generated>
'------------------------------------------------------------------------------ '------------------------------------------------------------------------------

View File

@ -1,27 +1,28 @@
'------------------------------------------------------------------------------ '------------------------------------------------------------------------------
' <auto-generated> ' <auto-generated>
' This code was generated by a tool. ' Dieser Code wurde von einem Tool generiert.
' Runtime Version:4.0.30319.42000 ' Laufzeitversion:4.0.30319.42000
' '
' Changes to this file may cause incorrect behavior and will be lost if ' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
' the code is regenerated. ' der Code erneut generiert wird.
' </auto-generated> ' </auto-generated>
'------------------------------------------------------------------------------ '------------------------------------------------------------------------------
Option Strict On Option Strict On
Option Explicit On Option Explicit On
Imports System
Namespace My.Resources Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder 'Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
'class via a tool like ResGen or Visual Studio. '-Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
'To add or remove a member, edit your .ResX file then rerun ResGen 'Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
'with the /str option, or rebuild your VS project. 'mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
'''<summary> '''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc. ''' Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
'''</summary> '''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _ <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _ Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
@ -32,7 +33,7 @@ Namespace My.Resources
Private resourceCulture As Global.System.Globalization.CultureInfo Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary> '''<summary>
''' Returns the cached ResourceManager instance used by this class. ''' Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
'''</summary> '''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
@ -46,15 +47,15 @@ Namespace My.Resources
End Property End Property
'''<summary> '''<summary>
''' Overrides the current thread's CurrentUICulture property for all ''' Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
''' resource lookups using this strongly typed resource class. ''' Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
'''</summary> '''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo Friend Property Culture() As Global.System.Globalization.CultureInfo
Get Get
Return resourceCulture Return resourceCulture
End Get End Get
Set(ByVal value As Global.System.Globalization.CultureInfo) Set
resourceCulture = value resourceCulture = value
End Set End Set
End Property End Property

View File

@ -1,10 +1,10 @@
'------------------------------------------------------------------------------ '------------------------------------------------------------------------------
' <auto-generated> ' <auto-generated>
' This code was generated by a tool. ' Dieser Code wurde von einem Tool generiert.
' Runtime Version:4.0.30319.42000 ' Laufzeitversion:4.0.30319.42000
' '
' Changes to this file may cause incorrect behavior and will be lost if ' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
' the code is regenerated. ' der Code erneut generiert wird.
' </auto-generated> ' </auto-generated>
'------------------------------------------------------------------------------ '------------------------------------------------------------------------------
@ -15,21 +15,21 @@ Option Explicit On
Namespace My Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0"), _ Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "My.Settings Auto-Save Functionality" #Region "Automatische My.Settings-Speicherfunktion"
#If _MyType = "WindowsForms" Then #If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then If My.Application.SaveMySettingsOnExit Then
My.Settings.Save() My.Settings.Save()
End If End If

View File

@ -12,27 +12,27 @@ Namespace Scheduler
Private ReadOnly Logger As Logger Private ReadOnly Logger As Logger
Private ReadOnly LogConfig As LogConfig 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() MyBase.New()
LogConfig = pLogConfig LogConfig = pLogConfig
Logger = pLogConfig.GetLogger() Logger = pLogConfig.GetLogger()
History = pJobHistory 'History = pJobHistory
End Sub End Sub
Public Overrides Function JobWasExecuted(context As IJobExecutionContext, jobException As JobExecutionException, Optional cancellationToken As Threading.CancellationToken = Nothing) As Task 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 jobException Is Nothing Then
If TypeOf context.Result Is JobResult Then If TypeOf context.Result Is StatusItem Then
Dim oResult As JobResult = context.Result Dim oResult As StatusItem = context.Result
History.AddSuccess(context.JobDetail.Key.Name, oResult.Description, oResult.Steps) Logger.Info("Job [{0}] was executed in [{1}]!", oResult.Name, oResult.ExecutionTime)
Else 'History.AddSuccess(context.JobDetail.Key.Name, oResult.Description, oResult.Steps)
History.AddSuccess(context.JobDetail.Key.Name, "Job Successful!", New List(Of HistoryItem.HistoryStep))
End If End If
Else 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 End If
Return MyBase.JobWasExecuted(context, jobException, cancellationToken) Return MyBase.JobWasExecuted(context, jobException, cancellationToken)

View File

@ -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

View File

@ -51,7 +51,7 @@ Namespace Scheduler
' initialize the scheduler ' initialize the scheduler
Scheduler = Await Factory.GetScheduler() Scheduler = Await Factory.GetScheduler()
Scheduler.ListenerManager.AddJobListener(New JobListener(LogConfig, State.JobHistory)) Scheduler.ListenerManager.AddJobListener(New JobListener(LogConfig))
' start the scheduler ' start the scheduler
Await Scheduler.Start() Await Scheduler.Start()

View File

@ -19,6 +19,7 @@ Public Class JobStatus
If oStatus IsNot Nothing Then If oStatus IsNot Nothing Then
oStatus.Name = pJob.JobDetail.Key.Name oStatus.Name = pJob.JobDetail.Key.Name
oStatus.StartTime = Date.Now oStatus.StartTime = Date.Now
oStatus.UpdateTime = Date.Now
oStatus.Executing = True oStatus.Executing = True
End If End If
End Sub End Sub
@ -32,28 +33,56 @@ Public Class JobStatus
oStatus.ProgressTotal = pTotal oStatus.ProgressTotal = pTotal
oStatus.ProgressCurrent = pCurrent oStatus.ProgressCurrent = pCurrent
oStatus.ExecutionTime = pJob.JobRunTime oStatus.ExecutionTime = pJob.JobRunTime
oStatus.UpdateTime = Date.Now
End If End If
End Sub 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) 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 If oStatus IsNot Nothing Then
oStatus.ProgressCurrent = oStatus.ProgressTotal oStatus.ProgressCurrent = oStatus.ProgressTotal
oStatus.ExecutionTime = pJob.JobRunTime oStatus.ExecutionTime = pJob.JobRunTime
oStatus.Executing = False oStatus.Executing = False
oStatus.CompleteTime = Date.Now oStatus.CompleteTime = Date.Now
oStatus.FailureMessage = pMessage
oStatus.Successful = False
oStatus.Steps = pSteps
End If 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 Private Function GetJobStatus(pJob As Quartz.IJobExecutionContext) As StatusItem
Dim oJobId = GetJobId(pJob) 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 If Not oExists Then
Entries.Add(New StatusItem With {.Id = oJobId}) Entries.Add(New StatusItem(oJobId))
End If End If
Return Entries.Where(Function(e) e.Id = oJobId).SingleOrDefault() Return Entries.Where(Function(e) e.Id = oJobId).SingleOrDefault()

View File

@ -16,7 +16,7 @@ Namespace Scheduler.Jobs
Friend ExecutionId As String Friend ExecutionId As String
Friend Name 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 Private ctx As IJobExecutionContext
@ -34,8 +34,10 @@ Namespace Scheduler.Jobs
ExecutionId = Guid.NewGuid.ToString() ExecutionId = Guid.NewGuid.ToString()
Id = Integer.Parse(oArgs.Item("Id")) Id = Integer.Parse(oArgs.Item("Id"))
Name = oArgs.Item("Name") Name = oArgs.Item("Name")
State.JobStatus.Start(ctx) State.JobStatus.Start(ctx)
Logger.Info("Job [{0}] is starting!", Id)
Return oJobData.Item(Constants.Scheduler.JOB_CONFIG_ARGUMENTS) Return oJobData.Item(Constants.Scheduler.JOB_CONFIG_ARGUMENTS)
End Function End Function
@ -43,43 +45,47 @@ Namespace Scheduler.Jobs
State.JobStatus.Update(ctx, pCurrentValue, pTotalValue) State.JobStatus.Update(ctx, pCurrentValue, pTotalValue)
End Sub End Sub
Public Sub LogStep(pLevel As HistoryItem.StepLevel, pMessage As String, ParamArray pArgs As String()) Public Sub LogDebug(pMessage As String, ParamArray pArgs As String())
ResultItems.Add(New HistoryItem.HistoryStep With { Logger.Debug(pMessage, pArgs)
JobSteps.Add(New StatusItem.HistoryStep With {
.Message = String.Format(pMessage, pArgs), .Message = String.Format(pMessage, pArgs),
.Level = pLevel .Level = StatusItem.STEP_DEBUG
}) })
End Sub End Sub
Public Function CompleteJob() As Task(Of Boolean) Public Sub LogInfo(pMessage As String, ParamArray pArgs As String())
ctx.Result = New JobResult With { Logger.Info(pMessage, pArgs)
.Successful = True, JobSteps.Add(New StatusItem.HistoryStep With {
.Steps = ResultItems, .Message = String.Format(pMessage, pArgs),
.Description = "Job completed." .Level = StatusItem.STEP_INFO
} })
State.JobStatus.Complete(ctx) 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) Return Task.FromResult(True)
End Function 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) Return Task.FromResult(False)
End Function End Function
End Class End Class

View File

@ -8,18 +8,17 @@ Namespace Scheduler.Jobs
Private Function IJob_Execute(context As IJobExecutionContext) As Task Implements IJob.Execute Private Function IJob_Execute(context As IJobExecutionContext) As Task Implements IJob.Execute
Dim oArgs = MyBase.InitializeJob(context) Dim oArgs = MyBase.InitializeJob(context)
Dim oRandom = New Random()
Logger.Info("I'm a debug Job!") Dim oTotal As Integer = oRandom.Next(5, 15)
Logger.Info("Name: [{0}]", Name) 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 { Threading.Thread.Sleep(1000)
.Description = $"I'm a debug job and my result was [{Guid.NewGuid}]." Next
}
context.Result = oResult Return CompleteJob("Finished, not waiting anymore!")
CompleteJob("Done!")
Return Task.FromResult(True)
End Function End Function
End Class End Class
End Namespace End Namespace

View File

@ -6,47 +6,6 @@ Imports ECM.JobRunner.Common
Namespace Scheduler.Jobs 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 Public Class FileImportJob
Inherits BaseJob Inherits BaseJob
Implements IJob Implements IJob
@ -69,7 +28,7 @@ Namespace Scheduler.Jobs
Dim oObjectType = State.ObjectTypes.Where(Function(o) o.Name = oProfile.ObjectTypeName).SingleOrDefault() Dim oObjectType = State.ObjectTypes.Where(Function(o) o.Name = oProfile.ObjectTypeName).SingleOrDefault()
If IO.Directory.Exists(oProfile.SourceFolder) = False Then 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) Return Task.FromResult(False)
End If End If
@ -84,8 +43,7 @@ Namespace Scheduler.Jobs
Return CompleteJob("No files for profile") Return CompleteJob("No files for profile")
End If End If
Logger.Info("[{0}] files found in source directory [{1}]", oFileNames.Count, oProfile.SourceFolder) LogInfo("{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)
' - [ ] Process Rules, build list of files and indexes ' - [ ] Process Rules, build list of files and indexes
' - [x] Process Regex to filter out files ' - [x] Process Regex to filter out files
@ -110,15 +68,13 @@ Namespace Scheduler.Jobs
' Check time to filter out files ' Check time to filter out files
Dim oDateFilteredFiles = oFilteredFiles.Where(Function(f) FileIsOlderThan(f, pMinutes:=1)).ToList() Dim oDateFilteredFiles = oFilteredFiles.Where(Function(f) FileIsOlderThan(f, pMinutes:=1)).ToList()
Dim oDateFilteredCount = oFilteredFiles.Except(oDateFilteredFiles).Count() Dim oDateFilteredCount = oFilteredFiles.Except(oDateFilteredFiles).Count()
Logger.Debug("[{0}] Files filtered out for being too new.", oDateFilteredCount) LogDebug("{0} Files filtered out for being too new.", oDateFilteredCount)
LogStep(HistoryItem.StepLevel.Debug, "{0} Files filtered out for being too new.", oDateFilteredCount)
oFilteredFiles = oDateFilteredFiles oFilteredFiles = oDateFilteredFiles
' Process Regex to filter out files ' Process Regex to filter out files
Dim oRegexFilteredFiles = oFilteredFiles.Where(Function(f) Not FileMatchesRegex(f, oRegexList)) Dim oRegexFilteredFiles = oFilteredFiles.Where(Function(f) Not FileMatchesRegex(f, oRegexList))
Dim oRegexFilteredCount = oFilteredFiles.Except(oRegexFilteredFiles).Count() Dim oRegexFilteredCount = oFilteredFiles.Except(oRegexFilteredFiles).Count()
Logger.Debug("[{0}] Files filtered out for matching exclusion Regex.", oRegexFilteredCount) LogDebug("{0} Files filtered out for matching exclusion Regex.", oRegexFilteredCount)
LogStep(HistoryItem.StepLevel.Debug, "{0} Files filtered out for matching exclusion Regex.", oRegexFilteredCount)
oFilteredFiles = oDateFilteredFiles oFilteredFiles = oDateFilteredFiles
'------------------------------------------------------------------------------------------------- '-------------------------------------------------------------------------------------------------
@ -143,8 +99,7 @@ Namespace Scheduler.Jobs
oImportedFiles.Add(oFile) oImportedFiles.Add(oFile)
Next Next
Logger.Info("[{0}] files successfully Imported!", oImportedFiles.Count) LogInfo("{0} files successfully Imported!", oImportedFiles.Count)
LogStep(HistoryItem.StepLevel.Info, "{0} files successfully Imported!", oImportedFiles.Count)
Dim oIndexedFiles As New List(Of ImportFile) Dim oIndexedFiles As New List(Of ImportFile)
For Each oFile In oImportedFiles For Each oFile In oImportedFiles
@ -156,8 +111,7 @@ Namespace Scheduler.Jobs
Logger.Info("Indexing of file [{0}] done!", oFile.FilePathWindream) Logger.Info("Indexing of file [{0}] done!", oFile.FilePathWindream)
Next Next
Logger.Info("[{0}] files successfully Indexed!", oIndexedFiles.Count) LogInfo("{0} files successfully Indexed!", oIndexedFiles.Count)
LogStep(HistoryItem.StepLevel.Info, "{0} files successfully Indexed!", oIndexedFiles.Count)
If oProfile.DeleteFiles = True Then If oProfile.DeleteFiles = True Then
Logger.Debug("Deleting [{0}] files before finishing job.", oFiles.Count) Logger.Debug("Deleting [{0}] files before finishing job.", oFiles.Count)
@ -175,10 +129,9 @@ Namespace Scheduler.Jobs
Return CompleteJob($"{oImportedFiles.Count} files successfully Processed!") Return CompleteJob($"{oImportedFiles.Count} files successfully Processed!")
Catch ex As Exception Catch ex As Exception
Logger.Error(ex) Logger.Error(ex)
LogError("Unexpected Error: [{0}]", ex.Message)
LogStep(HistoryItem.StepLevel.Error, "Unexpected Error: [{0}]", ex.Message) Return CompleteJobWithError(ex)
Return CompleteJob(ex)
End Try End Try
End Function End Function
@ -287,8 +240,7 @@ Namespace Scheduler.Jobs
oValue = oValue.Substring(oStartIndex, oLength) oValue = oValue.Substring(oStartIndex, oLength)
Catch ex As Exception Catch ex As Exception
Dim oMessage = "Method SUBSTRING could not be applied to Index '{0}' and Parameters StartIndex [{1}], Length [{2}]. Error: '{3}'" 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) LogError(oMessage, oStep.IndexName, ex.Message, oStep.Argument1, oStep.Argument2)
Logger.Error(ex)
End Try End Try
Case Common.Constants.METHOD_SPLIT Case Common.Constants.METHOD_SPLIT
@ -306,8 +258,7 @@ Namespace Scheduler.Jobs
Dim oSplit = oValue.Split(oSeparator) Dim oSplit = oValue.Split(oSeparator)
oValue = oSplit(oIndex) oValue = oSplit(oIndex)
Catch ex As Exception Catch ex As Exception
LogStep(HistoryItem.StepLevel.Error, "Method SPLIT could not be applied to Index '{0}'. Error: '{1}'", oStep.IndexName, ex.Message) LogError("Method SPLIT could not be applied to Index '{0}'. Error: '{1}'", oStep.IndexName, ex.Message)
Logger.Error(ex)
End Try End Try
Case Common.Constants.METHOD_REGEX Case Common.Constants.METHOD_REGEX
@ -321,8 +272,7 @@ Namespace Scheduler.Jobs
oValue = oFalseValue oValue = oFalseValue
End If End If
Catch ex As Exception Catch ex As Exception
LogStep(HistoryItem.StepLevel.Error, "Method REGEX could not be applied to Index '{0}'. Error: '{1}'", oStep.IndexName, ex.Message) LogError("Method REGEX could not be applied to Index '{0}'. Error: '{1}'", oStep.IndexName, ex.Message)
Logger.Error(ex)
End Try End Try
Case Common.Constants.METHOD_VALUE Case Common.Constants.METHOD_VALUE

View File

@ -11,14 +11,7 @@ Namespace Scheduler.Jobs
Logger.Info("Running File Index [{0}]", Name) Logger.Info("Running File Index [{0}]", Name)
Dim oResult = New JobResult() With { Return CompleteJob("Done!")
.Description = $"File Index Job [{Name}] completed!"
}
context.Result = oResult
CompleteJob("Done!")
Return Task.FromResult(True)
End Function End Function
End Class End Class
End Namespace End Namespace

View File

@ -63,8 +63,19 @@ Public Class Service
' start the service ' start the service
Dim oAddresses() As Uri = {Binding.GetAddress(Config.Host, Config.Port, Config.Name)} Dim oAddresses() As Uri = {Binding.GetAddress(Config.Host, Config.Port, Config.Name)}
Logger.Info("Starting WCF Endpoint at [{0}]", oAddresses.First.ToString)
ServiceHost = New WCF.ServiceHost(Of WCF.JobRunner)(oAddresses) ServiceHost = New WCF.ServiceHost(Of WCF.JobRunner)(oAddresses)
ServiceHost.EnableMetadataExchange(True) ServiceHost.EnableMetadataExchange(True)
Logger.Debug("Listing Endpoints:")
For Each oEndpoint In ServiceHost.Description.Endpoints
Logger.Debug("Name: {0}", oEndpoint.Name)
Logger.Debug("Address: {0}", oEndpoint.Address.ToString)
Logger.Debug("Listen Uri: {0}", oEndpoint.ListenUri.AbsoluteUri)
Logger.Debug("Binding: {0}", oEndpoint.Binding.Name)
Logger.Debug("Contract: {0}", oEndpoint.Contract.Name)
Next
ServiceHost.Open() ServiceHost.Open()
Logger.Info("WCF Endpoint started!") Logger.Info("WCF Endpoint started!")

View File

@ -18,7 +18,6 @@ Public Class GetJobStatus
Public Function Run() As GetJobStatusResponse Public Function Run() As GetJobStatusResponse
Return New GetJobStatusResponse With { Return New GetJobStatusResponse With {
.HistoryItems = State.JobHistory.Entries,
.StatusItems = State.JobStatus.Entries .StatusItems = State.JobStatus.Entries
} }
End Function End Function
@ -28,9 +27,6 @@ Public Class GetJobStatus
Public Class GetJobStatusResponse Public Class GetJobStatusResponse
Inherits Base.BaseResponse Inherits Base.BaseResponse
<DataMember>
Public Property HistoryItems As List(Of HistoryItem)
<DataMember> <DataMember>
Public Property StatusItems As List(Of StatusItem) Public Property StatusItems As List(Of StatusItem)
End Class End Class

View File

@ -16,7 +16,7 @@ Namespace WCF
End Sub End Sub
Public Sub EnableMetadataExchange(ByVal Optional EnableHttpGet As Boolean = True) Public Sub EnableMetadataExchange(Optional EnableHttpGet As Boolean = True)
If State = CommunicationState.Opened Then If State = CommunicationState.Opened Then
Throw New InvalidOperationException("Host is already opened") Throw New InvalidOperationException("Host is already opened")
End If End If