|
@@ -82,54 +82,6 @@ public class ConnectionLogdbService : IConnectionLogdbService
|
|
//_ = InsertWithDapper(log);
|
|
//_ = InsertWithDapper(log);
|
|
}
|
|
}
|
|
|
|
|
|
- private async Task InsertWithDapper(MachineLog log)
|
|
|
|
- {
|
|
|
|
- var watch = Stopwatch.StartNew();
|
|
|
|
- long t0, t1, t2, t3;
|
|
|
|
- var workTime = DateTime.UtcNow;
|
|
|
|
- if (!await GetTableExist(workTime))
|
|
|
|
- {
|
|
|
|
- t0 = watch.ElapsedMilliseconds;
|
|
|
|
- await WriteMachineLogEF(log);
|
|
|
|
- watch.Stop();
|
|
|
|
- t1 = watch.ElapsedMilliseconds;
|
|
|
|
- if (t1 > 500)
|
|
|
|
- {
|
|
|
|
- logger.LogWarning("ConnectionLog InsertWithDapper {0}/{1}", t0, t1);
|
|
|
|
- }
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- t0 = watch.ElapsedMilliseconds;
|
|
|
|
- var tableName = GetTableName(workTime);
|
|
|
|
- string command = $"""
|
|
|
|
- INSERT INTO {tableName} (CreatedOn, ChargeBoxId, MessageType, Data, Msg, IsSent, EVSEEndPoint, Session)
|
|
|
|
- VALUES (@CreatedOn, @ChargeBoxId, @MessageType, @Data, @Msg, @IsSent, @EVSEEndPoint, @Session);
|
|
|
|
- """;
|
|
|
|
-
|
|
|
|
- var parameters = new DynamicParameters();
|
|
|
|
- parameters.Add("CreatedOn", workTime, DbType.DateTime);
|
|
|
|
- parameters.Add("ChargeBoxId", log.clientData.ChargeBoxId == null ? "unknown" : log.clientData.ChargeBoxId.Replace("'", "''"), DbType.String, size: 50); ;
|
|
|
|
- parameters.Add("MessageType", log.messageType.Replace("'", "''"), DbType.String, size: 50);
|
|
|
|
- parameters.Add("Data", log.data.Replace("'", "''"), DbType.String);
|
|
|
|
- parameters.Add("Msg", log.errorMsg.Replace("'", "''"), DbType.String, size: 200);
|
|
|
|
- parameters.Add("IsSent", log.isSent, DbType.Boolean);
|
|
|
|
- parameters.Add("EVSEEndPoint", log.clientData.Endpoint == null ? "123" : log.clientData.Endpoint.ToString(), DbType.String, size: 25);
|
|
|
|
- parameters.Add("Session", log.clientData.SessionID == null ? "123" : log.clientData.SessionID, DbType.String, size: 36);
|
|
|
|
-
|
|
|
|
- t1 = watch.ElapsedMilliseconds;
|
|
|
|
- using var sqlConnection = await sqlConnectionFactory.CreateAsync();
|
|
|
|
- t2 = watch.ElapsedMilliseconds;
|
|
|
|
- await sqlConnection.ExecuteAsync(command, parameters);
|
|
|
|
-
|
|
|
|
- watch.Stop();
|
|
|
|
- t3 = watch.ElapsedMilliseconds;
|
|
|
|
- if (t3 > 1000)
|
|
|
|
- {
|
|
|
|
- logger.LogWarning("ConnectionLog Dapper {0}/{1}/{2}/{3}", t0, t1, t2, t3);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
private void InitInsertConnectonLogHandler()
|
|
private void InitInsertConnectonLogHandler()
|
|
{
|
|
{
|
|
if (insertConnectonLogHandler is not null)
|
|
if (insertConnectonLogHandler is not null)
|
|
@@ -166,9 +118,9 @@ public class ConnectionLogdbService : IConnectionLogdbService
|
|
new SqlParameter("MessageType", SqlDbType.NVarChar , 50){ Value = log.messageType.Replace("'","''")},
|
|
new SqlParameter("MessageType", SqlDbType.NVarChar , 50){ Value = log.messageType.Replace("'","''")},
|
|
new SqlParameter("Data", SqlDbType.NVarChar, -1) { Value = log.data.Replace("'", "''") },
|
|
new SqlParameter("Data", SqlDbType.NVarChar, -1) { Value = log.data.Replace("'", "''") },
|
|
new SqlParameter("Msg", SqlDbType.NVarChar, 200) { Value = log.errorMsg.Replace("'", "''") },
|
|
new SqlParameter("Msg", SqlDbType.NVarChar, 200) { Value = log.errorMsg.Replace("'", "''") },
|
|
- new SqlParameter("IsSent", SqlDbType.Bit) { Value = log.isSent },
|
|
|
|
- new SqlParameter("EVSEEndPoint", SqlDbType.NVarChar, 25) { Value = log.clientData.Endpoint == null ? "123" : log.clientData.Endpoint.ToString() },
|
|
|
|
- new SqlParameter("Session", SqlDbType.NVarChar, 36) { Value = log.clientData.SessionID == null ? "123" : log.clientData.SessionID }
|
|
|
|
|
|
+ new SqlParameter("IsSent", SqlDbType.Bit) { Value = log.isSent },
|
|
|
|
+ new SqlParameter("EVSEEndPoint", SqlDbType.NVarChar, 50) { Value = log.clientData.Endpoint == null ? "123" : log.clientData.Endpoint.ToString() },
|
|
|
|
+ new SqlParameter("Session", SqlDbType.NVarChar, 36) { Value = log.clientData.SessionID == null ? "123" : log.clientData.SessionID }
|
|
};
|
|
};
|
|
using (var db = await connectionLogdbContextFactory.CreateDbContextAsync())
|
|
using (var db = await connectionLogdbContextFactory.CreateDbContextAsync())
|
|
{
|
|
{
|
|
@@ -241,7 +193,7 @@ public class ConnectionLogdbService : IConnectionLogdbService
|
|
parameters.Add("Data", log.data.Replace("'", "''"), DbType.String);
|
|
parameters.Add("Data", log.data.Replace("'", "''"), DbType.String);
|
|
parameters.Add("Msg", log.errorMsg.Replace("'", "''"), DbType.String, size: 200);
|
|
parameters.Add("Msg", log.errorMsg.Replace("'", "''"), DbType.String, size: 200);
|
|
parameters.Add("IsSent", log.isSent, DbType.Boolean);
|
|
parameters.Add("IsSent", log.isSent, DbType.Boolean);
|
|
- parameters.Add("EVSEEndPoint", log.clientData.Endpoint == null ? "123" : log.clientData.Endpoint.ToString(), DbType.String, size: 25);
|
|
|
|
|
|
+ parameters.Add("EVSEEndPoint", log.clientData.Endpoint == null ? "123" : log.clientData.Endpoint.ToString(), DbType.String, size: 50);
|
|
parameters.Add("Session", log.clientData.SessionID == null ? "123" : log.clientData.SessionID, DbType.String, size: 36);
|
|
parameters.Add("Session", log.clientData.SessionID == null ? "123" : log.clientData.SessionID, DbType.String, size: 36);
|
|
parameters.Add("HourIndex", workTime.Hour, DbType.Int32);
|
|
parameters.Add("HourIndex", workTime.Hour, DbType.Int32);
|
|
|
|
|
|
@@ -270,77 +222,6 @@ public class ConnectionLogdbService : IConnectionLogdbService
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- private async Task BulkInsertWithBulkCopy(IEnumerable<MachineLog> parms)
|
|
|
|
- {
|
|
|
|
- var watcher = Stopwatch.StartNew();
|
|
|
|
- long t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0;
|
|
|
|
-
|
|
|
|
- var parmsList = parms.ToList();
|
|
|
|
- if (parmsList.Count == 0)
|
|
|
|
- {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- var workTime = DateTime.UtcNow;
|
|
|
|
- if (!await GetTableExist(workTime))
|
|
|
|
- {
|
|
|
|
- var candidate = parmsList.First();
|
|
|
|
- await WriteMachineLogEF(candidate);
|
|
|
|
- parmsList.Remove(candidate);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- t0 = watcher.ElapsedMilliseconds;
|
|
|
|
- var table = new DataTable();
|
|
|
|
- table.Columns.Add("CreatedOn");
|
|
|
|
- table.Columns.Add("ChargeBoxId");
|
|
|
|
- table.Columns.Add("MessageType");
|
|
|
|
- table.Columns.Add("Data");
|
|
|
|
- table.Columns.Add("Msg");
|
|
|
|
- table.Columns.Add("IsSent");
|
|
|
|
- table.Columns.Add("EVSEEndPoint");
|
|
|
|
- table.Columns.Add("Session");
|
|
|
|
-
|
|
|
|
- foreach (var param in parmsList)
|
|
|
|
- {
|
|
|
|
- var row = table.NewRow();
|
|
|
|
- row["CreatedOn"] = workTime;
|
|
|
|
- row["ChargeBoxId"] = param.clientData.ChargeBoxId == null ? "unknown" : param.clientData.ChargeBoxId.Replace("'", "''");
|
|
|
|
- row["MessageType"] = param.messageType.Replace("'", "''");
|
|
|
|
- row["Data"] = param.data.Replace("'", "''");
|
|
|
|
- row["Msg"] = param.errorMsg.Replace("'", "''");
|
|
|
|
- row["IsSent"] = param.isSent;
|
|
|
|
- row["EVSEEndPoint"] = param.clientData.Endpoint == null ? "123" : param.clientData.Endpoint.ToString();
|
|
|
|
- row["Session"] = param.clientData.SessionID == null ? "123" : param.clientData.SessionID;
|
|
|
|
-
|
|
|
|
- table.Rows.Add(row);
|
|
|
|
- }
|
|
|
|
- t1 = watcher.ElapsedMilliseconds;
|
|
|
|
- using SqlConnection sqlConnection = await sqlConnectionFactory.CreateAsync();
|
|
|
|
- using SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlConnection);
|
|
|
|
- t2 = watcher.ElapsedMilliseconds;
|
|
|
|
- sqlBulkCopy.BatchSize = parmsList.Count();
|
|
|
|
- sqlBulkCopy.DestinationTableName = GetTableName(workTime);
|
|
|
|
-
|
|
|
|
- sqlBulkCopy.ColumnMappings.Add("CreatedOn", "CreatedOn");
|
|
|
|
- sqlBulkCopy.ColumnMappings.Add("ChargeBoxId", "ChargeBoxId");
|
|
|
|
- sqlBulkCopy.ColumnMappings.Add("MessageType", "MessageType");
|
|
|
|
- sqlBulkCopy.ColumnMappings.Add("Data", "Data");
|
|
|
|
- sqlBulkCopy.ColumnMappings.Add("Msg", "Msg");
|
|
|
|
- sqlBulkCopy.ColumnMappings.Add("IsSent", "IsSent");
|
|
|
|
- sqlBulkCopy.ColumnMappings.Add("EVSEEndPoint", "EVSEEndPoint");
|
|
|
|
- sqlBulkCopy.ColumnMappings.Add("Session", "Session");
|
|
|
|
- t3 = watcher.ElapsedMilliseconds;
|
|
|
|
- await sqlBulkCopy.WriteToServerAsync(table);
|
|
|
|
-
|
|
|
|
- watcher.Stop();
|
|
|
|
- t4 = watcher.ElapsedMilliseconds;
|
|
|
|
-
|
|
|
|
- if (t4 > 500)
|
|
|
|
- {
|
|
|
|
- logger.LogWarning("ConnectionLog BulkInsertWithBulkCopy Slow {0}/{1}/{2}/{3}/{4}/{5}", t0, t1, t2, t3, t4, parms.Count());
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
private async ValueTask<bool> GetTableExist(DateTime tableDateTime)
|
|
private async ValueTask<bool> GetTableExist(DateTime tableDateTime)
|
|
{
|
|
{
|
|
var tableName = GetTableName(tableDateTime);
|
|
var tableName = GetTableName(tableDateTime);
|