diff --git a/MP-Site/WS/MPData.asmx.cs b/MP-Site/WS/MPData.asmx.cs index 3328dabd..abfc628d 100644 --- a/MP-Site/WS/MPData.asmx.cs +++ b/MP-Site/WS/MPData.asmx.cs @@ -1,6 +1,7 @@ using SteamWare; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Web.Script.Serialization; using System.Web.Script.Services; using System.Web.Services; @@ -74,30 +75,64 @@ namespace MoonPro.WS [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] public void seqStati(string idxMacch, string dataFrom, string dataTo, int numSplit) { - JavaScriptSerializer js = new JavaScriptSerializer(); + Stopwatch stopwatch = new Stopwatch(); + intervalloDate _intervallo = new intervalloDate() + { + inizio = Convert.ToDateTime(dataFrom), + fine = Convert.ToDateTime(dataTo) + }; + string rKey = string.Format("jsonSeq_MIF_{0}_{1}_{2}_{3}", idxMacch, numSplit, _intervallo.inizio.ToString("yyyyMMdd_hhmmss"), _intervallo.fine.ToString("yyyyMMdd_hhmmss")).Replace(" ", "_"); + //logger.lg.scriviLog("Nome key: " + rKey); + + // oggetti x proseguire... + JavaScriptSerializer js = new JavaScriptSerializer() { MaxJsonLength = Int32.MaxValue / 2 }; Context.Response.Clear(); Context.Response.ContentType = "application/json"; + string answ = ""; - visjsDsItem[] items = new visjsDsItem[10]; - List tlSerie; + bool needRecalc = true; + string redJson = memLayer.ML.getRSV(rKey); + // controllo se ho già in sessione un oggetto seq... + if (redJson != null && redJson != "") { - resoconti _resoconti = new resoconti(); - - intervalloDate intervallo = new intervalloDate(); - intervallo.fine = Convert.ToDateTime(dataTo); - intervallo.inizio = Convert.ToDateTime(dataFrom); - - tlSerie = _resoconti.sequenzaDatiVisJS(idxMacch, intervallo, numSplit); - int i = 0; - items = new visjsDsItem[tlSerie.Count]; - foreach (var recSeq in tlSerie) + try + { + needRecalc = false; + answ = redJson; + logger.lg.scriviLog("Recuperato jsonSeq"); + } + catch { - // creo item - items[i] = recSeq; - i++; } } - Context.Response.Write(js.Serialize(items)); + if (needRecalc) + { + logger.lg.scriviLog("Inizio calcolo dati"); + visjsDsItem[] items = new visjsDsItem[10]; + List tlSerie; + { + resoconti _resoconti = new resoconti(); + + intervalloDate intervallo = new intervalloDate(); + intervallo.fine = Convert.ToDateTime(dataTo); + intervallo.inizio = Convert.ToDateTime(dataFrom); + + tlSerie = _resoconti.sequenzaDatiVisJS(idxMacch, intervallo, numSplit); + int i = 0; + items = new visjsDsItem[tlSerie.Count]; + foreach (var recSeq in tlSerie) + { + // creo item + items[i] = recSeq; + i++; + } + } + answ = js.Serialize(items); + // salvo in sessione l'oggetto... per 1 gg.. + memLayer.ML.setRSV(rKey, answ, 20); + logger.lg.scriviLog(string.Format("Salvataggio in sessione jsonSeq effettuato: {0} msec", stopwatch.ElapsedMilliseconds)); + } + Context.Response.Write(answ); } [WebMethod] [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] diff --git a/MP-Site/Web.config b/MP-Site/Web.config index 1871f17c..b3fa01a8 100644 --- a/MP-Site/Web.config +++ b/MP-Site/Web.config @@ -14,6 +14,9 @@ + + + diff --git a/MP-Site/WebUserControls/mod_sequencerStatiJS.ascx b/MP-Site/WebUserControls/mod_sequencerStatiJS.ascx index 2000ef66..260cc97f 100644 --- a/MP-Site/WebUserControls/mod_sequencerStatiJS.ascx +++ b/MP-Site/WebUserControls/mod_sequencerStatiJS.ascx @@ -40,7 +40,7 @@ var container = document.getElementById('tlArea'); // ITES da deserializzazione risposta var items = JSON.parse(output); - console.log(items); + //console.log(items); // gruppi var groups = [ { diff --git a/MP-Site/test.aspx b/MP-Site/test.aspx index 75161c2b..3a83de02 100644 --- a/MP-Site/test.aspx +++ b/MP-Site/test.aspx @@ -2,6 +2,8 @@ <%@ Register Src="WebUserControls/mod_realtimeClock.ascx" TagName="mod_realtimeClock" TagPrefix="uc1" %> <%@ Register Src="~/WebUserControls/mod_sequencerStatiJS.ascx" TagPrefix="uc1" TagName="mod_sequencerStatiJS" %> +<%@ Register Src="~/WebUserControls/mod_sequencerStati.ascx" TagPrefix="uc1" TagName="mod_sequencerStati" %> + @@ -111,5 +113,9 @@ var scatter = new vis.Graph2d(container, dataset, options); } - + <%-- +
+
+
--%> +
diff --git a/MP-Site/test.aspx.cs b/MP-Site/test.aspx.cs index 14ee238e..3db432e7 100644 --- a/MP-Site/test.aspx.cs +++ b/MP-Site/test.aspx.cs @@ -1,12 +1,47 @@ -using System; +using SteamWare; +using System; +using System.Diagnostics; namespace MoonPro { - public partial class test : System.Web.UI.Page + public partial class test : System.Web.UI.Page + { + public resoconti _resoconti; + protected void Page_Load(object sender, EventArgs e) { - protected void Page_Load(object sender, EventArgs e) - { - - } +#if false + Stopwatch stopwatch = new Stopwatch(); + logger.lg.scriviLog("inizio chart"); + stopwatch.Restart(); + _resoconti = new resoconti(); + mod_sequencerStati.larghezza = memLayer.ML.IntSessionObj("WindowWidth") - 100; + mod_sequencerStati.graphHeight = memLayer.ML.confReadInt("seq_height"); + mod_sequencerStati.numSplit = memLayer.ML.confReadInt("seq_numSpl"); + try + { + mod_sequencerStati.datiSequencer = _resoconti.sequenzaDati(mod_sequencerStati.identificativo, intervalloAnalisi); + logger.lg.scriviLog(string.Format("Letta tabella: {0} rec, {1} msec", mod_sequencerStati.datiSequencer.serieDati.Count, stopwatch.ElapsedMilliseconds)); + mod_sequencerStati.doUpdate(); + mod_sequencerStati.Visible = true; + logger.lg.scriviLog(string.Format("Creato grafico {0} msec", stopwatch.ElapsedMilliseconds)); + } + catch + { + mod_sequencerStati.Visible = false; + } +#endif } + public intervalloDate intervalloAnalisi + { + get + { + intervalloDate answ = new intervalloDate() + { + inizio = Convert.ToDateTime("2018-05-1") + , fine = Convert.ToDateTime("2018-05-30") + }; + return answ; + } + } + } } diff --git a/MapoDb/resoconti.cs b/MapoDb/resoconti.cs index 452ce36e..6bd98a69 100644 --- a/MapoDb/resoconti.cs +++ b/MapoDb/resoconti.cs @@ -2,6 +2,7 @@ using MapoDb; using SteamWare; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; /// @@ -27,6 +28,24 @@ public struct objSequencer /// public DataLayer_generic.serieDatiDataTable serieDati; } +/// +/// oggetto dati per grafico sequencer +/// +public struct jsonVisJS +{ + /// + /// idx macchina + /// + public string idxMacchina; + /// + /// intervallo analisi + /// + public intervalloDate intervallo; + /// + /// serie dei dati già elaborati come json stream + /// + public string jsonDati; +} /// /// oggetto dati per grafico TempiCiclo @@ -45,8 +64,8 @@ public struct objTempiCiclo } //public struct intervallo //{ -// public DateTime inizio; -// public DateTime fine; +// public DateTime inizio; +// public DateTime fine; //} public class resoconti { @@ -80,7 +99,7 @@ public class resoconti { //if (_StatoMacchine == null) //{ - // _StatoMacchine = taStatoMacchine.GetData(); + // _StatoMacchine = taStatoMacchine.GetData(); //} if (!memLayer.ML.isInCacheObject("StatoMacchine")) { @@ -545,14 +564,18 @@ public class resoconti /// public List sequenzaDatiVisJS(string idxMacchina, intervalloDate _intervallo, int numSplit) { + List sequenza = new List(); + Stopwatch stopwatch = new Stopwatch(); DateTime start = DateTime.Now; // leggo i dati e costituisco una collezione... - List sequenza = new List(); int i = 0; if (idxMacchina != null && idxMacchina != "") { + logger.lg.scriviLog("inizio WS"); + stopwatch.Restart(); // seleziono i dati... DS_applicazione.DiarioDiBordoDataTable tabSeq = taDiarioDiBordo.GetSequenza(idxMacchina, _intervallo.inizio, _intervallo.fine); + logger.lg.scriviLog(string.Format("Letta tabella: {0} rec, {1} msec", tabSeq.Rows.Count, stopwatch.ElapsedMilliseconds)); // se ho troppi dati faccio la riduzione dei dati, MAX numSplit... if (tabSeq.Rows.Count > numSplit) @@ -560,11 +583,12 @@ public class resoconti double sogliaMin = _intervallo.fine.Subtract(_intervallo.inizio).TotalMinutes / numSplit; tabSeq = riduciSeq(tabSeq, sogliaMin); } + logger.lg.scriviLog(string.Format("Riduzione seq fatta: {0} rec, {1} msec", tabSeq.Count, stopwatch.ElapsedMilliseconds)); // ora converto in oggetto definitivo x vis.js sequenza = tabSeq.AsEnumerable().Select(riga => new visjsDsItem { //id = i, - //content = riga.CodArticolo, + content = "",//riga.CodArticolo, start = riga.InizioStato.ToString("yyyy-MM-dd HH:mm:ss"), end = riga.FineStato.ToString("yyyy-MM-dd HH:mm:ss"), group = "1", // per mostrare multi macchine @@ -574,23 +598,23 @@ public class resoconti foreach (var item in sequenza) { - item.content = i.ToString(); + //item.content = i.ToString(); item.id = i; i++; } + logger.lg.scriviLog(string.Format("Conversione oggetto eseguita: {0} rec, {1} msec", sequenza.Count, stopwatch.ElapsedMilliseconds)); #if false - // faccio trim x primo evento... - if (_sequenza[0].start < _intervallo.inizio) - { - _sequenza.serieDati[0].valore -= _intervallo.inizio.Subtract(_sequenza.serieDati[0].timeData).TotalMinutes; - _sequenza.serieDati[0].timeData = _intervallo.inizio; - } - //...e ultimo evento... - int numValori = _sequenza.serieDati.Count - 1; - _sequenza.serieDati[numValori].valore = _intervallo.fine.Subtract(_sequenza.serieDati[numValori].timeData).TotalMinutes; + // faccio trim x primo evento... + if (_sequenza[0].start < _intervallo.inizio) + { + _sequenza.serieDati[0].valore -= _intervallo.inizio.Subtract(_sequenza.serieDati[0].timeData).TotalMinutes; + _sequenza.serieDati[0].timeData = _intervallo.inizio; + } + //...e ultimo evento... + int numValori = _sequenza.serieDati.Count - 1; + _sequenza.serieDati[numValori].valore = _intervallo.fine.Subtract(_sequenza.serieDati[numValori].timeData).TotalMinutes; #endif } - if (sequenza.Count > numSplit) sequenza.RemoveRange(0, sequenza.Count - numSplit); return sequenza; } /// @@ -684,7 +708,7 @@ public class resoconti //riga.InizioStato = _t_0; copia.ImportRow(riga); // modifico inizio stato... - ((DS_applicazione.DiarioDiBordoRow)copia.Rows[copia.Rows.Count -1]).InizioStato = _t_0; + ((DS_applicazione.DiarioDiBordoRow)copia.Rows[copia.Rows.Count - 1]).InizioStato = _t_0; // reset dei contatori... valRigaCum = 0.0;