diff --git a/MP-SITE/.editorconfig b/MP-SITE/.editorconfig new file mode 100644 index 00000000..567b335b --- /dev/null +++ b/MP-SITE/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] + +# CA1707: Gli identificatori non devono contenere caratteri di sottolineatura +dotnet_diagnostic.CA1707.severity = none diff --git a/MP-Site/MP-Site.csproj b/MP-Site/MP-Site.csproj index 63452d0d..e2b06468 100644 --- a/MP-Site/MP-Site.csproj +++ b/MP-Site/MP-Site.csproj @@ -254,6 +254,7 @@ + diff --git a/MP-Site/test.aspx b/MP-Site/test.aspx index 31cc5833..44eb10d8 100644 --- a/MP-Site/test.aspx +++ b/MP-Site/test.aspx @@ -117,23 +117,29 @@
- Data riferimento +

Data Ingestion

+
+
+ + +
+
+ + +
+
+ move MSSqlDb --> MongoDb + +
+
- -
-
- move MSSqlDb --> MongoDb -
-
-
-
-

Test SqlServer

+

Test SqlServer

Read SqlDB
-

Test MongoDb

+

Test MongoDb

Read MongoDB
diff --git a/MP-Site/test.aspx.cs b/MP-Site/test.aspx.cs index 46ae25b2..c1239b48 100644 --- a/MP-Site/test.aspx.cs +++ b/MP-Site/test.aspx.cs @@ -1,7 +1,5 @@ using MapoDb; -using SteamWare; using System; -using System.Collections.Generic; namespace MP_SITE { @@ -20,17 +18,21 @@ namespace MP_SITE private void setupData() { txtData.Text = DateTime.Now.AddDays(-90).ToString("yyy-MM-dd"); + txtNumDays.Text = "7"; } protected void lbtConvertData_Click(object sender, EventArgs e) { // effettuo lettura dati FluxLog DateTime dataRif = DateTime.Now; - DateTime.TryParse(txtData.Text, out dataRif); - FluxArchive.man.trasferData(dataRif); - // converto + int numDays = 7; + bool fatto = false; + fatto = DateTime.TryParse(txtData.Text, out dataRif); + fatto = int.TryParse(txtNumDays.Text, out numDays); - // salvo su mongoDB! + var esito = FluxArchive.man.trasferData(dataRif, numDays); + // registro tempo! + lblOutConvers.Text = esito.message; } } } diff --git a/MP-Site/test.aspx.designer.cs b/MP-Site/test.aspx.designer.cs index 4dd52ad7..1ce09519 100644 --- a/MP-Site/test.aspx.designer.cs +++ b/MP-Site/test.aspx.designer.cs @@ -23,6 +23,15 @@ namespace MP_SITE /// protected global::System.Web.UI.WebControls.TextBox txtData; + /// + /// Controllo txtNumDays. + /// + /// + /// Campo generato automaticamente. + /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. + /// + protected global::System.Web.UI.WebControls.TextBox txtNumDays; + /// /// Controllo lbtConvertData. /// @@ -32,6 +41,15 @@ namespace MP_SITE /// protected global::System.Web.UI.WebControls.LinkButton lbtConvertData; + /// + /// Controllo lblOutConvers. + /// + /// + /// Campo generato automaticamente. + /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. + /// + protected global::System.Web.UI.WebControls.Label lblOutConvers; + /// /// Controllo lbtReadDb. /// diff --git a/MapoDb/FluxArchive.cs b/MapoDb/FluxArchive.cs index 43126867..e08f2bc5 100644 --- a/MapoDb/FluxArchive.cs +++ b/MapoDb/FluxArchive.cs @@ -1,14 +1,42 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using MapoSDK; -using MongoDB.Bson; +using MapoSDK; using MongoDB.Driver; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; namespace MapoDb { + /************************************************************** + * Classe gestione FluxLog + * + * automaticamente gestisce dati su SqlServer / Redis (+recenti) + * oppure su MongoDB (+ vecchi) + * + * rif x mongoDB + * + * rif x windows setup (abilitazione firewall, remote access, auth...) + * + * https://docs.mongodb.com/manual/tutorial/configure-windows-netsh-firewall/ + * https://www.configserverfirewall.com/mongodb/mongodb-allow-remote-connections/ + * https://www.shellhacks.com/mongodb-allow-remote-access/ + * https://stackoverflow.com/questions/3891657/setup-mongodb-on-windows-server-2008 + * + * (conf file in C:\Program Files\MongoDB\Server\4.2\bin) + * + * + * test rilettura: https://stackoverflow.com/questions/2943222/find-objects-between-two-dates-mongodb + * https://studio3t.com/knowledge-base/articles/mongodb-find-method/ + * https://github.com/mongodb/mongo-csharp-driver + * http://www.binaryheap.com/tech/time-series-data-in-mongodb/ + * https://www.codeproject.com/Tips/760099/Resampling-and-merging-time-series-data-using-LINQ + * https://docs.microsoft.com/it-it/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-3.0&tabs=visual-studio + * https://www.codementor.io/pmbanugo/working-with-mongodb-in-net-1-basics-g4frivcvz + * https://www.codementor.io/pmbanugo/working-with-mongodb-in-net-2-retrieving-mrlbeanm5 + * https://www.codementor.io/pmbanugo/working-with-mongodb-in-net-part-3-skip-sort-limit-and-projections-oqfwncyka + *************************************************************/ + + /// /// Classe che si occupa di gestire i dati di flusso /// - i dati inizialmente sono in REDIS e DB quando accumulati da IOB @@ -16,7 +44,8 @@ namespace MapoDb /// public class FluxArchive { - string mdbConnString = "mongodb://localhost:27017"; + string mdbConnString = "mongodb://W2019-MONGODB:27017"; + //string mdbConnString = "mongodb://localhost:27017"; MongoClient client; IMongoDatabase database; public FluxArchive() @@ -30,9 +59,13 @@ namespace MapoDb /// /// Effettua il trasferimento dati da SqlDB a MongoDB /// - /// - public void trasferData(DateTime data2transfer) + /// data di aprtenza + /// num giorni da trasferire + public exeResult trasferData(DateTime data2transfer, int numDays) { + exeResult answ = new exeResult(); + StringBuilder sb = new StringBuilder(); + Stopwatch sw = new Stopwatch(); // Oggetto dove verserò i dati List listaRecords = new List(); tsGrouped currRecord = null; @@ -44,7 +77,11 @@ namespace MapoDb string currFlux = ""; string currMacc = ""; // leggo da DB i records... - var tabDati = DataLayer.obj.taFL.getFilt("", data2transfer, data2transfer.AddDays(7), true); + sw.Start(); + sb.AppendLine($"Inizio processing periodo {data2transfer} --> {data2transfer.AddDays(numDays)}"); + var tabDati = DataLayer.obj.taFL.getFilt("", data2transfer, data2transfer.AddDays(numDays), true); + sb.AppendLine($"Effettuata lettura DB: {tabDati.Count} record in {sw.ElapsedMilliseconds / 1000} sec"); + sw.Restart(); // ora converto... // faccio ciclo su 24 h... for (int i = 0; i < 24; i++) @@ -94,20 +131,18 @@ namespace MapoDb { listaRecords.Add(currRecord); } + sb.AppendLine($"Generata collezione di {listaRecords.Count} record in {sw.ElapsedMilliseconds / 1000} sec"); + sw.Restart(); // oggetto gestione dati ts raggruppati var collection = database.GetCollection("FluxLog"); // salvo in blocco collection.InsertMany(listaRecords); + sb.AppendLine($"Salvata su MongoDb collezione di {listaRecords.Count} record in {sw.ElapsedMilliseconds / 1000} sec"); - // test rilettura: https://stackoverflow.com/questions/2943222/find-objects-between-two-dates-mongodb - // https://studio3t.com/knowledge-base/articles/mongodb-find-method/ - // https://github.com/mongodb/mongo-csharp-driver - // http://www.binaryheap.com/tech/time-series-data-in-mongodb/ - // https://www.codeproject.com/Tips/760099/Resampling-and-merging-time-series-data-using-LINQ - // https://docs.microsoft.com/it-it/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-3.0&tabs=visual-studio - // https://www.codementor.io/pmbanugo/working-with-mongodb-in-net-1-basics-g4frivcvz - // https://www.codementor.io/pmbanugo/working-with-mongodb-in-net-2-retrieving-mrlbeanm5 - // https://www.codementor.io/pmbanugo/working-with-mongodb-in-net-part-3-skip-sort-limit-and-projections-oqfwncyka + // restituisco messaggio... + answ.esito = esitoExec.ok; + answ.message = sb.ToString(); + return answ; } } } diff --git a/MapoSDK/Enums.cs b/MapoSDK/Enums.cs index 97f46058..27b3f01b 100644 --- a/MapoSDK/Enums.cs +++ b/MapoSDK/Enums.cs @@ -59,6 +59,15 @@ week, month } + /// + /// Tipo di esito (generico) + /// + public enum esitoExec + { + undone, + ok, + error + } /// /// Elenco task ammessi (x IOB-WIN da eseguire...) diff --git a/MapoSDK/Objects.cs b/MapoSDK/Objects.cs index b1010e6f..107606a8 100644 --- a/MapoSDK/Objects.cs +++ b/MapoSDK/Objects.cs @@ -316,6 +316,21 @@ namespace MapoSDK /// public List samples { get; set; } } + /// + /// Classe x inviare messaggi di tipo esecuzione di una generica esecuzione + /// + public class exeResult + { + /// + /// Esito del risultato + /// + [JsonConverter(typeof(StringEnumConverter))] + public esitoExec esito { get; set; } = esitoExec.undone; + /// + /// Messaggio associato + /// + public string message { get; set; } = ""; + } #endregion