311 lines
14 KiB
VB.net
311 lines
14 KiB
VB.net
'Imports System.Collections.ObjectModel
|
|
Imports System.ComponentModel
|
|
Imports System.IO
|
|
Imports DD_WMResulthandler
|
|
Imports DigitalData.Modules.Logging
|
|
Public Class DDWDResultHandler
|
|
#Region "+++++ Variablen +++++"
|
|
Private _windream As DD_WMResulthandler.clsWindream_allgemein
|
|
Private _database As DD_WMResulthandler.clsDatabase
|
|
Private _profil As clsProfil
|
|
|
|
Public Shared threadResultHandler As BackgroundWorker
|
|
Public Shared threadPMRefresh As BackgroundWorker
|
|
|
|
Private Logger As Logger
|
|
Private MyLogger As LogConfig
|
|
|
|
'Private LoggerPMR As Logger
|
|
'Private MyLoggerPMR As LogConfig
|
|
Private PMRefresh As clsPMRefresh
|
|
|
|
Public Shared _PROFIL_ID As Integer
|
|
Dim _INTERVALL As Integer
|
|
Dim oFirstRun As Boolean = False
|
|
'Variablen für Dateiimporter
|
|
|
|
#End Region
|
|
Public Sub New()
|
|
MyBase.New()
|
|
InitializeComponent()
|
|
End Sub
|
|
Protected Overrides Sub OnStart(ByVal args() As String)
|
|
' Code zum Starten des Dienstes hier einfügen. Diese Methode sollte Vorgänge
|
|
' ausführen, damit der Dienst gestartet werden kann.
|
|
'EventLog1.WriteEntry("Dienst 'DD windream Result Handler' gestartet")
|
|
Try
|
|
Try
|
|
MyLogger = New LogConfig(LogConfig.PathType.CustomPath, Path.Combine(My.Application.Info.DirectoryPath, "Log"))
|
|
Logger = MyLogger.GetLogger()
|
|
_database = New clsDatabase(MyLogger)
|
|
|
|
Catch ex As Exception
|
|
EventLog.WriteEntry("DDWMResultHandler", "ERROR in CREATING-LOG:" & ex.ToString(), EventLogEntryType.Error)
|
|
End Try
|
|
|
|
|
|
'If _database.Init(My.Settings.SQLSERVER_CS_RH, True) = False Then
|
|
' Logger.Warn("Achtung: Es konnte keine Verbindung zur Datenbank '" & My.Settings.SQLSERVER_CS_RH & "' hergestellt werden!")
|
|
' Else
|
|
|
|
|
|
MyLogger.Debug = clsCURRENT.DEBUG
|
|
|
|
|
|
oFirstRun = True
|
|
' '#Thread für Durchlauf generieren
|
|
DDWDResultHandler.threadResultHandler = New BackgroundWorker()
|
|
DDWDResultHandler.threadResultHandler.WorkerReportsProgress = True
|
|
DDWDResultHandler.threadResultHandler.WorkerSupportsCancellation = True
|
|
AddHandler threadResultHandler.DoWork, AddressOf RUN_RESULTHANDLER
|
|
AddHandler threadResultHandler.RunWorkerCompleted, AddressOf Thread_Completed
|
|
|
|
' '### Den Timer generieren
|
|
Dim Timer_Durchlauf As New System.Timers.Timer()
|
|
'Das Event hinterlegen welches bei "Tick" ausgelöst wird
|
|
AddHandler Timer_Durchlauf.Elapsed, AddressOf Thread_Run
|
|
' Set the Interval
|
|
Timer_Durchlauf.Interval = 60000
|
|
Timer_Durchlauf.Enabled = True
|
|
Logger.Debug("Timer gestartet")
|
|
' Und den Durchlauf das erste Mal starten
|
|
|
|
|
|
|
|
DDWDResultHandler.threadPMRefresh = New BackgroundWorker()
|
|
DDWDResultHandler.threadPMRefresh.WorkerReportsProgress = True
|
|
DDWDResultHandler.threadPMRefresh.WorkerSupportsCancellation = True
|
|
AddHandler threadPMRefresh.DoWork, AddressOf RUNPMRefresh
|
|
AddHandler threadPMRefresh.RunWorkerCompleted, AddressOf ThreadPMRefresh_Completed
|
|
|
|
' '### Den Timer generieren
|
|
Dim TimerPMRefresh As New System.Timers.Timer()
|
|
'Das Event hinterlegen welches bei "Tick" ausgelöst wird
|
|
AddHandler TimerPMRefresh.Elapsed, AddressOf ThreadPMRefreshRun
|
|
|
|
' Set the Interval
|
|
TimerPMRefresh.Interval = 120000 '2 minutes
|
|
'ClassLogger.Add("Timer - Intervall: " & clsSQLITE.konf_intervall & " Minuten", False)
|
|
TimerPMRefresh.Enabled = True
|
|
'End If
|
|
If My.Settings.SQLSERVER_CS_RH = "" And My.Settings.SQLSERVER_CS_PMRefresh <> "" Then
|
|
Logger.Info("Thread PM Refresh will now be started for initial Run as Resulthandler's ConnString is empty...")
|
|
threadPMRefresh.RunWorkerAsync()
|
|
Else
|
|
If My.Settings.SQLSERVER_CS_RH <> "" Then
|
|
Logger.Info("Thread ResultHandler will now be started for initial Run..")
|
|
threadResultHandler.RunWorkerAsync()
|
|
End If
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in OnStart: " & ex.ToString(), EventLogEntryType.Error)
|
|
Logger.Error(ex)
|
|
End Try
|
|
|
|
End Sub
|
|
Public Sub Thread_Run()
|
|
If Not threadResultHandler.IsBusy Then
|
|
threadResultHandler.RunWorkerAsync()
|
|
End If
|
|
End Sub
|
|
Public Sub ThreadPMRefreshRun()
|
|
Logger.Debug("In Tick of ThreadPMRefreshRun")
|
|
If Not threadPMRefresh.IsBusy Then
|
|
threadPMRefresh.RunWorkerAsync()
|
|
Else
|
|
Logger.Warn("threadPMRefresh IsBusy")
|
|
End If
|
|
End Sub
|
|
Protected Overrides Sub OnStop()
|
|
Try
|
|
' Hier Code zum Ausführen erforderlicher Löschvorgänge zum Beenden des Dienstes einfügen.
|
|
Logger.Info("WindreamResultHandler wurde gestoppt!")
|
|
|
|
Catch ex As Exception
|
|
EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in OnStop: " & ex.ToString(), EventLogEntryType.Error)
|
|
End Try
|
|
|
|
End Sub
|
|
Public Sub RUN_RESULTHANDLER(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
|
|
Try
|
|
MyLogger = New LogConfig(LogConfig.PathType.CustomPath, Path.Combine(My.Application.Info.DirectoryPath, "Log"))
|
|
Logger = MyLogger.GetLogger()
|
|
_database = New clsDatabase(MyLogger)
|
|
|
|
If My.Settings.SQLSERVER_CS_RH = "" Then
|
|
Logger.Warn("RESULT HANDLER ConString not configured... No Run")
|
|
Exit Sub
|
|
End If
|
|
|
|
Dim notcompleted As Boolean = False
|
|
'clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "_SERVICEResultHandler")
|
|
Logger.Debug("RUN_THREAD WMResulthandler started..")
|
|
' Windream instanziieren
|
|
_windream = New clsWindream_allgemein(MyLogger)
|
|
'windream initialisieren
|
|
If _windream.Init() = True Then
|
|
clsCURRENT.TEMP_FILES.Clear()
|
|
Logger.Debug("windream vollumfänglich initialisiert!")
|
|
'Zur sicherheit die DB nochmal initialiseren
|
|
If _database.Init(My.Settings.SQLSERVER_CS_RH, True) = True Then
|
|
Dim DT As DataTable = _database.Return_Datatable("select * from TBWMRH_KONFIGURATION where GUID = 1")
|
|
If DT.Rows.Count = 1 Then
|
|
clsCURRENT.DT_TBWMRH_KONFIGURATION = DT
|
|
clsCURRENT.WDLAUFWERK = clsCURRENT.DT_TBWMRH_KONFIGURATION.Rows(0).Item("WD_LAUFWERK")
|
|
DD_WMResulthandler.clsCURRENT.DEBUG = Not (DT.Rows(0).Item("LOG_ERRORS_ONLY"))
|
|
MyLogger.Debug = Not (DT.Rows(0).Item("LOG_ERRORS_ONLY"))
|
|
If DD_WMResulthandler.clsCURRENT.DEBUG = True Then
|
|
Logger.Info("Detaillog is ON!")
|
|
End If
|
|
DD_WMResulthandler.clsCURRENT.WDLAUFWERK = DT.Rows(0).Item("WD_LAUFWERK")
|
|
End If
|
|
DT = _database.Return_Datatable("SELECT GUID FROM TBWMRH_PROFIL WHERE AKTIV = 1 order by REIHENFOLGE")
|
|
If DT.Rows.Count > 0 Then
|
|
Logger.Debug("Anzahl der aktiven Profile: " & DT.Rows.Count.ToString)
|
|
For Each DR As DataRow In DT.Rows
|
|
_PROFIL_ID = CInt(DR.Item("GUID"))
|
|
_profil = New clsProfil(MyLogger, _PROFIL_ID)
|
|
'Und nun das Profil durchlaufen
|
|
Dim initresult = _profil.Init(_PROFIL_ID, False)
|
|
If initresult = True Then
|
|
'##### Profildurchlauf ########
|
|
_profil.Profil_Durchlauf(False)
|
|
For Each oFile As String In clsCURRENT.TEMP_FILES
|
|
If File.Exists(oFile) Then
|
|
Try
|
|
File.Delete(oFile)
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
|
|
End If
|
|
Next
|
|
|
|
ElseIf initresult = False Then
|
|
Logger.Warn("clsProfil konnte nicht initialisiert werden")
|
|
notcompleted = True
|
|
ElseIf initresult = 0 Then
|
|
Logger.Debug("initresult: 0")
|
|
notcompleted = True
|
|
ElseIf initresult = 1 Then
|
|
Logger.Debug("initresult: 1")
|
|
notcompleted = True
|
|
End If
|
|
Next
|
|
Else
|
|
Logger.Info("WMResulthandler - No active profiles")
|
|
notcompleted = True
|
|
End If
|
|
'Try
|
|
' For Each _file In clsCURRENT.TEMP_FILES
|
|
' 'Dim oFile As New FileInfo(_file)
|
|
' 'If (DateTime.UtcNow - oFile.CreationTimeUtc > TimeSpan.FromDays(1)) Then
|
|
' System.IO.File.Delete(_file)
|
|
' 'End If
|
|
' Next
|
|
'Catch ex As Exception
|
|
|
|
'End Try
|
|
|
|
_database.Execute_non_Query("UPDATE TBWMRH_KONFIGURATION SET LAST_TICK = GETDATE() WHERE GUID = 1")
|
|
If oFirstRun = True Then
|
|
oFirstRun = False
|
|
threadPMRefresh.RunWorkerAsync()
|
|
End If
|
|
Else
|
|
Logger.Warn($"clsDatabase konnte nicht initialisiert werden! {My.Settings.SQLSERVER_CS_RH}")
|
|
notcompleted = True
|
|
End If
|
|
Else
|
|
Logger.Warn("# Achtung: Windream-Init mit Fehlern beendet")
|
|
notcompleted = True
|
|
End If
|
|
If notcompleted = True Then
|
|
|
|
End If
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
|
|
End Sub
|
|
Public Sub RUNPMRefresh(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
|
|
Try
|
|
'MyLoggerPMR = New LogConfig(LogConfig.PathType.CustomPath, Path.Combine(My.Application.Info.DirectoryPath, "Log_PMRefresh"))
|
|
'LoggerPMR = MyLoggerPMR.GetLogger()
|
|
PMRefresh = New clsPMRefresh(MyLogger)
|
|
Logger.Debug("PMRefresh.CheckRun....")
|
|
If PMRefresh.CheckRun() = True Then
|
|
Logger.Debug("PMRefresh.CheckRun = True....")
|
|
PMRefresh.Refresh_Data()
|
|
End If
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
#Region "*** BackgroundWorker beenden und Abbrechen ***"
|
|
Private Sub Thread_Completed(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) 'Handles threadDateiimport.RunWorkerCompleted
|
|
' This event fires when the DoWork event completes
|
|
Try
|
|
Dim result As String = ""
|
|
|
|
If e.Cancelled Then
|
|
Logger.Warn("Der Process wurde durch den Anwender abgebrochen")
|
|
|
|
ElseIf e.Error IsNot Nothing Then
|
|
Logger.Warn("Fehler bei Durchlauf. Der Vorgang wird abgebrochen: " & e.Error.Message)
|
|
|
|
End If
|
|
|
|
'If DI_Verzeichnisloeschen Then
|
|
' Try
|
|
' My.Computer.FileSystem.DeleteDirectory(DI_Quellordner, FileIO.DeleteDirectoryOption.ThrowIfDirectoryNonEmpty)
|
|
' Catch ex As Exception
|
|
' ClassLogger.Add("ACHTUNG: Der Vorgang wurde abgeschlossen. Das Quellverzeichnis konnte jedoch nicht gelöscht werden, da sich in dem Ordner noch Dateien/Verzeichnisse befinden.", False)
|
|
' End Try
|
|
'End If
|
|
Catch ex As Exception
|
|
EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in Thread_Completed: " & ex.ToString(), EventLogEntryType.Error)
|
|
End Try
|
|
End Sub
|
|
Private Sub ThreadPMRefresh_Completed(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) 'Handles threadDateiimport.RunWorkerCompleted
|
|
' This event fires when the DoWork event completes
|
|
Try
|
|
Dim result As String = ""
|
|
|
|
If e.Cancelled Then
|
|
Logger.Warn("Der Process PMRefresh wurde durch den Anwender abgebrochen")
|
|
|
|
ElseIf e.Error IsNot Nothing Then
|
|
Logger.Warn("Fehler bei Durchlauf PMRefresh. Der Vorgang wird abgebrochen: " & e.Error.Message)
|
|
|
|
End If
|
|
|
|
'If DI_Verzeichnisloeschen Then
|
|
' Try
|
|
' My.Computer.FileSystem.DeleteDirectory(DI_Quellordner, FileIO.DeleteDirectoryOption.ThrowIfDirectoryNonEmpty)
|
|
' Catch ex As Exception
|
|
' ClassLogger.Add("ACHTUNG: Der Vorgang wurde abgeschlossen. Das Quellverzeichnis konnte jedoch nicht gelöscht werden, da sich in dem Ordner noch Dateien/Verzeichnisse befinden.", False)
|
|
' End Try
|
|
'End If
|
|
Catch ex As Exception
|
|
Logger.Error(ex, "Unexpected error in ThreadPMRefresh_Completed: ")
|
|
|
|
End Try
|
|
End Sub
|
|
Public Function Thread_Abbrechen()
|
|
Try
|
|
If DDWDResultHandler.threadResultHandler.IsBusy Then
|
|
DDWDResultHandler.threadResultHandler.CancelAsync()
|
|
End If
|
|
Return True
|
|
Catch ex As Exception
|
|
EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in Thread_Abbrechen: " & ex.ToString(), EventLogEntryType.Error)
|
|
Logger.Error(ex)
|
|
|
|
Return False
|
|
End Try
|
|
End Function
|
|
#End Region
|
|
End Class
|