Update gestione SIM e DECODER x allarmi (NON ancora OK)
This commit is contained in:
@@ -14,10 +14,10 @@
|
||||
"Alarm 006",
|
||||
"Alarm 007",
|
||||
"Alarm 008",
|
||||
"##Alarm 009",
|
||||
"##Alarm 010",
|
||||
"##Alarm 011",
|
||||
"##Alarm 012",
|
||||
"Alarm 009",
|
||||
"Alarm 010",
|
||||
"Alarm 011",
|
||||
"Alarm 012",
|
||||
"##Alarm 013",
|
||||
"##Alarm 014",
|
||||
"##Alarm 015",
|
||||
@@ -37,12 +37,12 @@
|
||||
"Warning 004",
|
||||
"Warning 005",
|
||||
"Warning 006",
|
||||
"##Warning 007",
|
||||
"##Warning 008",
|
||||
"Warning 007",
|
||||
"Warning 008",
|
||||
"##Warning 009",
|
||||
"Warning 010",
|
||||
"Warning 011",
|
||||
"Warning 012",
|
||||
"##Warning 010",
|
||||
"##Warning 011",
|
||||
"##Warning 012",
|
||||
"Warning 013",
|
||||
"Warning 014",
|
||||
"Warning 015",
|
||||
|
||||
@@ -235,18 +235,6 @@ namespace MP.MONO.Core.CONF
|
||||
idx = 0;
|
||||
}
|
||||
}
|
||||
#if false
|
||||
// sistemo messaggi come dizionario...
|
||||
Dictionary<int, string> map = new Dictionary<int, string>();
|
||||
if (messages != null)
|
||||
{
|
||||
foreach (var item in messages)
|
||||
{
|
||||
map.Add(map.Count + 1, item);
|
||||
}
|
||||
}
|
||||
messagesMap = map;
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -22,32 +22,49 @@ namespace MP.MONO.DECODER
|
||||
{
|
||||
// !!!FIXME TODO
|
||||
|
||||
#if false
|
||||
// fare vero setup da file... x ora è fake
|
||||
for (int i = 1; i < 9; i++)
|
||||
for (int i = 1; i < 16; i++)
|
||||
{
|
||||
AlarmList.Add($"Allarme{i:00}");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
currAlarmStatus.Add(0);
|
||||
|
||||
// preparo variabile x avvisare script che il modo è da NLua
|
||||
luaPath = Path.Combine(Directory.GetCurrentDirectory(), "lua", "AlarmDecoder.lua");
|
||||
state.DoString(" callMode = 'NLua' ");
|
||||
#if FALSE
|
||||
state["alarmList"] = AlarmList;
|
||||
state["numAlarm"] = AlarmList.Count;
|
||||
state["numAlarm"] = AlarmList.Count;
|
||||
#endif
|
||||
|
||||
state.DoString(" callMode = 'NLua' ");
|
||||
// initi 0/0
|
||||
#if false
|
||||
state.DoString(" lastVal = 0 ");
|
||||
state.DoString(" currVal = 0 ");
|
||||
#endif
|
||||
#if true
|
||||
state["lastVal"] = 0;
|
||||
state["currVal"] = 0;
|
||||
state["currVal"] = 0;
|
||||
#endif
|
||||
|
||||
Log.Info("AlarmManager OK");
|
||||
Console.WriteLine("AlarmManager OK");
|
||||
}
|
||||
|
||||
public static List<string> processData(int newStatus)
|
||||
public static List<string> processData(string prefix, List<string> alarmList, uint muteMask, uint disableMask, uint newStatus)
|
||||
{
|
||||
state["prefix"] = prefix;
|
||||
state["alarmList"] = alarmList;
|
||||
state["numAlarm"] = alarmList.Count;
|
||||
state["muteMask"] = muteMask;
|
||||
state["disableMask"] = disableMask;
|
||||
|
||||
List<string> answ = new List<string>();
|
||||
// invio dati aggiornati a LUA
|
||||
state["currVal"] = newStatus;
|
||||
|
||||
// FIXME TODO!!! fare invio banco allarmi correnti (SE fossero + banchi da config)
|
||||
state.DoFile(luaPath);
|
||||
alarmStatus = state.GetString("alarmStatus");
|
||||
|
||||
+24
-18
@@ -123,7 +123,7 @@ void AlarmValPipe_EA_NewMessage(object? sender, EventArgs e)
|
||||
try
|
||||
{
|
||||
// verifico codici allarmi ricevuti
|
||||
var alarmList = JsonConvert.DeserializeObject<List<int>>(currArgs.newMessage);
|
||||
var alarmList = JsonConvert.DeserializeObject<Dictionary<string, uint>>(currArgs.newMessage);
|
||||
if (alarmList != null)
|
||||
{
|
||||
// variabili accessorie
|
||||
@@ -143,24 +143,30 @@ void AlarmValPipe_EA_NewMessage(object? sender, EventArgs e)
|
||||
{
|
||||
currAlarmsConf = alarmsConf;
|
||||
}
|
||||
|
||||
// ciclo x ogni bank di allarmi configurato
|
||||
foreach (var bankVal in alarmList)
|
||||
if (currAlarmsConf != null)
|
||||
{
|
||||
var bankAlarmList = AlarmManager.processData(bankVal);
|
||||
// aggiungo...
|
||||
activeAlarmList.AddRange(bankAlarmList);
|
||||
// preparo OBJ x DB
|
||||
AlarmLogModel newAlarm = new AlarmLogModel()
|
||||
// ciclo x ogni bank di allarmi configurato
|
||||
foreach (var alarmData in currAlarmsConf)
|
||||
{
|
||||
MachineId = MachineId,
|
||||
DtRif = DateTime.Now,
|
||||
MemAddress = "SIM.DB",
|
||||
Index = 0,
|
||||
Status = (uint)bankVal,
|
||||
ValDecoded = activeAlarmList.Count > 0 ? JsonConvert.SerializeObject(activeAlarmList) : "All OK"
|
||||
};
|
||||
alarmLogList.Add(newAlarm);
|
||||
// recupero valore allarme
|
||||
var bankVal = alarmList.FirstOrDefault(x => x.Key == alarmData.memAddr);
|
||||
uint actVal = !string.IsNullOrEmpty(bankVal.Key) ? bankVal.Value : 0;
|
||||
// valutare se dividere in 2 da 16... FIXME TODO
|
||||
var bankAlarmList = AlarmManager.processData(alarmData.memAddr, alarmData.messages, alarmData.silenceMask[0], alarmData.disableMask[0], actVal);
|
||||
// aggiungo...
|
||||
activeAlarmList.AddRange(bankAlarmList);
|
||||
|
||||
AlarmLogModel newAlarm = new AlarmLogModel()
|
||||
{
|
||||
MachineId = MachineId,
|
||||
DtRif = DateTime.Now,
|
||||
MemAddress = bankVal.Key,
|
||||
Index = alarmData != null ? alarmData.index : 0,
|
||||
Status = alarmData != null ? (uint)bankVal.Value & alarmData.silenceMask[0] & alarmData.disableMask[0] : (uint)bankVal.Value,
|
||||
ValDecoded = bankAlarmList.Count > 0 ? string.Join(", ", bankAlarmList) : "All OK"
|
||||
};
|
||||
alarmLogList.Add(newAlarm);
|
||||
}
|
||||
}
|
||||
// serializzo...
|
||||
string serAlarms = "All OK";
|
||||
@@ -169,7 +175,7 @@ void AlarmValPipe_EA_NewMessage(object? sender, EventArgs e)
|
||||
serAlarms = JsonConvert.SerializeObject(activeAlarmList);
|
||||
}
|
||||
// invio sulla message pipeline corretta TUTTI gli allarmi serializzati
|
||||
alarmPipe.sendMessage(serAlarms);
|
||||
alarmPipe.saveAndSendMessage(Constants.ALARM_CURR_KEY, serAlarms);
|
||||
if (dbController != null)
|
||||
{
|
||||
// salvo nel DB lo stato dei bank di allarme
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
Per installare il simulatore come servizio impiegare nssm come gestore servizio.
|
||||
-------------------------------
|
||||
- SDK
|
||||
-------------------------------
|
||||
|
||||
IN particolare installare con
|
||||
Va installato pacchetto dotnet core hosting (che installa anche i runtime di dotnetcore)
|
||||
choco install dotnet-windowshosting
|
||||
|
||||
nssm.exe install MP-MONO-SIM
|
||||
|
||||
(Se non bastasse bisogna installare prima SDK dotnet core choco install dotnet-6.0-sdk)
|
||||
|
||||
-------------------------------
|
||||
- SERVIZIO
|
||||
-------------------------------
|
||||
|
||||
Per installare il DECODER come servizio impiegare nssm come gestore servizio. In particolare installare con
|
||||
|
||||
nssm.exe install MP-MONO-SIM
|
||||
|
||||
@@ -5,32 +5,35 @@ Variabili IN:
|
||||
- alarmList(array/tabella) (elenco allarmi gestiti a bitmap, se ## = silenziati)
|
||||
- currVal(INT) stato corrente
|
||||
- lastVal(INT) ultimo stato (oppure 0) - opzionale
|
||||
- muteMap(INT) valore BITMASK x silenziamento allarmi (xFF default = tutto attivo, ogni bit a 0 è silenziato) - opzionale
|
||||
- muteMask(INT) valore disableMask x silenziamento allarmi (xFF default = tutto attivo, ogni bit a 0 è silenziato) - opzionale
|
||||
|
||||
Variabili OUT:
|
||||
- alarmStatus (stirng con status finale risultato allarmi attivi)
|
||||
|
||||
Viene calcolato internamente la bitmask dall'elenco allarmi
|
||||
Viene calcolato internamente la disableMask dall'elenco allarmi
|
||||
-----------------------------------------------------]]
|
||||
|
||||
-- ricezione da codice tab status allarmi, attenzione da C# è 0 based, qui è 1 based --> fix costruzione tabella
|
||||
|
||||
-- variabile semaforo callMode (locali o remote da NLua)
|
||||
callMode = callMode or ''
|
||||
currVal = currVal or 0
|
||||
lastVal = lastVal or 0
|
||||
muteMap = muteMap or 0Xff
|
||||
bitMask = bitMask or 0x00
|
||||
valueChanged = false
|
||||
callMode = callMode or ''
|
||||
currVal = currVal or 0
|
||||
lastVal = lastVal or 0
|
||||
muteMask = muteMask or 0XFF
|
||||
disableMask = disableMask or 0xFF
|
||||
--disableMask = disableMask or 0x00 -- caso calcolato internamente
|
||||
valueChanged = false
|
||||
prefix = prefix or 'AREA'
|
||||
|
||||
-- se non è da NLua inizializzo variabili accessorie
|
||||
local function checkInit()
|
||||
if(callMode ~= 'NLua') then
|
||||
alarmList = {"##Allarme01", "Allarme02", "Allarme03", "##Allarme04", "Allarme05", "Allarme06", "Allarme07", "##Allarme08"}
|
||||
alarmList = {"Allarme01", "Allarme02", "Allarme03", "Allarme04", "Allarme05", "Allarme06", "Allarme07", "Allarme08", "##Allarme09", "##Allarme10", "##Allarme11", "##Allarme12", "##Allarme13", "##Allarme14", "##Allarme15", "##Allarme16"}
|
||||
numAlarm = #alarmList
|
||||
-- valori status da testare
|
||||
lastVal = 0
|
||||
currVal = 255
|
||||
disableMask = 0x00
|
||||
end
|
||||
end
|
||||
|
||||
@@ -43,12 +46,12 @@ local function testBit(testVal, i)
|
||||
end
|
||||
|
||||
local function valMask(testVal)
|
||||
return testVal & bitMask
|
||||
return testVal & disableMask & muteMask
|
||||
end
|
||||
|
||||
local function setupTable()
|
||||
if numAlarm > 0 and alarmList[0] ~= nil then
|
||||
bitMask = 0
|
||||
disableMask = 0
|
||||
for i = numAlarm,1, -1 do
|
||||
alarmListTable[i] = alarmList[i-1]
|
||||
end
|
||||
@@ -57,13 +60,15 @@ local function setupTable()
|
||||
end
|
||||
end
|
||||
-- calcolo maschera...
|
||||
local function setupBitMask()
|
||||
for i = 1, numAlarm,1 do
|
||||
if(string.sub(alarmListTable[i],0,2)~='##') then
|
||||
bitMask = bitMask + 2^(i-1)
|
||||
end
|
||||
local function setupdisableMask()
|
||||
if(callMode ~= 'NLua') then
|
||||
for i = 1, numAlarm,1 do
|
||||
if(string.sub(alarmListTable[i],0,2)~='##') then
|
||||
disableMask = disableMask + 2^(i-1)
|
||||
end
|
||||
end
|
||||
disableMask = math.tointeger(disableMask)
|
||||
end
|
||||
bitMask = math.tointeger(bitMask)
|
||||
end
|
||||
|
||||
-- confronto lastVal e currVal
|
||||
@@ -87,7 +92,7 @@ local function checkActiveAlarms()
|
||||
for i = 1, numAlarm do
|
||||
bTest = testBit(valMask(currVal),i)
|
||||
if(bTest) then
|
||||
alarmListActive[#alarmListActive+1]=string.format("%03d",i) ..' - '.. alarmListTable[i]
|
||||
alarmListActive[#alarmListActive+1]= '[' .. prefix ..'.' .. string.format("%02d",i) ..'] '.. alarmListTable[i]
|
||||
hasAlarms = 1
|
||||
end
|
||||
end
|
||||
@@ -113,7 +118,7 @@ end
|
||||
|
||||
local function displayTestInfo()
|
||||
if(callMode ~= 'NLua') then
|
||||
print('muteMap: '.. muteMap .. ' | bitMask: '.. bitMask)
|
||||
print('muteMask: '.. muteMask .. ' | disableMask: '.. disableMask)
|
||||
print(alarmStatus)
|
||||
--print('------------------------------')
|
||||
--for i,val in pairs(alarmListTable) do
|
||||
@@ -130,7 +135,7 @@ alarmStatus = ""
|
||||
|
||||
checkInit()
|
||||
setupTable()
|
||||
setupBitMask()
|
||||
setupdisableMask()
|
||||
checkVariation()
|
||||
checkActiveAlarms()
|
||||
calcStatusVar()
|
||||
|
||||
@@ -16,15 +16,15 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MailKit" Version="3.1.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.3" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="6.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.3">
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="6.0.2" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.2" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.2">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.3">
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.2" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.2">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@@ -17,15 +17,15 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MailKit" Version="3.1.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.3" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="6.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.3">
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="6.0.2" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.2" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.2">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.3">
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.2" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.2">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
+46
-10
@@ -1,4 +1,5 @@
|
||||
using StackExchange.Redis;
|
||||
using NLog;
|
||||
using StackExchange.Redis;
|
||||
|
||||
namespace MP.MONO.Data
|
||||
{
|
||||
@@ -6,18 +7,27 @@ namespace MP.MONO.Data
|
||||
{
|
||||
#region Private Fields
|
||||
|
||||
private bool enableLog = false;
|
||||
private DateTime LastSend = DateTime.Now.AddMinutes(-5);
|
||||
private IConnectionMultiplexer redis;
|
||||
private bool enableConsoleLog = false;
|
||||
private IDatabase? redisDb;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Protected Fields
|
||||
|
||||
protected static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
#endregion Protected Fields
|
||||
|
||||
#region Public Constructors
|
||||
|
||||
public MessagePipe(IConnectionMultiplexer redisConn, string channelName, bool enableLog = false)
|
||||
{
|
||||
_channel = channelName;
|
||||
redis = redisConn;
|
||||
enableConsoleLog = enableLog;
|
||||
redisDb = redis.GetDatabase();
|
||||
this.enableLog = enableLog;
|
||||
// aggiungo sottoscrittore
|
||||
setupSubscriber();
|
||||
}
|
||||
@@ -47,11 +57,8 @@ namespace MP.MONO.Data
|
||||
//Subscribe to the channel named messages
|
||||
sub.Subscribe(_channel, (channel, message) =>
|
||||
{
|
||||
// Se abilitato Output messaggio ricevuto
|
||||
if (enableConsoleLog)
|
||||
{
|
||||
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {message}");
|
||||
}
|
||||
Log.Info($"[{DateTime.Now:HH:mm:ss}] {message}");
|
||||
// messaggio
|
||||
PubSubEventArgs mea = new PubSubEventArgs(message);
|
||||
// se qualcuno ascolta sollevo evento nuovo valore...
|
||||
if (EA_NewMessage != null)
|
||||
@@ -59,13 +66,37 @@ namespace MP.MONO.Data
|
||||
EA_NewMessage(this, mea);
|
||||
}
|
||||
});
|
||||
Console.WriteLine($"Subscribed {_channel}");
|
||||
Log.Info($"Subscribed {_channel}");
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public bool saveAndSendMessage(string memKey, string message)
|
||||
{
|
||||
bool answ = false;
|
||||
// invio notifica tramite il canale richiesto
|
||||
answ = sendMessage(message);
|
||||
// effettuo la scrittura nell'area di memoria indicata SE passato intervallo minimo
|
||||
bool doSend = true;
|
||||
if (DateTime.Now.Subtract(LastSend).TotalSeconds < 60)
|
||||
{
|
||||
doSend = false;
|
||||
}
|
||||
|
||||
if (doSend && redisDb != null)
|
||||
{
|
||||
redisDb.StringSetAsync(memKey, message);
|
||||
LastSend = DateTime.Now;
|
||||
if (enableLog)
|
||||
{
|
||||
Log.Info($"Redis Cache Key: {memKey}");
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invio messaggio sul canale
|
||||
/// </summary>
|
||||
@@ -74,13 +105,18 @@ namespace MP.MONO.Data
|
||||
public bool sendMessage(string newMess)
|
||||
{
|
||||
bool answ = false;
|
||||
|
||||
ISubscriber sub = redis.GetSubscriber();
|
||||
sub.Publish(_channel, newMess);
|
||||
return answ;
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
/// <summary>
|
||||
/// Invio messaggio sul canale + salvataggio in cache REDIS
|
||||
/// </summary>
|
||||
/// <param name="memKey">Chiave REDIS x salvare valore</param>
|
||||
/// <param name="message"></param>
|
||||
}
|
||||
|
||||
public class PubSubEventArgs : EventArgs
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace MP.MONO.Data.Migrations
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "6.0.3")
|
||||
.HasAnnotation("ProductVersion", "6.0.2")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 64);
|
||||
|
||||
modelBuilder.Entity("MP.MONO.Data.DbModels.AlarmLogModel", b =>
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace MP.MONO.Data.Migrations
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "6.0.3")
|
||||
.HasAnnotation("ProductVersion", "6.0.2")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 64);
|
||||
|
||||
modelBuilder.Entity("MP.MONO.Data.DbModels.AlarmLogModel", b =>
|
||||
|
||||
+22
-20
@@ -182,7 +182,7 @@ void logError(string msg, bool log2file = true, bool log2console = false)
|
||||
}
|
||||
}
|
||||
|
||||
void saveAndSendMessage(string memKey, string value, string notifyChannel, string message)
|
||||
void saveAndSendMessage(string memKey, string notifyChannel, string message)
|
||||
{
|
||||
// effettuo la scrittura nell'area di memoria indicata SE passato intervallo minimo
|
||||
bool doSend = true;
|
||||
@@ -199,17 +199,16 @@ void saveAndSendMessage(string memKey, string value, string notifyChannel, strin
|
||||
}
|
||||
if (doSend)
|
||||
{
|
||||
redisDb.StringSetAsync(memKey, value);
|
||||
redisDb.StringSetAsync(memKey, message);
|
||||
LastSend[memKey] = DateTime.Now;
|
||||
logInfo($"Redis Cache Key: {memKey}");
|
||||
}
|
||||
//redisDb.SetAdd(memKey, value);
|
||||
|
||||
// invio notifica tramite il canale richiesto
|
||||
sub.Publish(notifyChannel, message);
|
||||
if (verboseLog)
|
||||
{
|
||||
logInfo($"[{notifyChannel}] key: {memKey} | val: {value} | message: {message}");
|
||||
logInfo($"[{notifyChannel}] key: {memKey} | val/message: {message}");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -253,23 +252,26 @@ void saveAndSendMessage(string memKey, string value, string notifyChannel, strin
|
||||
|
||||
void simAlarms()
|
||||
{
|
||||
int minPeriod = 5000;
|
||||
int maxPeriod = 10000;
|
||||
int minPeriod = 3000;
|
||||
int maxPeriod = 9000;
|
||||
int percAllarmi = config.GetValue<int>("percAllarmi");
|
||||
|
||||
do
|
||||
{
|
||||
Dictionary<string,int> currAlarmsVal = new Dictionary<string, int>();
|
||||
int alarmCode = 0;
|
||||
Dictionary<string, uint> currAlarmsVal = new Dictionary<string, uint>();
|
||||
uint alarmCode = 0;
|
||||
bool hasAlarm;
|
||||
// ciclo x numero banchi da config...
|
||||
foreach (var item in alarmsConf)
|
||||
{
|
||||
alarmCode = rand.Next(0, 65535);
|
||||
// se >= 128 --> 0 (no alarm)
|
||||
alarmCode = alarmCode <= 32768 ? alarmCode : 0;
|
||||
// limito allarmi al percAllarmi/100 dei casi
|
||||
hasAlarm = rand.Next(0, 100) <= percAllarmi;
|
||||
// allarme libero SE in condizione allarme
|
||||
alarmCode = hasAlarm ? (uint)rand.Next(0, 65535) : 0;
|
||||
currAlarmsVal.Add(item.memAddr, alarmCode);
|
||||
}
|
||||
string rawDataVal = JsonConvert.SerializeObject(currAlarmsVal);
|
||||
saveAndSendMessage(Constants.ALARM_ACT_KEY, rawDataVal, Constants.ALARM_ACT_VAL, rawDataVal);
|
||||
saveAndSendMessage(Constants.ALARM_ACT_KEY, Constants.ALARM_ACT_VAL, rawDataVal);
|
||||
// attesa random
|
||||
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
|
||||
} while (true);
|
||||
@@ -284,7 +286,7 @@ void simParameters()
|
||||
{
|
||||
var newParams = currSimGen.getParameters();
|
||||
string rawData = JsonConvert.SerializeObject(newParams);
|
||||
saveAndSendMessage(Constants.PARAMS_CURR_KEY, rawData, Constants.PARAMS_M_QUEUE, rawData);
|
||||
saveAndSendMessage(Constants.PARAMS_CURR_KEY, Constants.PARAMS_M_QUEUE, rawData);
|
||||
// attesa random
|
||||
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
|
||||
} while (true);
|
||||
@@ -300,7 +302,7 @@ void simStatus()
|
||||
// recupero uno stato simulato
|
||||
var newStatus = currSimGen.getStatus();
|
||||
string rawData = JsonConvert.SerializeObject(newStatus);
|
||||
saveAndSendMessage(Constants.STATUS_CURR_KEY, rawData, Constants.STATUS_M_QUEUE, rawData);
|
||||
saveAndSendMessage(Constants.STATUS_CURR_KEY, Constants.STATUS_M_QUEUE, rawData);
|
||||
|
||||
// attesa random
|
||||
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
|
||||
@@ -317,7 +319,7 @@ void simProd()
|
||||
// recupero uno stato simulato
|
||||
var newStatus = currSimGen.getProd();
|
||||
string rawData = JsonConvert.SerializeObject(newStatus);
|
||||
saveAndSendMessage(Constants.PROD_CURR_KEY, rawData, Constants.PROD_M_QUEUE, rawData);
|
||||
saveAndSendMessage(Constants.PROD_CURR_KEY, Constants.PROD_M_QUEUE, rawData);
|
||||
|
||||
// attesa random
|
||||
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
|
||||
@@ -334,7 +336,7 @@ void simMachStat()
|
||||
// recupero uno stato simulato
|
||||
var newVal = currSimGen.getProdStats();
|
||||
string rawData = JsonConvert.SerializeObject(newVal);
|
||||
saveAndSendMessage(Constants.MACH_STATS_CURR_KEY, rawData, Constants.MACH_STATS_M_QUEUE, rawData);
|
||||
saveAndSendMessage(Constants.MACH_STATS_CURR_KEY, Constants.MACH_STATS_M_QUEUE, rawData);
|
||||
|
||||
// attesa random
|
||||
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
|
||||
@@ -351,7 +353,7 @@ void simMaint()
|
||||
// recupero uno stato simulato
|
||||
var newVal = currSimGen.getMaint();
|
||||
string rawData = JsonConvert.SerializeObject(newVal);
|
||||
saveAndSendMessage(Constants.MAINT_STATS_CURR_KEY, rawData, Constants.MAINT_STATS_M_QUEUE, rawData);
|
||||
saveAndSendMessage(Constants.MAINT_STATS_CURR_KEY, Constants.MAINT_STATS_M_QUEUE, rawData);
|
||||
|
||||
// attesa random
|
||||
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
|
||||
@@ -368,7 +370,7 @@ void simTools()
|
||||
// recupero uno stato simulato
|
||||
var newVal = currSimGen.getTools();
|
||||
string rawData = JsonConvert.SerializeObject(newVal);
|
||||
saveAndSendMessage(Constants.TOOLS_CURR_KEY, rawData, Constants.TOOLS_M_QUEUE, rawData);
|
||||
saveAndSendMessage(Constants.TOOLS_CURR_KEY, Constants.TOOLS_M_QUEUE, rawData);
|
||||
|
||||
// attesa random
|
||||
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
|
||||
@@ -385,7 +387,7 @@ void simEvents()
|
||||
// recupero uno stato simulato
|
||||
var newVal = currSimGen.getEvents();
|
||||
string rawData = JsonConvert.SerializeObject(newVal);
|
||||
saveAndSendMessage(Constants.EVENT_LOG_CURR_KEY, rawData, Constants.EVENT_LOG_M_QUEUE, rawData);
|
||||
saveAndSendMessage(Constants.EVENT_LOG_CURR_KEY, Constants.EVENT_LOG_M_QUEUE, rawData);
|
||||
|
||||
// attesa random
|
||||
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
|
||||
@@ -402,7 +404,7 @@ void simActivityLog()
|
||||
// recupero uno stato simulato
|
||||
var newVal = currSimGen.getActLog();
|
||||
string rawData = JsonConvert.SerializeObject(newVal);
|
||||
saveAndSendMessage(Constants.ACT_LOG_CURR_KEY, rawData, Constants.ACT_LOG_M_QUEUE, rawData);
|
||||
saveAndSendMessage(Constants.ACT_LOG_CURR_KEY, Constants.ACT_LOG_M_QUEUE, rawData);
|
||||
|
||||
// attesa random
|
||||
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"ConnectionStrings": {
|
||||
"Redis": "nkcredis.steamware.net:6379,DefaultDatabase=7,connectTimeout=5000,syncTimeout=5000,asyncTimeout=5000,abortConnect=false,ssl=false,password=nkc.password",
|
||||
"Redis": "nkcredis.steamware.net:6379,DefaultDatabase=7,connectTimeout=30000,syncTimeout=30000,asyncTimeout=30000,abortConnect=false,ssl=false,password=nkc.password",
|
||||
"AuthConnection": "Server=localhost;port=3306;database=GWMS;user=GWMS;pwd=GWMS_secret_pwd;sslmode=None;",
|
||||
"DefaultConnection": "Server=localhost;port=3306;database=MAPO.MONO;user=GWMS;pwd=GWMS_secret_pwd;sslmode=None;",
|
||||
"AdminConnection": "Server=localhost;port=3306;database=MAPO.MONO;user=root;pwd=Egalware_24068!;sslmode=None;",
|
||||
@@ -19,6 +19,7 @@
|
||||
"sKey": "M3T@n0-CH4"
|
||||
},
|
||||
"maxRecord": 15,
|
||||
"percAllarmi": 40,
|
||||
"ExternalProviders": {
|
||||
"MailKit": {
|
||||
"SMTP": {
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.Negotiate" Version="6.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.3">
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.Negotiate" Version="6.0.2" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.2">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.Negotiate" Version="6.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.3">
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.Negotiate" Version="6.0.2" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.2">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
Reference in New Issue
Block a user