Abbozzata anche gest statistiche, RIPORTO IN DEV!!!!

This commit is contained in:
Samuele E. Locatelli
2019-11-18 10:31:23 +01:00
parent 91eb5c82b5
commit f12aaa80a5
2 changed files with 101 additions and 28 deletions
+99 -18
View File
@@ -67,19 +67,30 @@ namespace MapoDb
StringBuilder sb = new StringBuilder();
Stopwatch sw = new Stopwatch();
DateTime tStamp;
// oggetto gestione dati ts raggruppati
var collRawData = database.GetCollection<rawData>("FluxLogRawData");
// valutare eventuale eliminazione records x TUTTO il periodo...
string startDateStr = data2transfer.ToString("yyyyMMdd");
string endDateStr = data2transfer.AddDays(numDays).ToString("yyyyMMdd");
var collHistData = database.GetCollection<histData>("FluxLogHistData");
var builderRaw = Builders<rawData>.Filter;
var builderHist = Builders<histData>.Filter;
string currDateStr = "";
int startYMD = 0;
int endYMD = 0;
int currYMD = 0;
// Effettuo eliminazione records x TUTTO il periodo dei dati RAW e stats...
string startDateStr = data2transfer.ToString("yyyyMMdd");
string endDateStr = data2transfer.AddDays(numDays).ToString("yyyyMMdd");
int.TryParse(startDateStr, out startYMD);
int.TryParse(endDateStr, out endYMD);
var builder = Builders<rawData>.Filter;
var filtExisting = builder.Gte(u => u.dateYMD, startYMD) & builder.Lte(u => u.dateYMD, endYMD);
collRawData.DeleteMany(filtExisting);
// filtri e delete
var filtRawOld = builderRaw.Gte(u => u.dateYMD, startYMD) & builderRaw.Lte(u => u.dateYMD, endYMD);
collRawData.DeleteMany(filtRawOld);
var filtHistOld = builderHist.Gte(u => u.dateYMD, startYMD) & builderHist.Lte(u => u.dateYMD, endYMD);
collHistData.DeleteMany(filtHistOld);
// faccio ciclo su OGNI macchina
sw.Start();
var elencoMacchine = DataLayer.obj.taMacchine.GetData();
foreach (var macchina in elencoMacchine)
{
@@ -88,8 +99,9 @@ namespace MapoDb
for (int i = 0; i < numDays; i++)
{
tStamp = data2transfer.AddDays(i);
currDateStr = tStamp.ToString("yyyyMMdd");
int.TryParse(currDateStr, out currYMD);
// leggo da DB i records...
sw.Start();
DS_applicazione.FluxLogDataTable tabDati = DataLayer.obj.taFL.getFiltOrd(macchina.IdxMacchina, tStamp, tStamp.AddDays(1), true);
// solo se ho dati...
if (tabDati.Count > 0)
@@ -99,22 +111,16 @@ namespace MapoDb
// salvo in blocco
if (risultato.Count > 0)
{
try
{
collRawData.InsertMany(risultato);
// calcolo la NUOVA statistica giornaliera...
var resStats = getStats(risultato);
// salvo!
collHistData.InsertOne(resStats);
}
catch
catch (Exception exc)
{ }
#if false
var builder = Builders<rawData>.Filter;
var existing = builder.Eq(u => u.varName, macchina.IdxMacchina);
#endif
#if false
var options = new UpdateOptions { IsUpsert = true };
var empty = builder.Empty;
collRawData.UpdateMany(empty, risultato, options);
#endif
}
sb.AppendLine($"DB {tStamp}: {tabDati.Count}rec | MongoDb {risultato.Count} RAW DOC in {sw.ElapsedMilliseconds / 1000} sec");
}
@@ -185,9 +191,84 @@ namespace MapoDb
// aggiungo ultimo... salvo il VECCHIO record...
if (currRecord != null)
{
currRecord.samples = valori;
listaRecords.Add(currRecord);
}
return listaRecords;
}
/// <summary>
/// Calcola statistiche per i dati giornalieri processati
/// </summary>
/// <param name="datiGiornalieri"></param>
/// <returns></returns>
protected histData getStats(List<rawData> datiGiornalieri)
{
// init oggetti
histData currHist;
varStats currStat;
List<varStats> statistiche = new List<varStats>();
int sampleNumRec = 1;
float sampleTotal = 0;
float sampleMinVal = 0;
float sampleMaxVal = 0;
float sampleAvg = 0;
float currVal = 0;
bool fatto = false;
string macName = "";
int dateYMD = 0;
// ciclo x ogni variabile
foreach (var item in datiGiornalieri)
{
if (item.samples != null)
{
if (string.IsNullOrEmpty(macName))
{
macName = item.macName;
dateYMD = item.dateYMD;
}
// reset vabiabili
sampleTotal = 0;
sampleMinVal = 0;
sampleMaxVal = 0;
sampleAvg = 0;
// calcolo statistiche
sampleNumRec = item.samples.Count;
foreach (var sample in item.samples)
{
fatto = float.TryParse(sample.value, out currVal);
if (fatto)
{
sampleTotal += currVal;
sampleMaxVal = sampleMaxVal < currVal ? currVal : sampleMaxVal;
sampleMinVal = sampleMinVal > currVal ? currVal : sampleMinVal;
}
}
if (sampleNumRec > 0)
{
sampleAvg = sampleTotal / sampleNumRec;
}
// salvo statistica
currStat = new varStats()
{
varName = item.varName,
numRec = sampleNumRec,
avg = sampleAvg,
min = sampleMinVal,
max = sampleMaxVal
};
statistiche.Add(currStat);
}
}
currHist = new histData()
{
macName = macName,
varType = plcDataType.Real,
dateYMD = dateYMD,
period = timeWindow.day,
stats = statistiche
};
// restituisco...
return currHist;
}
}
}
+2 -10
View File
@@ -328,13 +328,9 @@ namespace MapoSDK
public class varStats
{
/// <summary>
/// Data-Ora riferimento campione
/// Nome della Variabile tracciata
/// </summary>
public DateTime timeStamp { get; set; } = DateTime.Now;
/// <summary>
/// Valore in formato stringa
/// </summary>
public string value { get; set; } = "";
public string varName { get; set; } = "";
/// <summary>
/// Num record
/// </summary>
@@ -377,10 +373,6 @@ namespace MapoSDK
/// </summary>
public string macName { get; set; } = "";
/// <summary>
/// Nome della Variabile tracciata
/// </summary>
public string varName { get; set; } = "";
/// <summary>
/// Tipo di valore registrato (internamente è string)
/// </summary>
//[JsonConverter(typeof(StringEnumConverter))]