feat(aihitLoader): добавлено зона "ОБЩЕЕ", данные отправляются сразу в очередь после получения от хп, чтобы не копить в памяти данные.
This commit is contained in:
@@ -1,8 +1,20 @@
|
|||||||
{
|
{
|
||||||
"Logging": {
|
"Serilog": {
|
||||||
"LogLevel": {
|
"MinimumLevel": {
|
||||||
"Default": "Information",
|
"Default": "Debug",
|
||||||
"Microsoft.Hosting.Lifetime": "Information"
|
"Override": {
|
||||||
|
"Microsoft": "Debug",
|
||||||
|
"Microsoft.Hosting.Lifetime": "Debug"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"WriteTo": [
|
||||||
|
{
|
||||||
|
"Name": "File",
|
||||||
|
"Args": {
|
||||||
|
"path": "log/log-.txt",
|
||||||
|
"rollingInterval": "Day"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,14 @@
|
|||||||
"ConnectionStrings": {
|
"ConnectionStrings": {
|
||||||
"AihitConnection": "Data Source=10.248.19.97; Initial Catalog=mao2;User ID=awhit-ipp-parr;pwd=ET3h$9y1LH#D;TrustServerCertificate=true;"
|
"AihitConnection": "Data Source=10.248.19.97; Initial Catalog=mao2;User ID=awhit-ipp-parr;pwd=ET3h$9y1LH#D;TrustServerCertificate=true;"
|
||||||
},
|
},
|
||||||
"Logging": {
|
"Serilog": {
|
||||||
"LogLevel": {
|
"MinimumLevel": {
|
||||||
"Default": "Information",
|
"Default": "Information",
|
||||||
|
"Override": {
|
||||||
|
"Microsoft": "Warning",
|
||||||
"Microsoft.Hosting.Lifetime": "Information"
|
"Microsoft.Hosting.Lifetime": "Information"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"WorkerSettings": {
|
"WorkerSettings": {
|
||||||
"RepeatEvery": "12:00:00"
|
"RepeatEvery": "12:00:00"
|
||||||
@@ -35,9 +38,10 @@
|
|||||||
"76-СВРД",
|
"76-СВРД",
|
||||||
"63-КБШ",
|
"63-КБШ",
|
||||||
"83-ЗСИБ",
|
"83-ЗСИБ",
|
||||||
"94-ЗАБ"
|
"94-ЗАБ",
|
||||||
|
"ОБЩЕЕ"
|
||||||
],
|
],
|
||||||
"PackageSize": 100
|
"PackageSize": 1000
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,37 +55,9 @@ namespace PARR.AIHITMainLoader
|
|||||||
using (var scope = serviceProvider.CreateScope())
|
using (var scope = serviceProvider.CreateScope())
|
||||||
{
|
{
|
||||||
var aihitService = scope.ServiceProvider.GetRequiredService<IAihitService>();
|
var aihitService = scope.ServiceProvider.GetRequiredService<IAihitService>();
|
||||||
|
|
||||||
var services = GetServices(aihitService);
|
var services = GetServices(aihitService);
|
||||||
|
|
||||||
var listToMq = new List<AihitMainDataMq>();
|
var currentBatch = new List<string>();
|
||||||
|
|
||||||
|
|
||||||
foreach (var service in services)
|
|
||||||
{
|
|
||||||
foreach (var responseArea in loaderSettings.ResponseAreas)
|
|
||||||
{
|
|
||||||
logger.LogDebug($"responseArea = {responseArea}");
|
|
||||||
var EKs = service.Invoke(responseArea);
|
|
||||||
|
|
||||||
if (EKs?.Any() == true)
|
|
||||||
{
|
|
||||||
foreach (var item in EKs)
|
|
||||||
{
|
|
||||||
if (item != null)
|
|
||||||
{
|
|
||||||
var mainData = item.ToMainData();
|
|
||||||
if (mainData != null)
|
|
||||||
listToMq.Add(mainData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var preparedDataList = listToMq.Select(d => JsonSerializer.Serialize(d)).ToList();
|
|
||||||
|
|
||||||
int count = preparedDataList.Count;
|
|
||||||
int packageSize = loaderSettings.PackageSize;
|
int packageSize = loaderSettings.PackageSize;
|
||||||
|
|
||||||
if (packageSize <= 0)
|
if (packageSize <= 0)
|
||||||
@@ -94,21 +66,39 @@ namespace PARR.AIHITMainLoader
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var parts = count == 0 ? 0 : (count + packageSize - 1) / packageSize;
|
foreach (var service in services)
|
||||||
|
{
|
||||||
|
foreach (var responseArea in loaderSettings.ResponseAreas)
|
||||||
|
{
|
||||||
|
logger.LogDebug($"responseArea = {responseArea}");
|
||||||
|
var EKs = service.Invoke(responseArea);
|
||||||
|
|
||||||
for (var i = 0; i < parts; i++)
|
if (EKs?.Any() != true) continue;
|
||||||
|
|
||||||
|
foreach (var item in EKs)
|
||||||
{
|
{
|
||||||
int start = i * packageSize;
|
if (item == null) continue;
|
||||||
int length = Math.Min(packageSize, count - start);
|
|
||||||
var batch = preparedDataList.GetRange(start, length).ToArray();
|
var mainData = item.ToMainData();
|
||||||
var sendResult = await mqService.SendAsync(mqSettings, batch);
|
if (mainData == null) continue;
|
||||||
if (sendResult.IsSuccess)
|
|
||||||
|
var json = JsonSerializer.Serialize(mainData);
|
||||||
|
currentBatch.Add(json);
|
||||||
|
|
||||||
|
// Отправка, если набрали полный пакет
|
||||||
|
if (currentBatch.Count >= packageSize)
|
||||||
{
|
{
|
||||||
logger.LogInformation($"Данные переданы в RabbitMQ: {batch.Count()}");
|
await SendBatchAsync(currentBatch);
|
||||||
logger.LogDebug($"Отправлено сообщений: {batch.Count()}, пример первого: {batch.FirstOrDefault()?.Substring(0, Math.Min(200, batch.FirstOrDefault()?.Length ?? 0))}...");
|
currentBatch.Clear();
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
logger.LogError($"Ошибка при передаче данных в Rabbit, не переданные сообщения: {string.Join(", ", sendResult.NotSendMessages!)}");
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Отправка остатка
|
||||||
|
if (currentBatch.Count > 0)
|
||||||
|
{
|
||||||
|
await SendBatchAsync(currentBatch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -118,6 +108,20 @@ namespace PARR.AIHITMainLoader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task SendBatchAsync(List<string> batch)
|
||||||
|
{
|
||||||
|
var sendResult = await mqService.SendAsync(mqSettings, batch.ToArray());
|
||||||
|
if (sendResult.IsSuccess)
|
||||||
|
{
|
||||||
|
logger.LogInformation($"Данные переданы в RabbitMQ: {batch.Count}");
|
||||||
|
logger.LogDebug($"Отправлено сообщений: {batch.Count}, пример первого: {batch.FirstOrDefault()?.Substring(0, Math.Min(200, batch.FirstOrDefault()?.Length ?? 0))}...");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger.LogError($"Ошибка при передаче данных в RabbitMQ. Не переданные сообщения: {string.Join(", ", sendResult.NotSendMessages!)}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private List<Func<string, IEnumerable<IMainData>?>> GetServices(IAihitService service)
|
private List<Func<string, IEnumerable<IMainData>?>> GetServices(IAihitService service)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ namespace PARR.AIHITMainLoader.Models
|
|||||||
public string? IsNotUnique { get; set; }
|
public string? IsNotUnique { get; set; }
|
||||||
|
|
||||||
[Column("Холодный резерв")]
|
[Column("Холодный резерв")]
|
||||||
public string? ColdReserve { get; set; }
|
public int? ColdReserve { get; set; }
|
||||||
|
|
||||||
[Column("ДОПОЛНИТЕЛЬНАЯ_ИНФОРМАЦИЯ")]
|
[Column("ДОПОЛНИТЕЛЬНАЯ_ИНФОРМАЦИЯ")]
|
||||||
public string? AdditionalInformation { get; set; }
|
public string? AdditionalInformation { get; set; }
|
||||||
@@ -135,7 +135,7 @@ namespace PARR.AIHITMainLoader.Models
|
|||||||
{"Тип сервера мониторинга", MonitoringServerType },
|
{"Тип сервера мониторинга", MonitoringServerType },
|
||||||
{"ОС", OSType },
|
{"ОС", OSType },
|
||||||
{"ЗО_РГ", WorkGroupResponseArea },
|
{"ЗО_РГ", WorkGroupResponseArea },
|
||||||
{"Холодный резерв", ColdReserve },
|
{"Холодный резерв", ColdReserve.ToString() },
|
||||||
{"ДОПОЛНИТЕЛЬНАЯ_ИНФОРМАЦИЯ", AdditionalInformation },
|
{"ДОПОЛНИТЕЛЬНАЯ_ИНФОРМАЦИЯ", AdditionalInformation },
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ namespace PARR.AIHITMainLoader.Services
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var result = context.Set<StoData>().FromSqlRaw($"EXEC mao2.dbo.sp_IPP_PARR_PTK_get_EK_ORG @зо", parameters.ToArray()).AsEnumerable();
|
var result = context.Set<OrgData>().FromSqlRaw($"EXEC mao2.dbo.sp_IPP_PARR_PTK_get_EK_ORG @зо", parameters.ToArray()).AsEnumerable();
|
||||||
|
|
||||||
if (result == null || !result.Any())
|
if (result == null || !result.Any())
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user