From dd5fd203d703d13790b4fcce743da0800848e7bf Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Sat, 21 Dec 2019 15:44:58 +0100 Subject: [PATCH] Abbozzato gestione restart --- IOB-MAN/App.config | 1 + IOB-MAN/IOBManPanel.cs | 92 +++++++++++++++++++++++++++++++++++++----- 2 files changed, 83 insertions(+), 10 deletions(-) diff --git a/IOB-MAN/App.config b/IOB-MAN/App.config index 073dc61f..3dc05dd0 100644 --- a/IOB-MAN/App.config +++ b/IOB-MAN/App.config @@ -6,6 +6,7 @@ + diff --git a/IOB-MAN/IOBManPanel.cs b/IOB-MAN/IOBManPanel.cs index 64532bfc..dc208c10 100644 --- a/IOB-MAN/IOBManPanel.cs +++ b/IOB-MAN/IOBManPanel.cs @@ -22,7 +22,14 @@ namespace IOB_MAN #endregion - protected int countCheck = utils.CRI("chekMult"); + /// + /// Counter per verifica watchdog dei processi da riattivare... + /// + protected int watchDogMult = utils.CRI("watchDogMult"); + /// + /// Counter per verifica processi (ogni volta ceh va a zero faccio vero check) + /// + protected int chekMult = utils.CRI("chekMult"); /// /// Elenco ARGS (uno per child da avviare) /// @@ -224,18 +231,81 @@ namespace IOB_MAN } /// - /// Effettua tutte le verifiche periodiche... + /// Effettua tutte le verifiche periodiche a timer... /// /// /// private void MainTimer_Tick(object sender, EventArgs e) { updateProgBar(); - countCheck--; - if (countCheck < 0) + chekProcessStatus(); + checkWatchdog(); + } + /// + /// Controllo periodico dei processi DA RIATTIVARE + /// + private void checkWatchdog() + { + watchDogMult--; + if (watchDogMult < 0) { - countCheck = utils.CRI("chekMult"); - // se scaduto timer... + watchDogMult = utils.CRI("watchDogMult"); + // verifico se ci siano processi (da ARGS LIST) NON running --> li riavvio! + List proc2restart = new List(); + foreach (iobAdapt item in ElencoIOB.List) + { + if (!item.isRunning) + { + // segno da eliminare e riavviare + proc2restart.Add(item); + } + } + // se ho da riavviare... elimino! + foreach (var item in proc2restart) + { + ElencoIOB.Remove(item); + utils.lgInfo($"Chiusura processo non running | IOB: {item.CodIOB} | pid: {item.pID}"); + } + // aggiorno datagrid! + dgvManagedItems.Invalidate(); + ProcessStartInfo psi = null; + // li faccio ripartire! + foreach (var item in proc2restart) + { + // da testare x aprire chiudere risorsa... + psi = new ProcessStartInfo + { + FileName = TargetExe, + Arguments = item.CodIOB, + WindowStyle = ProcessWindowStyle.Minimized + }; + + //childProc.StartInfo = psi; + Process p = Process.Start(psi); + // accodo nuovo IOB... + iobAdapt newIob = new iobAdapt(); + DateTime adesso = DateTime.Now; + newIob.CodIOB = item.CodIOB; + newIob.startTime = adesso; + newIob.pID = p.Id; + newIob.isRunning = true; + // aggiungo a datasource + ElencoIOB.Add(newIob); + utils.lgInfo($"Riavvio processo | IOB: {newIob.CodIOB} | pid: {newIob.pID}"); + } + // aggiorno datagrid! + dgvManagedItems.Invalidate(); + } + } + /// + /// Controllo periodico dei processi attivi + /// + private void chekProcessStatus() + { + chekMult--; + if (chekMult < 0) + { + chekMult = utils.CRI("chekMult"); checkRunningchild(); showUpdate(); } @@ -255,8 +325,6 @@ namespace IOB_MAN /// private void checkRunningchild() { - int pid = 0; - List proc2rem = new List(); List item2rem = new List(); bool needRem = false; @@ -277,15 +345,19 @@ namespace IOB_MAN } if (needRem) { - proc2rem.Add(item.pID); item2rem.Add(item); + item.isRunning = false; + } + else + { + item.isRunning = true; } } // ora procdedo alla cancellazione... foreach (var item in item2rem) { - ElencoIOB.Remove(item); + //ElencoIOB.Remove(item); } // aggiorno datagrid! dgvManagedItems.Invalidate();