Abbozzato gestione restart

This commit is contained in:
Samuele E. Locatelli
2019-12-21 15:44:58 +01:00
parent b826bc436d
commit dd5fd203d7
2 changed files with 83 additions and 10 deletions
+1
View File
@@ -6,6 +6,7 @@
<appSettings>
<add key="checkPeriod" value="20" />
<add key="chekMult" value="25"/>
<add key="watchDogMult" value="1000"/>
<!--<add key="targetExe" value="C:\tmp\IOB-WIN\IOB-WIN.exe" />
<add key="ArgsList" value="SIMUL_01,SIMUL_02" />-->
<!--<add key="ArgsList" value="SIMUL_01,SIMUL_02,SIMUL_03,SIMUL_04" />-->
+82 -10
View File
@@ -22,7 +22,14 @@ namespace IOB_MAN
#endregion
protected int countCheck = utils.CRI("chekMult");
/// <summary>
/// Counter per verifica watchdog dei processi da riattivare...
/// </summary>
protected int watchDogMult = utils.CRI("watchDogMult");
/// <summary>
/// Counter per verifica processi (ogni volta ceh va a zero faccio vero check)
/// </summary>
protected int chekMult = utils.CRI("chekMult");
/// <summary>
/// Elenco ARGS (uno per child da avviare)
/// </summary>
@@ -224,18 +231,81 @@ namespace IOB_MAN
}
/// <summary>
/// Effettua tutte le verifiche periodiche...
/// Effettua tutte le verifiche periodiche a timer...
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainTimer_Tick(object sender, EventArgs e)
{
updateProgBar();
countCheck--;
if (countCheck < 0)
chekProcessStatus();
checkWatchdog();
}
/// <summary>
/// Controllo periodico dei processi DA RIATTIVARE
/// </summary>
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<iobAdapt> proc2restart = new List<iobAdapt>();
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();
}
}
/// <summary>
/// Controllo periodico dei processi attivi
/// </summary>
private void chekProcessStatus()
{
chekMult--;
if (chekMult < 0)
{
chekMult = utils.CRI("chekMult");
checkRunningchild();
showUpdate();
}
@@ -255,8 +325,6 @@ namespace IOB_MAN
/// </summary>
private void checkRunningchild()
{
int pid = 0;
List<int> proc2rem = new List<int>();
List<iobAdapt> item2rem = new List<iobAdapt>();
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();