feat(all): ! Критические изменения логики работы всех сервисорв, База Данных имееет неокончательную версию. Template, Scheduler переведены на работу с Unit+Job+JobGroup вместо Host+ApplicationsInWork
This commit is contained in:
@@ -43,93 +43,94 @@ namespace PARR.GeneratorTemplates.Services
|
||||
|
||||
public async Task CreateTemplates(GeneratorTemplateMq query)
|
||||
{
|
||||
//В таблице AppInWork находим РР, и смотрим ее рабочие группы. Затем по ним будем фильтровать хосты
|
||||
var appInWorkWg = await applicationsInWorkService.Get()
|
||||
.Include(t => t.WorkGroups)
|
||||
.FirstAsync(t => t.ApplicationId == query.ApplicationId && t.WorkId == query.WorkId);
|
||||
//TODO Migratin to Job
|
||||
////В таблице AppInWork находим РР, и смотрим ее рабочие группы. Затем по ним будем фильтровать хосты
|
||||
//var appInWorkWg = await applicationsInWorkService.Get()
|
||||
// .Include(t => t.WorkGroups)
|
||||
// .FirstAsync(t => t.ApplicationId == query.ApplicationId && t.WorkId == query.WorkId);
|
||||
|
||||
if (!appInWorkWg.WorkGroups.Any())
|
||||
{
|
||||
logger.LogWarning($"Не генерирую шаблоны. Нет рабочих групп у ApplicationInWork с id: {appInWorkWg.Id}");
|
||||
return;
|
||||
}
|
||||
//if (!appInWorkWg.WorkGroups.Any())
|
||||
//{
|
||||
// logger.LogWarning($"Не генерирую шаблоны. Нет рабочих групп у ApplicationInWork с id: {appInWorkWg.Id}");
|
||||
// return;
|
||||
//}
|
||||
|
||||
var workGroups = appInWorkWg.WorkGroups.ToList();
|
||||
//var workGroups = appInWorkWg.WorkGroups.ToList();
|
||||
|
||||
//Согласно параметрам, находит все ЭК в таблице Hosts.
|
||||
//Далее проверяет есть ли такие шаблоны в таблице Templates, если нет, то создает, активирует и ставит статус Creating.
|
||||
//Если такие шаблоны уже есть, ничего с ними не делает.
|
||||
////Согласно параметрам, находит все ЭК в таблице Hosts.
|
||||
////Далее проверяет есть ли такие шаблоны в таблице Templates, если нет, то создает, активирует и ставит статус Creating.
|
||||
////Если такие шаблоны уже есть, ничего с ними не делает.
|
||||
|
||||
string ekPattern = SqlHelpers.RegexToLike(query.Ek);
|
||||
//string ekPattern = SqlHelpers.RegexToLike(query.Ek);
|
||||
|
||||
// список хостов для создания шаблонов
|
||||
var queryHosts = hostService.Get()
|
||||
//.Include(t => t.WorkGroupItem)
|
||||
.Include(t => t.ApplicationsInHosts)
|
||||
.ThenInclude(t => t.Application).ThenInclude(t => t!.ApplicationsInWorks).ThenInclude(w => w.Work)
|
||||
.Include(t => t.Templates)
|
||||
.ThenInclude(w => w.ApplicationsInWork)
|
||||
.Include(t => t.ResponseArea)
|
||||
.Where(t =>
|
||||
t.ApplicationsInHosts.Any(h =>
|
||||
h.ApplicationId == query.ApplicationId
|
||||
&& h.Application!.ApplicationsInWorks.Any(w => w.WorkId == query.WorkId)
|
||||
)
|
||||
&& EF.Functions.Like(t.Ek.ToLower(), ekPattern)
|
||||
// смотрим что нет такого шаблона
|
||||
&& t.Templates.Any(templ => templ.ApplicationsInWork!.WorkId == query.WorkId && templ.ApplicationsInWork.ApplicationId == query.ApplicationId) == false
|
||||
// смотрим что у этих хостов есть нужные группы
|
||||
//&& workGroups.Any(x => x.WorkGroupId == t.WorkGroupId)
|
||||
);
|
||||
//// список хостов для создания шаблонов
|
||||
//var queryHosts = hostService.Get()
|
||||
// //.Include(t => t.WorkGroupItem)
|
||||
// .Include(t => t.ApplicationsInHosts)
|
||||
// .ThenInclude(t => t.Application).ThenInclude(t => t!.ApplicationsInWorks).ThenInclude(w => w.Work)
|
||||
// .Include(t => t.Templates)
|
||||
// .ThenInclude(w => w.ApplicationsInWork)
|
||||
// .Include(t => t.ResponseArea)
|
||||
// .Where(t =>
|
||||
// t.ApplicationsInHosts.Any(h =>
|
||||
// h.ApplicationId == query.ApplicationId
|
||||
// && h.Application!.ApplicationsInWorks.Any(w => w.WorkId == query.WorkId)
|
||||
// )
|
||||
// && EF.Functions.Like(t.Ek.ToLower(), ekPattern)
|
||||
// // смотрим что нет такого шаблона
|
||||
// && t.Templates.Any(templ => templ.ApplicationsInWork!.WorkId == query.WorkId && templ.ApplicationsInWork.ApplicationId == query.ApplicationId) == false
|
||||
// // смотрим что у этих хостов есть нужные группы
|
||||
// //&& workGroups.Any(x => x.WorkGroupId == t.WorkGroupId)
|
||||
// );
|
||||
|
||||
// статус ЭК
|
||||
if (query.StatusEk > 0)
|
||||
queryHosts = queryHosts.Where(t => t.EkStatusCode == query.StatusEk);
|
||||
//// статус ЭК
|
||||
//if (query.StatusEk > 0)
|
||||
// queryHosts = queryHosts.Where(t => t.EkStatusCode == query.StatusEk);
|
||||
|
||||
var hosts = await queryHosts
|
||||
.AsSplitQuery()
|
||||
.ToListAsync();
|
||||
//var hosts = await queryHosts
|
||||
// .AsSplitQuery()
|
||||
// .ToListAsync();
|
||||
|
||||
// Исключаем хосты у которых нет нужных групп
|
||||
hosts = hosts.Where(t => workGroups.Any(x => x.WorkGroupId == t.WorkGroupId)).ToList();
|
||||
if (!hosts.Any())
|
||||
{
|
||||
logger.LogInformation($"Не найдено ЭК попадающих под условие: ${JsonSerializer.Serialize(query)}");
|
||||
return;
|
||||
}
|
||||
//// Исключаем хосты у которых нет нужных групп
|
||||
//hosts = hosts.Where(t => workGroups.Any(x => x.WorkGroupId == t.WorkGroupId)).ToList();
|
||||
//if (!hosts.Any())
|
||||
//{
|
||||
// logger.LogInformation($"Не найдено ЭК попадающих под условие: ${JsonSerializer.Serialize(query)}");
|
||||
// return;
|
||||
//}
|
||||
|
||||
|
||||
// хосты группируем по РГ, чтоб потом распределить/рассчитать NextRun
|
||||
var groupingHostByWg = hosts.GroupBy(t => t.WorkGroupId);
|
||||
//// хосты группируем по РГ, чтоб потом распределить/рассчитать NextRun
|
||||
//var groupingHostByWg = hosts.GroupBy(t => t.WorkGroupId);
|
||||
|
||||
foreach (var group in groupingHostByWg)
|
||||
{
|
||||
var groupingHosts = group.ToList();
|
||||
//foreach (var group in groupingHostByWg)
|
||||
//{
|
||||
// var groupingHosts = group.ToList();
|
||||
|
||||
var templates = CreateQueryTemplates(groupingHosts, query);
|
||||
// var templates = CreateQueryTemplates(groupingHosts, query);
|
||||
|
||||
//проверяем, что нет шаблонов с такими именами, исключаем их
|
||||
templates = await ExcludeExistTemplatesAsync(templates);
|
||||
if (!templates.Any())
|
||||
continue;
|
||||
// //проверяем, что нет шаблонов с такими именами, исключаем их
|
||||
// templates = await ExcludeExistTemplatesAsync(templates);
|
||||
// if (!templates.Any())
|
||||
// continue;
|
||||
|
||||
//заполняем NextRun
|
||||
templates = await templateDistributor.DistributeTemplateAsync(templates, appInWorkWg.Id, (Guid)group.Key!);
|
||||
// //заполняем NextRun
|
||||
// templates = await templateDistributor.DistributeTemplateAsync(templates, appInWorkWg.Id, (Guid)group.Key!);
|
||||
|
||||
// сохраняем
|
||||
foreach (var template in templates)
|
||||
{
|
||||
if (!await templateService.CreateAsync(template) || !await templateService.CommitAsync(query.HistoryInitiator))
|
||||
{
|
||||
logger.LogError($"Ошибка при создании шаблона: Name: {template.Name}, ApplicationInWorkId: {template.ApplicationInWorkId}, HostId: {template.HostId}");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogInformation($"Создан шаблон: Name: {template.Name}, ApplicationInWorkId: {template.ApplicationInWorkId}, " +
|
||||
$"HostId: {template.HostId}");
|
||||
}
|
||||
}
|
||||
}
|
||||
// // сохраняем
|
||||
// foreach (var template in templates)
|
||||
// {
|
||||
// if (!await templateService.CreateAsync(template) || !await templateService.CommitAsync(query.HistoryInitiator))
|
||||
// {
|
||||
// logger.LogError($"Ошибка при создании шаблона: Name: {template.Name}, ApplicationInWorkId: {template.ApplicationInWorkId}, HostId: {template.HostId}");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// logger.LogInformation($"Создан шаблон: Name: {template.Name}, ApplicationInWorkId: {template.ApplicationInWorkId}, " +
|
||||
// $"HostId: {template.HostId}");
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
#region создавали шаблоны до того, как стали группировать по РГ
|
||||
////Создаем шаблоны
|
||||
@@ -231,8 +232,8 @@ namespace PARR.GeneratorTemplates.Services
|
||||
),
|
||||
IsActiveTemplate = query.IsActiveTemplate ?? false,
|
||||
IsActiveSchedule = query.IsActiveSchedule ?? false,
|
||||
ApplicationInWorkId = appInWork.Id,
|
||||
HostId = host.Id,
|
||||
JobId = appInWork.Id,//TODO Migratin to Job
|
||||
UnitId = host.Id,//TODO Migratin to Job
|
||||
// NextRun не задаем значение, его рассчитаем позже
|
||||
//NextRun = ???,
|
||||
LastRun = null
|
||||
@@ -270,26 +271,26 @@ namespace PARR.GeneratorTemplates.Services
|
||||
string ekPattern = SqlHelpers.RegexToLike(query.Ek);
|
||||
|
||||
var queryTemplates = templateService.Get()
|
||||
.Include(t => t.Host)
|
||||
.Include(t => t.ApplicationsInWork)
|
||||
.Include(t => t.Unit)//TODO Migratin to Job
|
||||
.Include(t => t.Job)//TODO Migratin to Job
|
||||
.Include(t => t.RobotConfigurations)
|
||||
.Where(t =>
|
||||
(t.IsActiveTemplate == true || t.IsActiveSchedule == true)
|
||||
&& t.ApplicationsInWork!.ApplicationId == query.ApplicationId
|
||||
&& t.ApplicationsInWork!.WorkId == query.WorkId
|
||||
&& EF.Functions.Like(t.Host!.Ek.ToLower(), ekPattern)
|
||||
//&& t.ApplicationsInWork!.ApplicationId == query.ApplicationId//TODO Migratin to Job
|
||||
//&& t.ApplicationsInWork!.WorkId == query.WorkId//TODO Migratin to Job
|
||||
&& EF.Functions.Like(t.Unit!.Name.ToLower(), ekPattern)
|
||||
);
|
||||
|
||||
// статус ЭК
|
||||
if (query.StatusEk > 0)
|
||||
queryTemplates = queryTemplates.Where(t => t.Host!.EkStatusCode == query.StatusEk);
|
||||
queryTemplates = queryTemplates;//.Where(t => t.Unit!.BaseFields.Status == query.StatusEk);//TODO Migratin to Job
|
||||
|
||||
var existTemplates = await queryTemplates
|
||||
.AsSplitQuery()
|
||||
.ToListAsync();
|
||||
|
||||
// Исключаем хосты у которых нет нужных групп
|
||||
existTemplates = existTemplates.Where(t => workGroups.Any(x => x.WorkGroupId == t.Host.WorkGroupId)).ToList();
|
||||
existTemplates = existTemplates.Where(t => workGroups.Any(x => x.WorkGroup.Name == t.Unit.BaseFields.WorkGroup)).ToList();
|
||||
|
||||
if (!existTemplates.Any())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user