Abbozzata gestione rec dati allarmi (incidents)
This commit is contained in:
@@ -346,7 +346,7 @@ namespace MP_IO.Controllers
|
||||
}
|
||||
/// <summary>
|
||||
/// Processa una chiamata POST per l'invio di un array Json di oggetti plcMemConf
|
||||
/// PUT: IOB/flogJson/SIMUL_03
|
||||
/// PUT: IOB/saveConf/SIMUL_03
|
||||
/// </summary>
|
||||
/// <param name="id">ID dell'IOB</param>
|
||||
/// <returns></returns>
|
||||
@@ -388,6 +388,53 @@ namespace MP_IO.Controllers
|
||||
return answ;
|
||||
}
|
||||
/// <summary>
|
||||
/// Processa una chiamata POST per l'invio di un array Json di oggetti di conf DataItems (es per MTC)
|
||||
/// PUT: IOB/saveDataItems/SIMUL_03
|
||||
/// </summary>
|
||||
/// <param name="id">ID dell'IOB</param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public string saveDataItems(string id)
|
||||
{
|
||||
string answ = "";
|
||||
if (string.IsNullOrWhiteSpace(id))
|
||||
{
|
||||
answ = "Missing IOB";
|
||||
}
|
||||
else
|
||||
{
|
||||
// questa classe è derivata da Controller.Response... x cui recupero lo stream in altro modo...
|
||||
string content = "";
|
||||
System.Web.HttpContext.Current.Request.InputStream.Position = 0;
|
||||
using (var reader = new StreamReader(Request.InputStream, System.Text.Encoding.UTF8, true, 4096, true))
|
||||
{
|
||||
content = reader.ReadToEnd();
|
||||
}
|
||||
// Rest
|
||||
System.Web.HttpContext.Current.Request.InputStream.Position = 0;
|
||||
|
||||
|
||||
#if false
|
||||
// procedo a deserializzare in blocco l'oggetto...
|
||||
plcMemMap currMemMap = null;
|
||||
try
|
||||
{
|
||||
// deserializzo.
|
||||
currMemMap = JsonConvert.DeserializeObject<plcMemMap>(content);
|
||||
// se != null --> salvo!
|
||||
if (currMemMap != null)
|
||||
{
|
||||
DataLayer.setIobMemMap(id, currMemMap);
|
||||
answ = "OK";
|
||||
}
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
#endif
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
/// <summary>
|
||||
/// restituisce elenco parametri correnti come una List Json di oggetti objItem
|
||||
/// GET: IOB/getObjItems/SIMUL_03
|
||||
/// </summary>
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
using MapoSDK;
|
||||
using MongoDB.Driver;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MapoDb
|
||||
{
|
||||
/// <summary>
|
||||
/// Classe gestione ALLARMI coem eventi speciali (documenti registrati su MongoDb)
|
||||
/// </summary>
|
||||
public class AlarmsArchive
|
||||
{
|
||||
string mdbConnString = "mongodb://W2019-MONGODB:27017";
|
||||
//string mdbConnString = "mongodb://localhost:27017";
|
||||
MongoClient client;
|
||||
IMongoDatabase database;
|
||||
public AlarmsArchive()
|
||||
{
|
||||
// rifare avvio con lettura da web.config...
|
||||
client = new MongoClient(mdbConnString);
|
||||
database = client.GetDatabase("MAPO");
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// Singleton gestione istanza AlarmsManager
|
||||
/// </summary>
|
||||
public static AlarmsArchive man = new AlarmsArchive();
|
||||
/// <summary>
|
||||
/// Crea una registrazione incidente su MongoDB
|
||||
/// </summary>
|
||||
/// <param name="idxMacchina"></param>
|
||||
/// <param name="elencoAllarmi"></param>
|
||||
/// <param name="lastMinutes">numero di minuti precedenti di dati FluxLog da includere</param>
|
||||
/// <returns></returns>
|
||||
public int createIncident(string idxMacchina, List<alarmData> elencoAllarmi, int lastMinutes)
|
||||
{
|
||||
int answ = 0;
|
||||
string currDateStr = "";
|
||||
int startYMD = 0;
|
||||
DateTime adesso = DateTime.Now;
|
||||
int anno = adesso.Year;
|
||||
currDateStr = adesso.ToString("yyyyMMdd");
|
||||
int.TryParse(currDateStr, out startYMD);
|
||||
// in primis recupero contatore allarmi correnti, lo incremento salvandolo e genero nuovo documento...
|
||||
var collAlarmStats = database.GetCollection<alarmStats>("AlarmStats");
|
||||
var builderAlarmStat = Builders<alarmStats>.Filter;
|
||||
var filtThisYear = builderAlarmStat.Eq(u => u.year, anno);
|
||||
|
||||
var datiCorrenti = collAlarmStats.Find(filtThisYear);
|
||||
var collAlarmEvents = database.GetCollection<alarmEvent>("AlarmEvents");
|
||||
|
||||
List<rawData> lastFluxLog = new List<rawData>();
|
||||
DS_applicazione.FluxLogDataTable tabDati = DataLayer.obj.taFL.getFiltOrd(idxMacchina, adesso.AddMinutes(-lastMinutes), adesso, true);
|
||||
if (tabDati.Count > 0)
|
||||
{
|
||||
// chiamo procedura x conversione
|
||||
lastFluxLog = FluxArchive.man.convertTable(tabDati, adesso, timeWindow.free);
|
||||
}
|
||||
alarmEvent nuovoAllarme = new alarmEvent()
|
||||
{
|
||||
yCurr = anno,
|
||||
yCounter = answ,
|
||||
dateYMD = startYMD,
|
||||
started = DateTime.Now,
|
||||
blackBoxData = lastFluxLog,
|
||||
activeConditions = elencoAllarmi
|
||||
};
|
||||
|
||||
collAlarmEvents.InsertOne(nuovoAllarme);
|
||||
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -138,7 +138,7 @@ namespace MapoDb
|
||||
/// <param name="tabDati">Tabelal dei dati RAW registrati</param>
|
||||
/// <param name="tStamp">Data di riferimento</param>
|
||||
/// <param name="periodo">Periodo del campionamento desiderato (e passato coi dati che sono relativi a tale periodo...)</param>
|
||||
protected List<rawData> convertTable(DS_applicazione.FluxLogDataTable tabDati, DateTime tStamp, timeWindow periodo)
|
||||
public List<rawData> convertTable(DS_applicazione.FluxLogDataTable tabDati, DateTime tStamp, timeWindow periodo)
|
||||
{
|
||||
// init oggetti
|
||||
List<rawData> listaRecords = new List<rawData>();
|
||||
|
||||
@@ -120,6 +120,7 @@
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AlarmsArchive.cs" />
|
||||
<Compile Include="DataLayer.cs" />
|
||||
<Compile Include="DS_applicazione.cs">
|
||||
<DependentUpon>DS_applicazione.xsd</DependentUpon>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
[*.cs]
|
||||
|
||||
# CA2227: Le proprietà delle raccolte devono essere di sola lettura
|
||||
dotnet_diagnostic.CA2227.severity = none
|
||||
@@ -62,6 +62,7 @@
|
||||
/// </summary>
|
||||
public enum timeWindow
|
||||
{
|
||||
free,
|
||||
hour,
|
||||
day,
|
||||
week,
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include=".editorconfig" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -439,6 +439,93 @@ namespace MapoSDK
|
||||
/// </summary>
|
||||
public string message { get; set; } = "";
|
||||
}
|
||||
/// <summary>
|
||||
/// Definizione classe evento allarme
|
||||
/// </summary>
|
||||
public class alarmEvent
|
||||
{
|
||||
/// <summary>
|
||||
/// Anno di riferimento allarme (per chiave yyyy.n)
|
||||
/// </summary>
|
||||
public int yCurr { get; set; } = 0;
|
||||
/// <summary>
|
||||
/// Contatore incrementale univoco annuale (per chiave yyyy.n)
|
||||
/// </summary>
|
||||
public int yCounter { get; set; } = 0;
|
||||
/// <summary>
|
||||
/// Data riferimento campione in formato YMD = yyyyMMdd
|
||||
/// </summary>
|
||||
public int dateYMD { get; set; } = 0;
|
||||
/// <summary>
|
||||
/// Data-Ora inizio evento
|
||||
/// </summary>
|
||||
public DateTime started { get; set; } = DateTime.Now;
|
||||
/// <summary>
|
||||
/// Data-Ora inizio evento
|
||||
/// </summary>
|
||||
public DateTime ended { get; set; } = DateTime.Now;
|
||||
/// <summary>
|
||||
/// Lista delle condizioni di allarme attive ad inizio evento
|
||||
/// </summary>
|
||||
public List<alarmData> activeConditions { get; set; } = null;
|
||||
/// <summary>
|
||||
/// Elenco dei dati di tipo FluxLog nei minuti antecedenti l'evento
|
||||
/// </summary>
|
||||
public List<rawData> blackBoxData { get; set; } = null;
|
||||
}
|
||||
/// <summary>
|
||||
/// Definizione classe evento allarme
|
||||
/// </summary>
|
||||
public class alarmStats
|
||||
{
|
||||
/// <summary>
|
||||
/// Anno riferimento
|
||||
/// </summary>
|
||||
public int year { get; set; } = 0;
|
||||
/// <summary>
|
||||
/// Valore Contatore univoco annuale raggiunto yyyy.n
|
||||
/// </summary>
|
||||
public int yCounter { get; set; } = 1;
|
||||
/// <summary>
|
||||
/// Valore cumulato complessivo degli allarmi registrati
|
||||
/// </summary>
|
||||
public double totalDuration { get; set; } = 0;
|
||||
/// <summary>
|
||||
/// Durata media annuale allarmi
|
||||
/// </summary>
|
||||
public double avgDuration
|
||||
{
|
||||
get
|
||||
{
|
||||
double answ = 0;
|
||||
try
|
||||
{
|
||||
answ = totalDuration / yCounter;
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Definizione allarme
|
||||
/// </summary>
|
||||
public class alarmData
|
||||
{
|
||||
/// <summary>
|
||||
/// Codice univoco
|
||||
/// </summary>
|
||||
public string code { get; set; } = "";
|
||||
/// <summary>
|
||||
/// Descrizione
|
||||
/// </summary>
|
||||
public string description { get; set; } = "";
|
||||
/// <summary>
|
||||
/// Severity (0....1000, minimo...massimo)
|
||||
/// </summary>
|
||||
public int severity { get; set; } = 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
Reference in New Issue
Block a user