Files
egwmultienginemanager/EgwMultiEngineManager.Tray/Application.xaml.vb
T
Emmanuele Sassi 236c1f5be1 - aggiunto parametro FreeOrWaitingAnswerProcesses
- cambiato formato tempo di esecuzione in statistiche
- gestita risposta SubMode 4 in Rest
2026-01-29 10:25:23 +01:00

220 lines
11 KiB
VB.net

Imports System.Drawing
Imports System.Windows.Forms
Imports System.Windows.Threading
Imports EgwMultiEngineManager.Data
Imports EgwMultiEngineManager.Tray.ExecEnvironmentManager
Class Application
' Application-level events, such as Startup, Exit, and DispatcherUnhandledException
' can be handled in this file.
Private m_MainWindowVM As MainWindowVM
Private m_MainWindowV As MainWindowV
Private m_bIsShuttingDown As Boolean = False
Private m_NotifyIcon As NotifyIcon
Private m_StatisticsTimer As New DispatcherTimer
Protected Overrides Sub OnStartup(e As StartupEventArgs)
MyBase.OnStartup(e)
ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown
' creo Vm e quindi avvio processi
m_MainWindowVM = New MainWindowVM
AddHandler m_MainWindowVM.QuitApplication, AddressOf MainWindowVM_QuitApplication
m_MainWindowVM.Init()
' creo icona di notifica nella tray
m_NotifyIcon = New NotifyIcon
m_NotifyIcon.Visible = True
m_NotifyIcon.Icon = New Icon(Application.GetResourceStream(New Uri("Resources/EgwMultiEngineManager.ico", UriKind.Relative)).Stream)
m_NotifyIcon.Text = "EgwMultiEngineManager"
Dim ContextMenu As New ContextMenu
' Dim OpenBtn As New MenuItem("Open", AddressOf OpenBtn_Click)
Dim RestartBtn As New MenuItem("Restart", AddressOf RestartBtn_Click)
Dim ForceQuitBtn As New MenuItem("Force Quit", AddressOf ForceQuitBtn_Click)
Dim QuitBtn As New MenuItem("Quit", AddressOf QuitBtn_Click)
'ContextMenu.MenuItems.Add(OpenBtn)
ContextMenu.MenuItems.Add(RestartBtn)
ContextMenu.MenuItems.Add(ForceQuitBtn)
ContextMenu.MenuItems.Add(QuitBtn)
m_NotifyIcon.ContextMenu = ContextMenu
AddHandler m_NotifyIcon.Click, AddressOf NotifyIcon_Click
' inizializzo timer statistiche
m_StatisticsTimer.Interval = New TimeSpan(0, 0, 10)
AddHandler m_StatisticsTimer.Tick, AddressOf StatisticsTimer_Tick
StatisticsTimer_Tick()
m_StatisticsTimer.Start()
End Sub
Sub NotifyIcon_Click(sender As Object, e As EventArgs)
'If IsNothing(m_MainWindowV) Then
' m_MainWindowV = New MainWindowV(m_MainWindowVM)
' AddHandler m_MainWindowV.Deactivated, AddressOf MainWindowV_LostFocus
' m_MainWindowV.Show()
' 'Else
' ' m_MainWindowV.DataContext = Nothing
' ' Dim EH_MainWindowV_LostFocus As EventHandler = AddressOf MainWindowV_LostFocus
' ' RemoveHandler m_MainWindowV.Deactivated, EH_MainWindowV_LostFocus
' ' m_MainWindowV.Close()
' ' m_MainWindowV = Nothing
'End If
End Sub
Private Sub MainWindowV_Deactivated(sender As Object, e As EventArgs)
If Not IsNothing(m_MainWindowV) AndAlso Not m_bIsShuttingDown Then
m_MainWindowV.DataContext = Nothing
Dim EH_MainWindowV_LostFocus As EventHandler = AddressOf MainWindowV_Deactivated
RemoveHandler m_MainWindowV.Deactivated, EH_MainWindowV_LostFocus
m_MainWindowV.Close()
m_MainWindowV = Nothing
End If
End Sub
Private Sub MainWindowVM_QuitApplication()
m_bIsShuttingDown = True
Quit()
End Sub
Private Sub OpenBtn_Click(sender As Object, e As EventArgs)
m_MainWindowV = New MainWindowV(m_MainWindowVM)
AddHandler m_MainWindowV.Deactivated, AddressOf MainWindowV_Deactivated
m_MainWindowV.Show()
End Sub
Private Sub RestartBtn_Click(sender As Object, e As EventArgs)
'Process.Start(Application.ResourceAssembly.Location)
Quit()
Threading.Thread.Sleep(1000 * 5)
System.Windows.Forms.Application.Restart()
End Sub
Private Sub ForceQuitBtn_Click()
Quit()
Dim sEngineName As String = "EgtEngine"
' recupero tutti gli EgtEngine attivi
Dim ProcessList As List(Of Process) = Process.GetProcesses.Where(Function(x) x.ProcessName.StartsWith(sEngineName)).ToList()
For Each CurrProcess As Process In ProcessList
CurrProcess.Kill()
Next
End Sub
Private Sub QuitBtn_Click(sender As Object, e As EventArgs)
Quit()
End Sub
Private Sub Quit()
m_MainWindowVM.Quit()
If Not IsNothing(m_NotifyIcon) Then
m_NotifyIcon.Dispose()
m_NotifyIcon = Nothing
End If
Threading.Thread.Sleep(100)
Application.Current.Shutdown()
End Sub
Private Sub StatisticsTimer_Tick()
If True Then
Dim sTooltip As String = "RPTQ15H" & Environment.NewLine
Dim sEnvironment As String = ""
For nGroupType = EnvironmentCommunicationTypes.REDIS To EnvironmentCommunicationTypes.REST
Dim nGroupIndex As Integer = 1
Dim sGroupName As String = If(nGroupType = EnvironmentCommunicationTypes.REST, S_RESTEXECGROUP, S_EXECGROUP) & nGroupIndex.ToString()
While GetMainPrivateProfileString(sGroupName, K_ENVIRONMENT, "", sEnvironment) > 0
Dim CurrStatistics As Statistics = m_MainWindowVM.GetValueFromKeyInStatisticsList(sGroupName)
If Not IsNothing(CurrStatistics) Then
sTooltip &= If(nGroupType = EnvironmentCommunicationTypes.REST, "R", "G") & nGroupIndex.ToString() &
CurrStatistics.nEngineRunningQty &
CurrStatistics.nEngineProcessingQty &
(CurrStatistics.dMidProcessingTime / 1000).ToString("N1") &
CurrStatistics.nQuestionInQueue &
CurrStatistics.nLastMinAnswer &
CurrStatistics.nLast5MinAnswer &
CurrStatistics.nLastHourAnswer & Environment.NewLine
'"MinT " & e.dMinProcessingTime.ToString("N1") & Environment.NewLine &
'"MaxT " & e.nQuestionInQueue.ToString("N1") & Environment.NewLine &
End If
nGroupIndex += 1
sGroupName = If(nGroupType = EnvironmentCommunicationTypes.REST, S_RESTEXECGROUP, S_EXECGROUP) & nGroupIndex.ToString()
End While
Next
sTooltip = sTooltip.Substring(0, Math.Min(60, sTooltip.Length))
m_NotifyIcon.Text = sTooltip
Return
Dim ExecEnvironment As EXECENVIRONMENTS = ExecEnvironmentManager.GetExecEnvironmentFromString(sEnvironment)
If ExecEnvironment <> EXECENVIRONMENTS.NULL Then
Dim CurrStatistics As Statistics = m_MainWindowVM.GetValueFromKeyInStatisticsList(ExecEnvironment)
If Not IsNothing(CurrStatistics) Then
Dim Tooltip As String = "QRun " & CurrStatistics.nEngineRunningQty & Environment.NewLine &
"QProc " & CurrStatistics.nEngineProcessingQty & Environment.NewLine &
"MidT " & CurrStatistics.dMidProcessingTime.ToString("N1") & Environment.NewLine &
"Que " & CurrStatistics.nQuestionInQueue & Environment.NewLine &
"1MAns " & CurrStatistics.nLastMinAnswer & Environment.NewLine &
"5MAns " & CurrStatistics.nLast5MinAnswer & Environment.NewLine &
"HAns " & CurrStatistics.nLastHourAnswer
'"MinT " & e.dMinProcessingTime.ToString("N1") & Environment.NewLine &
'"MaxT " & e.nQuestionInQueue.ToString("N1") & Environment.NewLine &
Tooltip = Tooltip.Substring(0, Math.Min(60, Tooltip.Length))
m_NotifyIcon.Text = Tooltip
End If
End If
ElseIf False Then
Dim sEnvironment As String = ""
GetMainPrivateProfileString(S_EXECGROUP & 1.ToString(), K_ENVIRONMENT, "", sEnvironment)
Dim ExecEnvironment As EXECENVIRONMENTS = ExecEnvironmentManager.GetExecEnvironmentFromString(sEnvironment)
If ExecEnvironment <> EXECENVIRONMENTS.NULL Then
Dim CurrStatistics As Statistics = m_MainWindowVM.GetValueFromKeyInStatisticsList(ExecEnvironment)
If Not IsNothing(CurrStatistics) Then
Dim Tooltip As String = "QRun " & CurrStatistics.nEngineRunningQty & Environment.NewLine &
"QProc " & CurrStatistics.nEngineProcessingQty & Environment.NewLine &
"MidT " & CurrStatistics.dMidProcessingTime.ToString("N1") & Environment.NewLine &
"Que " & CurrStatistics.nQuestionInQueue & Environment.NewLine &
"1MAns " & CurrStatistics.nLastMinAnswer & Environment.NewLine &
"5MAns " & CurrStatistics.nLast5MinAnswer & Environment.NewLine &
"HAns " & CurrStatistics.nLastHourAnswer
'"MinT " & e.dMinProcessingTime.ToString("N1") & Environment.NewLine &
'"MaxT " & e.nQuestionInQueue.ToString("N1") & Environment.NewLine &
Tooltip = Tooltip.Substring(0, Math.Min(60, Tooltip.Length))
m_NotifyIcon.Text = Tooltip
End If
End If
Else
Dim KeyList As List(Of String) = m_MainWindowVM.GetStatisticsListKeyCollection()
Dim StatisticsList As New List(Of Statistics)
Dim sQRun As String = "QRun__"
Dim sQProc As String = "QProc_"
Dim sMidT As String = "MidT__"
Dim sQue As String = "Que___"
Dim s1MAns As String = "1MAns_"
Dim s5MAns As String = "5MAns_"
Dim sHAns As String = "HAns__"
For Each Key In KeyList
Dim KeyStatistics As Statistics = m_MainWindowVM.GetValueFromKeyInStatisticsList(Key)
sQRun &= KeyStatistics.nEngineRunningQty.ToString("00000") & " "
sQProc &= KeyStatistics.nEngineProcessingQty.ToString("00000") & " "
sMidT &= Math.Ceiling(KeyStatistics.dMidProcessingTime).ToString("00000") & " "
sQue &= KeyStatistics.nQuestionInQueue.ToString("00000") & " "
s1MAns &= KeyStatistics.nLastMinAnswer.ToString("00000") & " "
s5MAns &= KeyStatistics.nLast5MinAnswer.ToString("00000") & " "
sHAns &= KeyStatistics.nLastHourAnswer.ToString("00000") & " "
Next
Dim Tooltip As String = sQRun & Environment.NewLine &
sQProc & Environment.NewLine &
sMidT & Environment.NewLine &
sQue & Environment.NewLine &
s1MAns & Environment.NewLine &
s5MAns & Environment.NewLine &
sHAns
'"MinT " & e.dMinProcessingTime.ToString("N1") & Environment.NewLine &
'"MaxT " & e.nQuestionInQueue.ToString("N1") & Environment.NewLine &
'Tooltip = Tooltip.Substring(0, Math.Min(60, Tooltip.Length))
'm_NotifyIcon.Text = Tooltip
m_NotifyIcon.BalloonTipTitle = "EgwMultiEngineManager"
m_NotifyIcon.BalloonTipIcon = ToolTipIcon.Info
m_NotifyIcon.BalloonTipText = Tooltip
m_NotifyIcon.ShowBalloonTip(5000)
End If
End Sub
End Class