using MapoSDK;
using MongoDB.Driver;
using SteamWare;
using System;
using System.Collections.Generic;
namespace MapoDb
{
///
/// Classe gestione ALLARMI coem eventi speciali (documenti registrati su MongoDb)
///
public class AlarmsArchive
{
#if false
string mdbConnString = "mongodb://W2019-MONGODB:27017";
//string mdbConnString = "mongodb://localhost:27017";
MongoClient client;
#endif
///
/// Database corrente MongoDB
///
IMongoDatabase database;
///
/// Classe gestione archivio allarmi
///
public AlarmsArchive()
{
#if false
// rifare avvio con lettura da web.config...
client = new MongoClient(mdbConnString);
database = client.GetDatabase("MAPO");
#endif
database = memLayer.ML.getMongoDatabase("MAPO");
}
///
/// Singleton gestione istanza AlarmsManager
///
public static AlarmsArchive man = new AlarmsArchive();
///
/// Crea una registrazione incidente su MongoDB
///
///
///
/// numero di minuti precedenti di dati FluxLog da includere
///
public int createAlarmEvent(string idxMacchina, List 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");
var builderAlarmStat = Builders.Filter;
var filtThisYear = builderAlarmStat.Eq(u => u.year, anno);
var datiCorrenti = collAlarmStats.Find(filtThisYear);
var collAlarmEvents = database.GetCollection("AlarmEvents");
List lastFluxLog = new List();
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;
}
}
}