Merge branch 'develop' of https://gitlab.steamware.net/egalware/mapo-mono into develop
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<Platforms>AnyCPU;x86;x64</Platforms>
|
||||
<Version>1.2.2210.2318</Version>
|
||||
<Version>1.2.2210.2410</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>MAPO-MONO</i>
|
||||
<h4>Version: 1.2.2210.2318</h4>
|
||||
<h4>Version: 1.2.2210.2410</h4>
|
||||
<br /> Release Note:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
1.2.2210.2318
|
||||
1.2.2210.2410
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>1.2.2210.2318</version>
|
||||
<version>1.2.2210.2410</version>
|
||||
<url>http://nexus.steamware.net/repository/SWS/MP.MONO.ANALYZER/stable/LAST/MP.Mon.zip</url>
|
||||
<changelog>http://nexus.steamware.net/repository/SWS/MP.MONO.ANALYZER/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
@@ -46,6 +46,7 @@ namespace MP.MONO.Core
|
||||
public static readonly string ALARM_BLINK_CURR_KEY = $"{BASE_HASH}:Current:AlarmsBlink";
|
||||
public static readonly string ALARM_CURR_KEY = $"{BASE_HASH}:Current:Alarms";
|
||||
public static readonly string ALARM_RECEIV_KEY = $"{BASE_HASH}:Current:AlarmsReceived";
|
||||
public static readonly string ALARM_PEND_KEY = $"{BASE_HASH}:Current:AlarmsPendingClose";
|
||||
public static readonly string EVENT_LOG_CURR_KEY = $"{BASE_HASH}:Current:EventsLog";
|
||||
public static readonly string MACH_STATS_CURR_KEY = $"{BASE_HASH}:Current:MachStats";
|
||||
public static readonly string MAINT_STATS_CURR_KEY = $"{BASE_HASH}:Current:Maintenance";
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using MP.MONO.Core;
|
||||
using MP.MONO.Data;
|
||||
using MP.MONO.Data.Controllers;
|
||||
using Newtonsoft.Json;
|
||||
using NLog;
|
||||
using StackExchange.Redis;
|
||||
@@ -8,19 +10,6 @@ namespace MP.MONO.DECODER
|
||||
{
|
||||
public class AlarmsBlinkManager
|
||||
{
|
||||
#region Protected Fields
|
||||
|
||||
protected static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
#endregion Protected Fields
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private static ConnectionMultiplexer? redisConn = null;
|
||||
private static IDatabase? redisDb = null;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Public Constructors
|
||||
|
||||
public AlarmsBlinkManager()
|
||||
@@ -34,6 +23,22 @@ namespace MP.MONO.DECODER
|
||||
|
||||
redisConn = ConnectionMultiplexer.Connect(config.GetConnectionString("Redis"));
|
||||
redisDb = redisConn.GetDatabase();
|
||||
Log.Info("ABM: Redis OK!");
|
||||
|
||||
// altri parametri per check vari
|
||||
string connStringDB = DbConfig.CONNECTION_STRING;
|
||||
if (string.IsNullOrEmpty(connStringDB))
|
||||
{
|
||||
Log.Error("ABM: ConnString empty!");
|
||||
}
|
||||
else
|
||||
{
|
||||
dbController = new MpDbController();
|
||||
Log.Info("ABM: DbController OK");
|
||||
Console.WriteLine("ABM: DbController OK");
|
||||
}
|
||||
|
||||
setupAlarmState();
|
||||
|
||||
Log.Info("AlarmsBlinkManager OK");
|
||||
Console.WriteLine("AlarmsBlinkManager OK");
|
||||
@@ -41,6 +46,112 @@ namespace MP.MONO.DECODER
|
||||
|
||||
#endregion Public Constructors
|
||||
|
||||
#region Public Properties
|
||||
|
||||
/// <summary>
|
||||
/// Elenco allarmi attivi e acknowled ad es: subito i nuovi, con ritardo i cessati
|
||||
/// </summary>
|
||||
public static List<string> alarmsActAck
|
||||
{
|
||||
get
|
||||
{
|
||||
List<string> answ = new List<string>();
|
||||
if (useRedis)
|
||||
{
|
||||
answ = getAlarms("Current");
|
||||
}
|
||||
else
|
||||
{
|
||||
answ = _alarmsActAck;
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (useRedis)
|
||||
{
|
||||
setAlarms("Current", value);
|
||||
}
|
||||
else
|
||||
{
|
||||
_alarmsActAck = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Elenco ultimo set allarmi ricevuti
|
||||
/// </summary>
|
||||
public static List<string> alarmsLastRec
|
||||
{
|
||||
get
|
||||
{
|
||||
List<string> answ = new List<string>();
|
||||
if (useRedis)
|
||||
{
|
||||
answ = getAlarms("LastReceived");
|
||||
}
|
||||
else
|
||||
{
|
||||
answ = _alarmsLastRec;
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (useRedis)
|
||||
{
|
||||
setAlarms("LastReceived", value);
|
||||
}
|
||||
else
|
||||
{
|
||||
_alarmsLastRec = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ultima Stringa LOG allarmi salvata
|
||||
/// </summary>
|
||||
public static string alarmsLogSaved
|
||||
{
|
||||
get => _alarmsLogSaved;
|
||||
set => _alarmsLogSaved = value;
|
||||
}
|
||||
|
||||
public static List<string> alarmsPendingClose
|
||||
{
|
||||
get
|
||||
{
|
||||
// rileggo da REDIS SE ci sono allarmi che sono pending close... in un area che dura poco (2 sec)
|
||||
List<string> lista = new List<string>();
|
||||
// in base al tipo leggo una chiave redis o l'altra...
|
||||
if (redisDb != null)
|
||||
{
|
||||
string rawData = redisDb.StringGet(Constants.ALARM_PEND_KEY);
|
||||
if (!string.IsNullOrEmpty(rawData))
|
||||
{
|
||||
var desList = JsonConvert.DeserializeObject<List<string>>(rawData);
|
||||
if (desList != null)
|
||||
{
|
||||
lista = desList;
|
||||
}
|
||||
}
|
||||
}
|
||||
return lista;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (redisDb != null)
|
||||
{
|
||||
string rawData = JsonConvert.SerializeObject(value);
|
||||
redisDb.StringSet(Constants.ALARM_PEND_KEY, rawData, TimeSpan.FromMilliseconds(3000));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Public Methods
|
||||
|
||||
/// <summary>
|
||||
@@ -66,15 +177,15 @@ namespace MP.MONO.DECODER
|
||||
.Select(grp => grp.First())
|
||||
.OrderBy(x => x)
|
||||
.ToList();
|
||||
Log.Info($"Ricezione update allarmi | {alarmListReceived.Count} --> {alarmListReceivedOk.Count} distinct");
|
||||
Log.Debug($"Ricezione update allarmi | {alarmListReceived.Count} --> {alarmListReceivedOk.Count} distinct");
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Info($"Ricezione ZERO allarmi | {alarmListReceived.Count}");
|
||||
Log.Debug($"Ricezione ZERO allarmi | {alarmListReceived.Count}");
|
||||
}
|
||||
|
||||
// salvo set allarmi ricevuti...
|
||||
setAlarms("LastReceived", alarmListReceivedOk);
|
||||
alarmsLastRec = alarmListReceivedOk;
|
||||
Log.Debug($"Salvataggio LastReceived | count {alarmListReceivedOk.Count}");
|
||||
|
||||
// elenco allarmi confermati
|
||||
@@ -95,7 +206,7 @@ namespace MP.MONO.DECODER
|
||||
// riordino
|
||||
alarmListCurrent = alarmListCurrent.OrderBy(x => x).ToList();
|
||||
// ...e salvo subito
|
||||
setAlarms("Current", alarmListCurrent);
|
||||
alarmsActAck = alarmListCurrent;
|
||||
|
||||
// loggo controllo
|
||||
Log.Debug($"Esito controllo | {alarmListReceivedOk.Count} ricevuti | {alarmListAdded.Count} aggiunti | {alarmListCeased.Count} cessati");
|
||||
@@ -262,6 +373,43 @@ namespace MP.MONO.DECODER
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Protected Fields
|
||||
|
||||
protected static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
#endregion Protected Fields
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private static ConnectionMultiplexer? redisConn = null;
|
||||
|
||||
private static IDatabase? redisDb = null;
|
||||
|
||||
private static bool useRedis = true;
|
||||
|
||||
private MpDbController dbController = null!;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
/// <summary>
|
||||
/// Elenco allarmi attivi e acknowled ad es: subito i nuovi, con ritardo i cessati
|
||||
/// </summary>
|
||||
private static List<string> _alarmsActAck { get; set; } = new List<string>();
|
||||
|
||||
/// <summary>
|
||||
/// Elenco ultimo set allarmi ricevuti
|
||||
/// </summary>
|
||||
private static List<string> _alarmsLastRec { get; set; } = new List<string>();
|
||||
|
||||
/// <summary>
|
||||
/// Elenco allarmi registrati come LOG (=ultima variazione riconosciuta)
|
||||
/// </summary>
|
||||
private static string _alarmsLogSaved { get; set; } = "";
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Private Methods
|
||||
|
||||
/// <summary>
|
||||
@@ -318,6 +466,18 @@ namespace MP.MONO.DECODER
|
||||
return fatto;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Setup iniziale allarmi
|
||||
/// </summary>
|
||||
private void setupAlarmState()
|
||||
{
|
||||
// setup preliminare allarmi da DB
|
||||
alarmsActAck = dbController.AlarmRecGetActive().Select(x => x.AlarmListNav.FullValue).Distinct().ToList();
|
||||
alarmsLastRec = new List<string>();
|
||||
alarmsPendingClose = new List<string>();
|
||||
Log.Debug($"Setup Stato allarmi | act: {alarmsActAck.Count}");
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<Platforms>AnyCPU;x86;x64</Platforms>
|
||||
<Version>1.2.2210.2318</Version>
|
||||
<Version>1.2.2210.2411</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
+16
-16
@@ -6,29 +6,29 @@
|
||||
throwExceptions="false"
|
||||
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
|
||||
|
||||
<!-- optional, add some variables
|
||||
<!-- optional, add some variables
|
||||
https://github.com/nlog/NLog/wiki/Configuration-file#variables
|
||||
-->
|
||||
<variable name="myvar" value="myvalue" />
|
||||
<variable name="myvar" value="myvalue" />
|
||||
|
||||
<!--
|
||||
<!--
|
||||
See https://github.com/nlog/nlog/wiki/Configuration-file
|
||||
for information on customizing logging rules and outputs.
|
||||
-->
|
||||
<targets>
|
||||
<targets>
|
||||
|
||||
<!--
|
||||
<!--
|
||||
add your targets here
|
||||
See https://github.com/nlog/NLog/wiki/Targets for possible targets.
|
||||
See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
|
||||
-->
|
||||
|
||||
<!--
|
||||
<!--
|
||||
Write events to a file with the date in the filename.
|
||||
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
|
||||
layout="${longdate} ${uppercase:${level}} ${message}" />
|
||||
-->
|
||||
<target xsi:type="File"
|
||||
<target xsi:type="File"
|
||||
name="fileTarget"
|
||||
fileName="${basedir}/logs/${shortdate}.log"
|
||||
layout="${longdate} | ${uppercase:${level}} | ${logger:shortName=false} | ${message}"
|
||||
@@ -38,20 +38,20 @@
|
||||
maxArchiveFiles="90"
|
||||
enableArchiveFileCompression="true"
|
||||
keepFileOpen="false" />
|
||||
<target xsi:type="ColoredConsole"
|
||||
<target xsi:type="ColoredConsole"
|
||||
name="consoleTarget"
|
||||
layout="${longdate} | ${uppercase:${level}} | ${logger:shortName=true}| ${message}" />
|
||||
</targets>
|
||||
</targets>
|
||||
|
||||
<rules>
|
||||
<!-- add your logging rules here -->
|
||||
<rules>
|
||||
<!-- add your logging rules here -->
|
||||
|
||||
<!--
|
||||
<!--
|
||||
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
|
||||
<logger name="*" minlevel="Debug" writeTo="f" />
|
||||
-->
|
||||
<!--<logger name="Microsoft.*" maxlevel="Info" final="true" />-->
|
||||
<logger name="*" minlevel="Info" writeTo="consoleTarget" />
|
||||
<logger name="*" minlevel="Info" writeTo="fileTarget" />
|
||||
</rules>
|
||||
<!--<logger name="Microsoft.*" maxlevel="Info" final="true" />-->
|
||||
<!--<logger name="*" minlevel="Info" writeTo="consoleTarget" />-->
|
||||
<logger name="*" minlevel="Info" writeTo="fileTarget" />
|
||||
</rules>
|
||||
</nlog>
|
||||
+58
-111
@@ -81,7 +81,6 @@ IDatabase? redisDb = redisConn.GetDatabase();
|
||||
AlarmReportingMode alarmMode = AlarmReportingMode.ND;
|
||||
List<BaseAlarmBankConf>? alarmsBankBitConf = new List<BaseAlarmBankConf>();
|
||||
List<BaseAlarmRawConf>? alarmsRListConf = new List<BaseAlarmRawConf>();
|
||||
List<string>? activeAlarmList = new List<string>();
|
||||
List<AlarmListModel>? alarmsRecorded = new List<AlarmListModel>();
|
||||
List<MachineMode>? machineModeConf = new List<MachineMode>();
|
||||
List<MachineStatus>? machineStatusConf = new List<MachineStatus>();
|
||||
@@ -162,77 +161,11 @@ MessagePipe alarmsRecvPipe = new MessagePipe(redisConn, Constants.ALARM_RAW_QUEU
|
||||
DateTime lastExecAlarms = DateTime.Now.AddHours(-1);
|
||||
// registro gestione eventi
|
||||
alarmsRecvPipe.EA_NewMessage += AlarmsValPipe_EA_NewMessage;
|
||||
setupAlarmState();
|
||||
|
||||
/* --------------------------------
|
||||
* Funzioni / metodi accessori
|
||||
* --------------------------------*/
|
||||
|
||||
/// <summary>
|
||||
/// Setup iniziale allarmi
|
||||
/// </summary>
|
||||
void setupAlarmState()
|
||||
{
|
||||
// setup preliminare allarmi da DB
|
||||
var actAlarmsList = dbController.AlarmRecGetActive().Select(x => x.AlarmListNav.FullValue).Distinct().ToList();
|
||||
setAlarms("Current", actAlarmsList);
|
||||
setAlarms("LastReceived", new List<string>());
|
||||
Log.Debug($"Setup Stato allarmi | act: {actAlarmsList.Count}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recupero da redis gli allarmi secondo tipo LastReceived / Sent
|
||||
/// </summary>
|
||||
List<string> getAlarms(string tipo)
|
||||
{
|
||||
// rileggo da REDIS la conf attuale allarmi già attivi da area ALARM_CURR_KEY
|
||||
List<string> lastAlarms = new List<string>();
|
||||
// in base al tipo leggo una chiave redis o l'altra...
|
||||
string rawData = "";
|
||||
if (redisDb != null)
|
||||
{
|
||||
if (tipo == "LastReceived")
|
||||
{
|
||||
rawData = redisDb.StringGet(Constants.ALARM_RECEIV_KEY);
|
||||
}
|
||||
else
|
||||
{
|
||||
rawData = redisDb.StringGet(Constants.ALARM_CURR_KEY);
|
||||
}
|
||||
}
|
||||
// se trovati uso questi...
|
||||
if (!string.IsNullOrEmpty(rawData))
|
||||
{
|
||||
var rawLastAlarms = JsonConvert.DeserializeObject<List<string>>(rawData);
|
||||
lastAlarms = rawLastAlarms != null ? rawLastAlarms : new List<string>();
|
||||
Log.Debug($"Lettura allarmi | tipo: {tipo} | num: {lastAlarms.Count}");
|
||||
}
|
||||
return lastAlarms;
|
||||
}
|
||||
/// <summary>
|
||||
/// Salvo in redis gli allarmi secondo tipo LastReceived / Sent
|
||||
/// </summary>
|
||||
bool setAlarms(string tipo, List<string> listAlarm)
|
||||
{
|
||||
bool fatto = false;
|
||||
string rawData = JsonConvert.SerializeObject(listAlarm);
|
||||
|
||||
if (redisDb != null)
|
||||
{
|
||||
if (tipo == "LastReceived")
|
||||
{
|
||||
fatto = redisDb.StringSet(Constants.ALARM_RECEIV_KEY, rawData);
|
||||
}
|
||||
else
|
||||
{
|
||||
fatto = redisDb.StringSet(Constants.ALARM_CURR_KEY, rawData);
|
||||
}
|
||||
}
|
||||
|
||||
Log.Debug($"Scrittura allarmi | tipo: {tipo} | num: {listAlarm.Count}");
|
||||
return fatto;
|
||||
}
|
||||
|
||||
AlarmListModel? getAlarmModel(string alarmFullCode)
|
||||
{
|
||||
// cerco l'allarme nell'elenco degli allarmi dal DB
|
||||
@@ -266,44 +199,55 @@ AlarmListModel? getAlarmModel(string alarmFullCode)
|
||||
async Task<bool> checkCeasedAlarm(string alarmFullCode)
|
||||
{
|
||||
bool answ = false;
|
||||
Log.Debug($"checkCeasedAlarm 01 | Verifica scadenza allarmi | cod: {alarmFullCode}");
|
||||
|
||||
// attendo periodo pausa...
|
||||
await Task.Delay(BlinkPeriodMSec);
|
||||
|
||||
// cerco allarme da valore REDIS ultimi ricevuti
|
||||
var alarmListRecev = getAlarms("LastReceived");
|
||||
if (alarmListRecev != null)
|
||||
// verifico NON SIA già in elenco check...
|
||||
List<string> listClose = AlarmsBlinkManager.alarmsPendingClose;
|
||||
if (!listClose.Contains(alarmFullCode))
|
||||
{
|
||||
// ...SE mancasse
|
||||
if (!alarmListRecev.Contains(alarmFullCode))
|
||||
Log.Debug($"checkCeasedAlarm 01 | Verifica scadenza allarmi | cod: {alarmFullCode}");
|
||||
listClose.Add(alarmFullCode);
|
||||
AlarmsBlinkManager.alarmsPendingClose = listClose;
|
||||
|
||||
// attendo periodo pausa...
|
||||
await Task.Delay(BlinkPeriodMSec);
|
||||
|
||||
// cerco allarme copiando il set degli ultimi ricevuti
|
||||
List<string> alarmListRecev = AlarmsBlinkManager.alarmsLastRec;
|
||||
if (alarmListRecev != null)
|
||||
{
|
||||
Log.Debug($"checkCeasedAlarm 02 | Allarme ancora mancante | cod: {alarmFullCode}");
|
||||
// recupero allarme...
|
||||
// se non lo trovo
|
||||
var foundAlarm = alarmsRecorded
|
||||
.Where(x => x.FullValue == alarmFullCode)
|
||||
.FirstOrDefault();
|
||||
// --> chiudo
|
||||
if (foundAlarm != null)
|
||||
// ...SE mancasse
|
||||
if (!alarmListRecev.Contains(alarmFullCode))
|
||||
{
|
||||
// salvo sul DB
|
||||
_ = dbController.AlarmRecCloseActive(foundAlarm.AlarmId);
|
||||
Log.Info($"Chiusura allarme | Id: {foundAlarm.AlarmId}");
|
||||
Log.Debug($"checkCeasedAlarm 03 | Chiusura allarme | cod: {alarmFullCode}");
|
||||
Log.Debug($"checkCeasedAlarm 02 | Allarme ancora mancante | cod: {alarmFullCode}");
|
||||
// recupero allarme...
|
||||
// se non lo trovo
|
||||
var foundAlarm = alarmsRecorded
|
||||
.Where(x => x.FullValue == alarmFullCode)
|
||||
.FirstOrDefault();
|
||||
// --> chiudo
|
||||
if (foundAlarm != null)
|
||||
{
|
||||
// salvo sul DB
|
||||
_ = dbController.AlarmRecCloseActive(foundAlarm.AlarmId);
|
||||
Log.Info($"Chiusura allarme | Id: {foundAlarm.AlarmId}");
|
||||
Log.Debug($"checkCeasedAlarm 03 | Chiusura allarme | cod: {alarmFullCode}");
|
||||
}
|
||||
// --> rimuovo da elenco attivi!
|
||||
var alarmListSent = new List<string>(AlarmsBlinkManager.alarmsActAck);
|
||||
int numPre = alarmListSent.Count();
|
||||
alarmListSent.Remove(alarmFullCode);
|
||||
int numPost = alarmListSent.Count();
|
||||
Log.Debug($"checkCeasedAlarm 04 | Salvataggio Sent alarms | num: {numPre} --> {numPost}");
|
||||
// invio attivi...
|
||||
string serAlarms = JsonConvert.SerializeObject(alarmListSent);
|
||||
// invio sulla message pipeline corretta TUTTI gli allarmi serializzati
|
||||
alarmsSendPipe.saveAndSendMessage(Constants.ALARM_CURR_KEY, serAlarms);
|
||||
}
|
||||
// --> rimuovo da elenco attivi!
|
||||
var alarmListSent = getAlarms("Current");
|
||||
int numPre = alarmListSent.Count();
|
||||
alarmListSent.Remove(alarmFullCode);
|
||||
int numPost = alarmListSent.Count();
|
||||
Log.Debug($"checkCeasedAlarm 04 | Salvataggio Sent alarms | num: {numPre} --> {numPost}");
|
||||
// invio attivi...
|
||||
string serAlarms = JsonConvert.SerializeObject(alarmListSent);
|
||||
// invio sulla message pipeline corretta TUTTI gli allarmi serializzati
|
||||
alarmsSendPipe.saveAndSendMessage(Constants.ALARM_CURR_KEY, serAlarms);
|
||||
answ = true;
|
||||
}
|
||||
answ = true;
|
||||
// rimuovo da pending close
|
||||
listClose = new List<string>(AlarmsBlinkManager.alarmsPendingClose);
|
||||
listClose.Remove(alarmFullCode);
|
||||
AlarmsBlinkManager.alarmsPendingClose = listClose;
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
@@ -316,7 +260,7 @@ async Task<bool> checkCloseAllAlarm()
|
||||
bool answ = false;
|
||||
Log.Debug($"Verifica checkCloseAllAlarm");
|
||||
// cerco allarme da valore REDIS ultimi ricevuti
|
||||
var alarmSent = getAlarms("Current");
|
||||
List<string> alarmSent = new List<string>(AlarmsBlinkManager.alarmsActAck);
|
||||
if (alarmSent != null)
|
||||
{
|
||||
bool isZero = alarmSent.Count() == 0;
|
||||
@@ -326,7 +270,7 @@ async Task<bool> checkCloseAllAlarm()
|
||||
// attendo periodo pausa...
|
||||
await Task.Delay(BlinkPeriodMSec * 2);
|
||||
// rileggo stato
|
||||
alarmSent = getAlarms("Current");
|
||||
alarmSent = new List<string>(AlarmsBlinkManager.alarmsActAck);
|
||||
isZero = alarmSent.Count() == 0;
|
||||
// ...SE fossero sempre zero
|
||||
if (isZero)
|
||||
@@ -671,10 +615,8 @@ async void AlarmsValPipe_EA_NewMessage(object? sender, EventArgs e)
|
||||
// decodifico allarmi ricevuti
|
||||
var alarmListRaw = JsonConvert.DeserializeObject<List<string>>(currArgs.newMessage);
|
||||
// allarmi correnti
|
||||
List<string> alarmListCurrent = getAlarms("Current");
|
||||
List<string> alarmListCurrent = AlarmsBlinkManager.alarmsActAck;
|
||||
|
||||
// controllo se ora allarmi zero...
|
||||
bool emptyAlarm = (alarmListCurrent.Count > 0 && alarmListRaw.Count == 0);
|
||||
|
||||
// init classi helper
|
||||
List<string> addedAlarms = new List<string>();
|
||||
@@ -686,8 +628,14 @@ async void AlarmsValPipe_EA_NewMessage(object? sender, EventArgs e)
|
||||
string serAlarms = JsonConvert.SerializeObject(alarmListCurrent);
|
||||
alarmsSendPipe.saveAndSendMessage(Constants.ALARM_CURR_KEY, serAlarms);
|
||||
|
||||
// se cambiato --> preparo record LOG e salvo
|
||||
if (fatto || emptyAlarm)
|
||||
// se cambiato --> ultimo ricevuto != current...
|
||||
string lastLogList = AlarmsBlinkManager.alarmsLogSaved;
|
||||
// calcolo nuova stringa...
|
||||
string newLogString = string.Join(", ", alarmListRaw);
|
||||
bool logChanged = !lastLogList.Equals(newLogString);
|
||||
AlarmsBlinkManager.alarmsLogSaved = newLogString;
|
||||
|
||||
if (logChanged)
|
||||
{
|
||||
// preparo dati x alarmLog
|
||||
AlarmLogModel newAlarmLog = new AlarmLogModel()
|
||||
@@ -701,7 +649,7 @@ async void AlarmsValPipe_EA_NewMessage(object? sender, EventArgs e)
|
||||
};
|
||||
alarmLogList.Add(newAlarmLog);
|
||||
_ = dbController.AlarmLogInsertMany(alarmLogList).Result;
|
||||
Log.Info("Inserito Record AlarmLogModel");
|
||||
Log.Debug("Inserito Record AlarmLogModel");
|
||||
}
|
||||
|
||||
if (addedAlarms.Count > 0)
|
||||
@@ -726,7 +674,7 @@ async void AlarmsValPipe_EA_NewMessage(object? sender, EventArgs e)
|
||||
}
|
||||
// salvo sul DB
|
||||
_ = dbController.AlarmRecInsertMany(alarmRecList).Result;
|
||||
Log.Info($"Inseriti {alarmRecList.Count} Records AlarmRecModel");
|
||||
Log.Debug($"Inseriti {alarmRecList.Count} Records AlarmRecModel");
|
||||
}
|
||||
if (ceasedAlarms.Count > 0)
|
||||
{
|
||||
@@ -742,7 +690,6 @@ async void AlarmsValPipe_EA_NewMessage(object? sender, EventArgs e)
|
||||
// Loggo quanto fatto
|
||||
Log.Debug($"Chiamato controllo differito per {ceasedAlarms.Count} allarmi cessati");
|
||||
}
|
||||
|
||||
#if false
|
||||
|
||||
// effettuo selezione dei SOLI allarmi distinct (in caso di cambio posizione...)
|
||||
@@ -776,7 +723,7 @@ async void AlarmsValPipe_EA_NewMessage(object? sender, EventArgs e)
|
||||
// rileggo da REDIS la conf attuale allarmi già attivi da area ALARM_CURR_KEY
|
||||
|
||||
// FIXME TODO !!! usare una lista thread safe?!?!?
|
||||
List<string> lastAlarms = getAlarms("Current");
|
||||
List<string> lastAlarms = alarmsActAck;
|
||||
List<string> startedAlarms = new List<string>();
|
||||
List<string> ceasedAlarms = new List<string>();
|
||||
string serAlarms = "";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>MAPO-MONO</i>
|
||||
<h4>Version: 1.2.2210.2318</h4>
|
||||
<h4>Version: 1.2.2210.2411</h4>
|
||||
<br /> Release Note:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
1.2.2210.2318
|
||||
1.2.2210.2411
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>1.2.2210.2318</version>
|
||||
<version>1.2.2210.2411</version>
|
||||
<url>http://nexus.steamware.net/repository/SWS/MP.MONO.DECODER/stable/LAST/MP.Mon.zip</url>
|
||||
<changelog>http://nexus.steamware.net/repository/SWS/MP.MONO.DECODER/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<Platforms>AnyCPU;x86;x64</Platforms>
|
||||
<Version>1.2.2210.2318</Version>
|
||||
<Version>1.2.2210.2411</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
+11
-11
@@ -365,40 +365,40 @@ void simAlarms()
|
||||
// aggiungo 1:1 ed invio
|
||||
foreach (var item in NewActiveAlarm)
|
||||
{
|
||||
Thread.Sleep(rand.Next(400, 700));
|
||||
Thread.Sleep(rand.Next(0, 10));
|
||||
currAlarm.Add(item.Key, item.Value);
|
||||
sendActiveAlarm(currAlarm);
|
||||
}
|
||||
|
||||
// CICLO 01: aspetto periodo blink... tra 80 e 110% periodo
|
||||
Thread.Sleep(rand.Next(800 * perRefresh, 1100 * perRefresh));
|
||||
// CICLO 01: aspetto periodo blink... tra 80 e 100% periodo
|
||||
Thread.Sleep(rand.Next(800 * perRefresh, 1000 * perRefresh));
|
||||
// tolgo tutti ed invio
|
||||
currAlarm = new Dictionary<string, DateTime>();
|
||||
sendActiveAlarm(currAlarm);
|
||||
// riaggiungo 1:1 ed invio
|
||||
foreach (var item in NewActiveAlarm)
|
||||
{
|
||||
Thread.Sleep(rand.Next(400, 700));
|
||||
Thread.Sleep(rand.Next(200, 600));
|
||||
currAlarm.Add(item.Key, item.Value);
|
||||
sendActiveAlarm(currAlarm);
|
||||
}
|
||||
Thread.Sleep(rand.Next(800 * perRefresh, 1000 * perRefresh));
|
||||
|
||||
// CICLO 02: aspetto periodo blink... tra 80 e 110% periodo
|
||||
// CICLO 02: aspetto periodo blink...
|
||||
Thread.Sleep(rand.Next(800 * perRefresh, 1000 * perRefresh));
|
||||
// tolgo tutti ed invio
|
||||
currAlarm = new Dictionary<string, DateTime>();
|
||||
sendActiveAlarm(currAlarm);
|
||||
// riaggiungo 1:1 ed invio
|
||||
foreach (var item in NewActiveAlarm)
|
||||
{
|
||||
Thread.Sleep(rand.Next(400, 700));
|
||||
Thread.Sleep(rand.Next(200, 600));
|
||||
currAlarm.Add(item.Key, item.Value);
|
||||
sendActiveAlarm(currAlarm);
|
||||
}
|
||||
|
||||
|
||||
// CICLO 03: aspetto periodo blink...
|
||||
Thread.Sleep(rand.Next(800 * perRefresh, 1000 * perRefresh));
|
||||
|
||||
|
||||
// CICLO 03: aspetto periodo blink... tra 80 e 110% periodo
|
||||
// tolgo tutti ed invio
|
||||
currAlarm = new Dictionary<string, DateTime>();
|
||||
sendActiveAlarm(currAlarm);
|
||||
@@ -421,7 +421,7 @@ void simAlarms()
|
||||
// invio allarmi
|
||||
sendActiveAlarm(NewActiveAlarm);
|
||||
// aspetto poco
|
||||
Thread.Sleep(rand.Next(100, 1000 * sogliaSecAllarmi));
|
||||
Thread.Sleep(rand.Next(1000, 1000 * sogliaSecAllarmi));
|
||||
// svuoto
|
||||
NewActiveAlarm = new Dictionary<string, DateTime>();
|
||||
// invio update
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>MAPO-MONO</i>
|
||||
<h4>Version: 1.2.2210.2318</h4>
|
||||
<h4>Version: 1.2.2210.2411</h4>
|
||||
<br /> Release Note:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
1.2.2210.2318
|
||||
1.2.2210.2411
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>1.2.2210.2318</version>
|
||||
<version>1.2.2210.2411</version>
|
||||
<url>http://nexus.steamware.net/repository/SWS/MP.MONO.SIM/stable/LAST/MP.Mon.zip</url>
|
||||
<changelog>http://nexus.steamware.net/repository/SWS/MP.MONO.SIM/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
Reference in New Issue
Block a user