testing tra grafico e metodo JS + cache in redis x json calcolato

This commit is contained in:
Samuele E. Locatelli
2018-06-04 23:40:10 +02:00
parent d21bf9902b
commit 752a334dfb
6 changed files with 145 additions and 42 deletions
+52 -17
View File
@@ -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<visjsDsItem> 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<visjsDsItem> 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)]
+3
View File
@@ -14,6 +14,9 @@
<add key="maxAgeAppConf_min" value="10" />
<add key="IOB_RedEnab" value="true" />
<add key="RedEnab" value="true" />
<!--valore durata cache x seq stati in minuti-->
<add key="seqCacheDurMin" value="1" />
<!--<add key="seqCacheDurMin" value="1440" />-->
<!--default valori-->
<add key="appName" value="MoonPro.18" />
<add key="seq_gg" value="1" />
@@ -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 = [
{
+7 -1
View File
@@ -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" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<uc1:mod_realtimeClock ID="mod_realtimeClock1" runat="server" />
@@ -111,5 +113,9 @@
var scatter = new vis.Graph2d(container, dataset, options);
}
</script>
<uc1:mod_sequencerStatiJS runat="server" ID="mod_sequencerStatiJS" DataFrom="2018-05-23" DataTo="2018-05-30" idxMacchina="3001" NumSplit="5000" />
<%--<uc1:mod_sequencerStati runat="server" ID="mod_sequencerStati" identificativo="3001" intervallo='<%# intervalloAnalisi %>' graphHeight="32" />
<br />
<hr />
<br />--%>
<uc1:mod_sequencerStatiJS runat="server" ID="mod_sequencerStatiJS" DataFrom="2018-05-01" DataTo="2018-05-30" idxMacchina="3001" NumSplit="5000" />
</asp:Content>
+41 -6
View File
@@ -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;
}
}
}
}
+41 -17
View File
@@ -2,6 +2,7 @@ using MapoDb;
using SteamWare;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
/// <summary>
@@ -27,6 +28,24 @@ public struct objSequencer
/// </summary>
public DataLayer_generic.serieDatiDataTable serieDati;
}
/// <summary>
/// oggetto dati per grafico sequencer
/// </summary>
public struct jsonVisJS
{
/// <summary>
/// idx macchina
/// </summary>
public string idxMacchina;
/// <summary>
/// intervallo analisi
/// </summary>
public intervalloDate intervallo;
/// <summary>
/// serie dei dati già elaborati come json stream
/// </summary>
public string jsonDati;
}
/// <summary>
/// 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
/// <returns></returns>
public List<visjsDsItem> sequenzaDatiVisJS(string idxMacchina, intervalloDate _intervallo, int numSplit)
{
List<visjsDsItem> sequenza = new List<visjsDsItem>();
Stopwatch stopwatch = new Stopwatch();
DateTime start = DateTime.Now;
// leggo i dati e costituisco una collezione...
List<visjsDsItem> sequenza = new List<visjsDsItem>();
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;
}
/// <summary>
@@ -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;