From 9b5abff61867b7cf7ce98552eab7ede97b0fa537 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Sun, 17 Nov 2019 14:23:54 +0100 Subject: [PATCH] =?UTF-8?q?Cambio=20modalit=C3=A0=20processing,=20daily=20?= =?UTF-8?q?proc...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MapoDb/FluxArchive.cs | 107 +++++++++++++++++++++++++++++++++++------- 1 file changed, 91 insertions(+), 16 deletions(-) diff --git a/MapoDb/FluxArchive.cs b/MapoDb/FluxArchive.cs index 07ec464c..a3344714 100644 --- a/MapoDb/FluxArchive.cs +++ b/MapoDb/FluxArchive.cs @@ -66,16 +66,18 @@ namespace MapoDb exeResult answ = new exeResult(); StringBuilder sb = new StringBuilder(); Stopwatch sw = new Stopwatch(); +#if false // Oggetto dove verserĂ² i dati List listaRecords = new List(); tsGrouped currRecord = null; List valori = new List(); - tsData campione = null; + tsData campione = null; +#endif DateTime tStamp; - string filtro = ""; - string sort = "idxMacchina ASC, codFlux ASC, dtEvento DESC"; - string currFlux = ""; - string currMacc = ""; + //string filtro = ""; + //string sort = "idxMacchina ASC, codFlux ASC, dtEvento DESC"; + //string currFlux = ""; + //string currMacc = ""; int totRec = 0; // faccio ciclo su gg richiesti... for (int i = 0; i < numDays; i++) @@ -84,12 +86,26 @@ namespace MapoDb // leggo da DB i records... sw.Start(); sb.AppendLine($"Inizio processing periodo {tStamp} --> {tStamp.AddDays(1)}"); - var tabDati = DataLayer.obj.taFL.getFilt("", tStamp, tStamp.AddDays(1), true); + DS_applicazione.FluxLogDataTable tabDati = DataLayer.obj.taFL.getFiltOrd("", tStamp, tStamp.AddDays(1), true); sb.AppendLine($"Effettuata lettura DB: {tabDati.Count} record in {sw.ElapsedMilliseconds / 1000} sec"); sw.Restart(); - filtro = $"dtEvento >= #{tStamp:yyyy-MM-dd HH:mm:00}# AND dtEvento <= #{tStamp.AddHours(1):yyyy-MM-dd HH:mm:00}#"; - var tabDay = (DS_applicazione.FluxLogRow[])tabDati.Select(filtro, sort); - foreach (var item in tabDay) + // chiamo procedura x conversione + List risultato = convertTable(tabDati, tStamp, timeWindow.day); + sb.AppendLine($"Generata collezione di {risultato.Count} record in {sw.ElapsedMilliseconds / 1000} sec"); + sw.Restart(); + + + // oggetto gestione dati ts raggruppati + var collection = database.GetCollection("FluxLog"); + // salvo in blocco + collection.InsertMany(risultato); + sb.AppendLine($"Salvata su MongoDb collezione di {risultato.Count} record in {sw.ElapsedMilliseconds / 1000} sec"); + +#if false + //filtro = $"dtEvento >= #{tStamp:yyyy-MM-dd HH:mm:00}# AND dtEvento <= #{tStamp.AddHours(1):yyyy-MM-dd HH:mm:00}#"; + //var tabDay = (DS_applicazione.FluxLogRow[])tabDati.Select(filtro, sort); + //foreach (var item in tabDay) + foreach (var item in tabDati) { // controllo flusso x nuovo record... if (item.CodFlux != currFlux || item.IdxMacchina != currMacc) @@ -127,8 +143,10 @@ namespace MapoDb valori.Add(campione); campione = null; } - } + } +#endif } +#if false // aggiungo ultimo... salvo il VECCHIO record... if (currRecord != null) { @@ -142,17 +160,74 @@ namespace MapoDb collection.InsertMany(listaRecords); sb.AppendLine($"Salvata su MongoDb collezione di {listaRecords.Count} record in {sw.ElapsedMilliseconds / 1000} sec"); -#if false - // svuoto memoria... - listaRecords = null; - valori = null; - tabDati = null; #endif - // restituisco messaggio... answ.esito = esitoExec.ok; answ.message = sb.ToString(); return answ; } + + /// + /// Converte una tabella dati da DB in una lista di oggetti pronti x salvataggio su MongoDb + /// + /// Tabelal dei dati RAW registrati + /// Data di riferimento + /// Periodo del campionamento desiderato (e passato coi dati che sono relativi a tale periodo...) + protected List convertTable(DS_applicazione.FluxLogDataTable tabDati, DateTime tStamp, timeWindow periodo) + { + // init oggetti + List listaRecords = new List(); + tsGrouped currRecord = null; + List valori = new List(); + tsData campione = null; + string currFlux = ""; + string currMacc = ""; + + foreach (var item in tabDati) + { + // controllo flusso x nuovo record... + if (item.CodFlux != currFlux || item.IdxMacchina != currMacc) + { + // salvo il VECCHIO record... + if (currRecord != null) + { + currRecord.samples = valori; + listaRecords.Add(currRecord); + valori = null; + currRecord = null; + } + // nuovi record... + currFlux = item.CodFlux; + currMacc = item.IdxMacchina; + valori = new List(); + currRecord = new tsGrouped() + { + vcMachine = currMacc, + vcName = currFlux, + timeStamp = tStamp, + period = periodo + }; + } + campione = new tsData() + { + vcMachine = item.IdxMacchina, + vcName = item.CodFlux, + timeStamp = item.dtEvento, + strValue = item.Valore + }; + // aggiunta sample ai record prec... + if (campione != null && currRecord != null) + { + valori.Add(campione); + campione = null; + } + } + // aggiungo ultimo... salvo il VECCHIO record... + if (currRecord != null) + { + listaRecords.Add(currRecord); + } + return listaRecords; + } } }