You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

306 lines
10 KiB

#Region "Includes"
Imports System.Xml
Imports System.Data.SqlClient
Imports Common.Settings
#End Region
Public Class Common
Public Const SERVICE_DISPLAY_NAME As String = "EDKB10"
Public Const DLL_DISPLAY_NAME As String = "EDKB10 Library"
Private Const DSN_DECRYPT_PASSWORD As String = "HutterundMueller"
#Region "Members"
Private m_DSN As String
Private m_StartJobInterval As Integer
Private m_WatchJobInterval As Integer
Private m_MaximalStartDuration As Integer
Private m_EventLogName As String
Private m_LogTarget As LogTarget
Private m_MailServer As String
Private m_MailFrom As String
Private m_MailServerAuthMethod As MailServerAuthMethod
Private m_MailServerAuthUser As String
Private m_MailServerAuthPassword As String
Private m_MaxStarterNotifications As Integer
Private m_MaxWatcherNotifications As Integer
Private m_EventLog As EventLog
#End Region
#Region "Constructor"
'Creates a new instance of this object
Public Sub New()
Try
Dim reader As System.IO.StreamReader
Dim s As String
reader = System.IO.File.OpenText(AppDomain.CurrentDomain.BaseDirectory & "bms_conn.cfg")
s = reader.ReadLine
m_DSN = ZpCryptography.DsnCrypto.Decrypt(s, DSN_DECRYPT_PASSWORD)
LoadSettings()
Catch ex As Exception
Throw ex
End Try
End Sub
#End Region
#Region "Private Methods"
'Loads all settings from xml configuration file
Private Sub LoadSettings()
Try
Dim xmlDoc As New XmlDocument
xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory & "bms_settings.xml")
m_MaximalStartDuration = CInt(xmlDoc.SelectSingleNode("/root/config/MaximumStartDuration").InnerText)
m_StartJobInterval = CDbl(xmlDoc.SelectSingleNode("/root/config/StartJobInterval").InnerText) * 1000 * 60
m_WatchJobInterval = CDbl(xmlDoc.SelectSingleNode("/root/config/WatchJobInterval").InnerText) * 1000 * 60
m_EventLogName = xmlDoc.SelectSingleNode("/root/config/EventLogName").InnerText
m_LogTarget = CType(CInt(xmlDoc.SelectSingleNode("/root/config/LogTarget").InnerText), LogTarget)
m_MailServer = xmlDoc.SelectSingleNode("/root/config/MailServer").InnerText
m_MailFrom = xmlDoc.SelectSingleNode("/root/config/MailFrom").InnerText
m_MailServerAuthMethod = CType(xmlDoc.SelectSingleNode("/root/config/MailServerAuth/Method").InnerText, MailServerAuthMethod)
m_MailServerAuthUser = xmlDoc.SelectSingleNode("/root/config/MailServerAuth/UserName").InnerText
m_MailServerAuthPassword = xmlDoc.SelectSingleNode("/root/config/MailServerAuth/Password").InnerText
m_MaxStarterNotifications = CInt(xmlDoc.SelectSingleNode("/root/config/MaxStarterNotifications").InnerText)
m_MaxWatcherNotifications = CInt(xmlDoc.SelectSingleNode("/root/config/MaxWatcherNotifications").InnerText)
m_EventLog = New EventLog(m_EventLogName)
m_EventLog.Source = "Service"
Catch ex As Exception
Throw ex
End Try
End Sub
#End Region
#Region "Public Methods"
'Logs an exception
Public Sub Log(ByVal source As String, ByVal message As String)
Try
Log(source, message, EventLogEntryType.Information)
Catch ex As Exception
Log(SERVICE_DISPLAY_NAME, "Catastrophical error while writing to EventLog " + m_LogTarget.ToString() + Environment.NewLine + ex.Message + Environment.NewLine + ex.StackTrace, EventLogEntryType.Error, LogTarget.SystemEventLog)
End Try
End Sub
'Logs an exception
Public Sub Log(ByVal ex As Exception)
Try
Log(ex.Source, ex.Message, EventLogEntryType.Error)
Catch exNew As Exception
Log(SERVICE_DISPLAY_NAME, "Catastrophical error while writing to EventLog " + m_LogTarget.ToString() + Environment.NewLine + exNew.Message + Environment.NewLine + exNew.StackTrace, EventLogEntryType.Error, LogTarget.SystemEventLog)
End Try
End Sub
'Logs an message to the system eventlog or database event log
Public Sub Log(ByVal source As String, ByVal message As String, ByVal eventLogType As EventLogEntryType)
Try
Log(source, message, eventLogType, m_LogTarget)
'MsgBox(CInt("23s45")) force crash 4 debug
Catch ex As Exception
Log(SERVICE_DISPLAY_NAME, "Catastrophical error while writing to EventLog " + m_LogTarget.ToString() + Environment.NewLine + ex.Message + Environment.NewLine + ex.StackTrace, EventLogEntryType.Error, LogTarget.SystemEventLog)
End Try
End Sub
'Logs an event
Public Sub Log(ByVal source As String, ByVal message As String, ByVal eventLogType As EventLogEntryType, ByVal logTarget As LogTarget)
Try
Select Case logTarget
Case logTarget.SystemEventLog
If Not System.Diagnostics.EventLog.SourceExists(m_EventLogName) Then
System.Diagnostics.EventLog.CreateEventSource(m_EventLogName, m_EventLogName)
End If
'System.Diagnostics.EventLog.WriteEntry(m_EventLogName, message, eventLogType)
EventLog.WriteEntry(m_EventLogName, message, eventLogType)
Case logTarget.Database
Dim sqlCon As New SqlConnection(m_DSN)
Dim sqlCom As New SqlCommand
sqlCon.Open()
sqlCom.CommandType = CommandType.StoredProcedure
sqlCom.Connection = sqlCon
sqlCom.CommandText = "CreateEventLogEntry"
sqlCom.Parameters.Add(New SqlParameter("@TypeId", CInt(eventLogType)))
sqlCom.Parameters.Add(New SqlParameter("@Source", source))
sqlCom.Parameters.Add(New SqlParameter("@Computer", Environment.MachineName))
sqlCom.Parameters.Add(New SqlParameter("@EventDesc", message))
sqlCom.ExecuteNonQuery()
sqlCon.Close()
End Select
Catch ex As Exception
m_EventLog.WriteEntry("EXCEPTION ON Common.Log: " + ex.Message, EventLogEntryType.Error)
'Log(source, "EXCEPTION ON Common.Log: " + ex.Message + Environment.NewLine + Environment.NewLine + message, eventLogType, logTarget.SystemEventLog)
'Log(SERVICE_DISPLAY_NAME, "EXCEPTION ON Common.Log: " + ex.Message + Environment.NewLine + ex.StackTrace, EventLogEntryType.Error, logTarget.SystemEventLog)
End Try
End Sub
'Sends a mail using sql server and cdo object
Public Sub SendMail(ByVal receiver As String, ByVal subject As String, ByVal message As String)
Dim sqlConn As New SqlConnection(m_DSN)
Try
Dim sqlCom As New SqlCommand
Dim da As New SqlDataAdapter
Dim ds As New DataSet
sqlConn.Open()
sqlCom.CommandType = CommandType.StoredProcedure
sqlCom.Connection = sqlConn
sqlCom.CommandText = "SendMailMessage"
sqlCom.Parameters.Add(New SqlParameter("@MailServer", m_MailServer))
sqlCom.Parameters.Add(New SqlParameter("@From", m_MailFrom))
sqlCom.Parameters.Add(New SqlParameter("@AuthMethod", m_MailServerAuthMethod.ToString()))
sqlCom.Parameters.Add(New SqlParameter("@Username", m_MailServerAuthUser))
sqlCom.Parameters.Add(New SqlParameter("@Password", m_MailServerAuthPassword))
sqlCom.Parameters.Add(New SqlParameter("@To", receiver))
sqlCom.Parameters.Add(New SqlParameter("@Subject", subject))
sqlCom.Parameters.Add(New SqlParameter("@Body", message))
da.SelectCommand = sqlCom
da.Fill(ds)
sqlConn.Close()
If ds.Tables.Count > 0 Then
If ds.Tables(0).Rows.Count > 0 Then
Throw New Exception("Mail konnte nicht versendet werden. " + ds.Tables(0).Rows(0)(0).ToString() + " " + ds.Tables(0).Rows(0)(1).ToString() + " " + ds.Tables(0).Rows(0)(2).ToString())
End If
End If
Catch ex As Exception
If sqlConn.State = ConnectionState.Open Then
sqlConn.Close()
End If
Throw ex
End Try
End Sub
#End Region
#Region "Properties"
Public ReadOnly Property StartJobInterval() As Integer
Get
Return m_StartJobInterval
End Get
End Property
Public ReadOnly Property WatchJobInterval() As Integer
Get
Return m_WatchJobInterval
End Get
End Property
Public ReadOnly Property MaximalStartDuration() As Integer
Get
Return m_MaximalStartDuration
End Get
End Property
Public ReadOnly Property DSN() As String
Get
Return m_DSN
End Get
End Property
Public ReadOnly Property EventLogName() As String
Get
Return m_EventLogName
End Get
End Property
Public ReadOnly Property MailServer() As String
Get
Return m_EventLogName
End Get
End Property
Public ReadOnly Property MailFrom() As String
Get
Return m_EventLogName
End Get
End Property
Public ReadOnly Property MaxStarterNotifications() As String
Get
Return m_MaxStarterNotifications
End Get
End Property
Public ReadOnly Property MaxWatcherNotifications() As String
Get
Return m_MaxWatcherNotifications
End Get
End Property
#End Region
#Region "Enums"
Enum JournalEntryType
Information = 1
Warning = 2
[Error] = 3
End Enum
Enum JobType
WatchJob = 1
StartJob = 2
End Enum
Enum JobStartType
Executable = 1
WindowsService = 2
SqlQuery = 3
End Enum
Enum StartParameterType
Username = 1
Password = 2
ServerName = 3
FilePath = 4
ServiceName = 5
ConnectionString = 6
SQLQuery = 7
End Enum
Enum LastRun
Start = 1
[End] = 2
End Enum
Enum NotificationType
Mail = 1
File = 2
End Enum
Enum LogTarget
SystemEventLog = 1
Database = 2
End Enum
Enum MailServerAuthMethod
cdoAnonymous = 0
cdoBasic = 1
End Enum
#End Region
End Class