testing tra grafico e metodo JS + cache in redis x json calcolato
This commit is contained in:
+52
-17
@@ -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)]
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user