Получение расписание в сокращённом формате
This commit is contained in:
@@ -2,14 +2,19 @@
|
|||||||
{
|
{
|
||||||
public class JobGetByIpQuery
|
public class JobGetByIpQuery
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// По-умолчанию берётся IP-клиента или указанный вручную
|
||||||
|
/// </summary>
|
||||||
public string? Ip { get; set; }
|
public string? Ip { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// По-умолчанию расписание на сегодня или указанную дату
|
||||||
|
/// </summary>
|
||||||
public DateTimeOffset? Date { get; set; }
|
public DateTimeOffset? Date { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Вернуть полностью объект Job в json формате или вернуть краткий список со временем
|
||||||
|
/// </summary>
|
||||||
public bool? IsFullResponse { get; set; }
|
public bool? IsFullResponse { get; set; }
|
||||||
|
|
||||||
///// <summary>
|
|
||||||
///// Возвращает jobs которые ещё не выполнены
|
|
||||||
///// </summary>
|
|
||||||
//public bool? IsPlanned { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,23 +68,20 @@ namespace PARR.API.Controllers.V1
|
|||||||
return Ok(paginationResponse);
|
return Ok(paginationResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Список заданий на запуск по IP-адресу клиента исполнения
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="requestQuery"></param>
|
||||||
|
/// <returns></returns>
|
||||||
[HttpGet(ApiRoutes.Jobs.GetByIp)]
|
[HttpGet(ApiRoutes.Jobs.GetByIp)]
|
||||||
public async Task<IActionResult> GetByClientIP([FromQuery] JobGetByIpQuery requestQuery)
|
public async Task<IActionResult> GetByClientIP([FromQuery] JobGetByIpQuery requestQuery)
|
||||||
{
|
{
|
||||||
var d1 = DateTimeOffset.Now;
|
|
||||||
var d2 = DateTimeOffset.Now.Date;
|
|
||||||
|
|
||||||
if (d1.Date == d2) { }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var ip = requestQuery.Ip ?? clientService.GetClientIp()?.ToString();
|
var ip = requestQuery.Ip ?? clientService.GetClientIp()?.ToString();
|
||||||
if (string.IsNullOrEmpty(ip))
|
if (string.IsNullOrEmpty(ip))
|
||||||
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Client IP address is null." } }));
|
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Client IP address is null." } }));
|
||||||
|
|
||||||
var date = requestQuery.Date ?? DateTimeOffset.Now;
|
var date = requestQuery.Date ?? DateTimeOffset.UtcNow;
|
||||||
|
|
||||||
// С одним IP может быть несколько информационных систем, соответственного а таблице храниться несколько записей хостов с одинаковым IP
|
// С одним IP может быть несколько информационных систем, соответственного а таблице храниться несколько записей хостов с одинаковым IP
|
||||||
var hosts = await hostService.Get().Where(h => h.IP == ip).ToListAsync();
|
var hosts = await hostService.Get().Where(h => h.IP == ip).ToListAsync();
|
||||||
@@ -96,7 +93,7 @@ namespace PARR.API.Controllers.V1
|
|||||||
.Include(a => a.Application).ThenInclude(ah => ah.ApplicationsInHosts)/*.ThenInclude(h => h.Host)*/
|
.Include(a => a.Application).ThenInclude(ah => ah.ApplicationsInHosts)/*.ThenInclude(h => h.Host)*/
|
||||||
.Include(jm => jm.JobMode)
|
.Include(jm => jm.JobMode)
|
||||||
.AsSplitQuery()
|
.AsSplitQuery()
|
||||||
.Where(j => j.Application != null && j.Application.ApplicationsInHosts.Any(ah => ah.HostId == host.Id) && j.IsEnabled)
|
.Where(j => j.Application != null && j.Application.ApplicationsInHosts.Any(ah => ah.HostId == host.Id) && j.IsEnabled && j.StartAt <= date)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
if (jobsHost.Any())
|
if (jobsHost.Any())
|
||||||
@@ -129,26 +126,21 @@ namespace PARR.API.Controllers.V1
|
|||||||
|
|
||||||
if (requestQuery.IsFullResponse == true)
|
if (requestQuery.IsFullResponse == true)
|
||||||
{
|
{
|
||||||
|
// возврат самого полного ответа
|
||||||
var jobResponse = mapper.Map<List<JobGetAllResponse>>(jobsToResponse);
|
var jobResponse = mapper.Map<List<JobGetAllResponse>>(jobsToResponse);
|
||||||
return Ok(new Response<List<JobGetAllResponse>>(jobResponse, true));
|
return Ok(new Response<List<JobGetAllResponse>>(jobResponse, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//var responseDict = new Dictionary<string, string>();
|
// возврат минимального ответа
|
||||||
//foreach ()
|
try
|
||||||
//{
|
{
|
||||||
|
return Ok(jobsToResponse.ToDictionary(t => t.ScriptName, d => d.StartAt));
|
||||||
//}
|
}
|
||||||
|
catch (ArgumentException ex)
|
||||||
|
{
|
||||||
|
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = $"Не могу создать json объект с одинаковым значением ключа (ScriptName). {ex.Message}" } }));
|
||||||
// var jobListForResponse = new
|
}
|
||||||
|
|
||||||
|
|
||||||
//var dic = new Dictionary<string, string>();
|
|
||||||
//dic.Add("sss1", "222");
|
|
||||||
//dic.Add("sss2", "333");
|
|
||||||
return Ok();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -156,7 +148,7 @@ namespace PARR.API.Controllers.V1
|
|||||||
{
|
{
|
||||||
var jobs = new List<Job>();
|
var jobs = new List<Job>();
|
||||||
|
|
||||||
|
#region description
|
||||||
// freaq > суток или нет?
|
// freaq > суток или нет?
|
||||||
|
|
||||||
//-----------
|
//-----------
|
||||||
@@ -175,7 +167,7 @@ namespace PARR.API.Controllers.V1
|
|||||||
// ------freaq больше суток--------
|
// ------freaq больше суток--------
|
||||||
// журнал берем последнее событие (че там со статусами? не надо пока), к нему пребавляем фрек, и смотрим == сегодня или нет, если сегодня то добавляем
|
// журнал берем последнее событие (че там со статусами? не надо пока), к нему пребавляем фрек, и смотрим == сегодня или нет, если сегодня то добавляем
|
||||||
// --------------
|
// --------------
|
||||||
|
#endregion
|
||||||
|
|
||||||
var allDayMinutes = 1440;
|
var allDayMinutes = 1440;
|
||||||
if (job.Frequency >= allDayMinutes)
|
if (job.Frequency >= allDayMinutes)
|
||||||
@@ -188,7 +180,6 @@ namespace PARR.API.Controllers.V1
|
|||||||
// если в истории нет записей, то запускаем сегодня в стартЭт
|
// если в истории нет записей, то запускаем сегодня в стартЭт
|
||||||
// берем квери дэйт и ем задаем время из Джобс СтартЭт
|
// берем квери дэйт и ем задаем время из Джобс СтартЭт
|
||||||
var startDateTimeNext = new DateTimeOffset(queryDate.Year, queryDate.Month, queryDate.Day, job.StartAt.Hour, job.StartAt.Minute, job.StartAt.Second, new TimeSpan(0));
|
var startDateTimeNext = new DateTimeOffset(queryDate.Year, queryDate.Month, queryDate.Day, job.StartAt.Hour, job.StartAt.Minute, job.StartAt.Second, new TimeSpan(0));
|
||||||
//todo: check
|
|
||||||
var jobToAdded = mapper.Map<Job>(job);//new Job { StartAt = startDateTimeNext };
|
var jobToAdded = mapper.Map<Job>(job);//new Job { StartAt = startDateTimeNext };
|
||||||
jobToAdded.StartAt = startDateTimeNext;
|
jobToAdded.StartAt = startDateTimeNext;
|
||||||
|
|
||||||
@@ -202,7 +193,6 @@ namespace PARR.API.Controllers.V1
|
|||||||
// если берем прошлую последнюю операцию из журнала, и к ней прибавить фрекунси, то время следующего старта сдвинется на время выполнения прошлого задания
|
// если берем прошлую последнюю операцию из журнала, и к ней прибавить фрекунси, то время следующего старта сдвинется на время выполнения прошлого задания
|
||||||
// чтобы это избежать, берем квери дэйт и ем задаем время из Джобс СтартЭт
|
// чтобы это избежать, берем квери дэйт и ем задаем время из Джобс СтартЭт
|
||||||
var startDateTimeNext = new DateTimeOffset(queryDate.Year, queryDate.Month, queryDate.Day, job.StartAt.Hour, job.StartAt.Minute, job.StartAt.Second, new TimeSpan(0));
|
var startDateTimeNext = new DateTimeOffset(queryDate.Year, queryDate.Month, queryDate.Day, job.StartAt.Hour, job.StartAt.Minute, job.StartAt.Second, new TimeSpan(0));
|
||||||
//todo: check
|
|
||||||
var jobToAdded = mapper.Map<Job>(job);
|
var jobToAdded = mapper.Map<Job>(job);
|
||||||
jobToAdded.StartAt = startDateTimeNext;
|
jobToAdded.StartAt = startDateTimeNext;
|
||||||
jobs.Add(jobToAdded);
|
jobs.Add(jobToAdded);
|
||||||
@@ -222,7 +212,6 @@ namespace PARR.API.Controllers.V1
|
|||||||
while (min >= 0)
|
while (min >= 0)
|
||||||
{
|
{
|
||||||
//var jobToAdded = new Job { StartAt = queryDate.StartOfDay().AddMinutes(min) };
|
//var jobToAdded = new Job { StartAt = queryDate.StartOfDay().AddMinutes(min) };
|
||||||
//todo: check
|
|
||||||
var jobToAdded = mapper.Map<Job>(job);
|
var jobToAdded = mapper.Map<Job>(job);
|
||||||
jobToAdded.StartAt = queryDate.StartOfDay().AddMinutes(min);
|
jobToAdded.StartAt = queryDate.StartOfDay().AddMinutes(min);
|
||||||
jobs.Add(jobToAdded);
|
jobs.Add(jobToAdded);
|
||||||
@@ -233,7 +222,6 @@ namespace PARR.API.Controllers.V1
|
|||||||
min = startAtMinutes + job.Frequency;
|
min = startAtMinutes + job.Frequency;
|
||||||
while (min < allDayMinutes)
|
while (min < allDayMinutes)
|
||||||
{
|
{
|
||||||
//TODO: check
|
|
||||||
//var jobToAdded = new Job { StartAt = queryDate.StartOfDay().AddMinutes(min) };
|
//var jobToAdded = new Job { StartAt = queryDate.StartOfDay().AddMinutes(min) };
|
||||||
var jobToAdded = mapper.Map<Job>(job);
|
var jobToAdded = mapper.Map<Job>(job);
|
||||||
jobToAdded.StartAt = queryDate.StartOfDay().AddMinutes(min);
|
jobToAdded.StartAt = queryDate.StartOfDay().AddMinutes(min);
|
||||||
@@ -248,7 +236,6 @@ namespace PARR.API.Controllers.V1
|
|||||||
var min = startAtMinutes;
|
var min = startAtMinutes;
|
||||||
while (min < allDayMinutes)
|
while (min < allDayMinutes)
|
||||||
{
|
{
|
||||||
//TODO
|
|
||||||
//var jobToAdded = new Job { StartAt = queryDate.StartOfDay().AddMinutes(min) };
|
//var jobToAdded = new Job { StartAt = queryDate.StartOfDay().AddMinutes(min) };
|
||||||
var jobToAdded = mapper.Map<Job>(job);
|
var jobToAdded = mapper.Map<Job>(job);
|
||||||
jobToAdded.StartAt = queryDate.StartOfDay().AddMinutes(min);
|
jobToAdded.StartAt = queryDate.StartOfDay().AddMinutes(min);
|
||||||
@@ -261,70 +248,5 @@ namespace PARR.API.Controllers.V1
|
|||||||
return jobs;
|
return jobs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//[HttpGet(ApiRoutes.Jobs.GetByIp)]
|
|
||||||
//public async Task<IActionResult> GetByClientIP([FromQuery] JobGetByIpQuery requestQuery)
|
|
||||||
//{
|
|
||||||
// var ip = requestQuery.Ip ?? clientService.GetClientIp()?.ToString();
|
|
||||||
// if (string.IsNullOrEmpty(ip))
|
|
||||||
// return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Client IP address is null." } }));
|
|
||||||
|
|
||||||
// var date = requestQuery.Date ?? DateTimeOffset.Now;
|
|
||||||
|
|
||||||
// // С одним IP может быть несколько информационных систем, соответственного а таблице храниться несколько записей хостов с одинаковым IP
|
|
||||||
// var hosts = await hostService.Get().Where(h => h.IP == ip).ToListAsync();
|
|
||||||
// var hostJobsDict = new Dictionary<DAL.Models.Host, List<Job>>();
|
|
||||||
// foreach (var host in hosts)
|
|
||||||
// {
|
|
||||||
// var jobsHostQuery = jobService.Get()
|
|
||||||
// .Include(a => a.Application).ThenInclude(ah => ah.ApplicationsInHosts)/*.ThenInclude(h => h.Host)*/
|
|
||||||
// .Include(jm => jm.JobMode)
|
|
||||||
// .AsSplitQuery()
|
|
||||||
// .Where(j => j.Application != null && j.Application.ApplicationsInHosts.Any(ah => ah.HostId == host.Id));
|
|
||||||
|
|
||||||
// if (requestQuery.IsPlanned == true)
|
|
||||||
// {
|
|
||||||
// // ототбражем только включенные
|
|
||||||
// jobsHostQuery = jobsHostQuery.Where(t => t.IsEnabled == true);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// var jobsHost = await jobsHostQuery.ToListAsync();
|
|
||||||
|
|
||||||
|
|
||||||
// if (requestQuery.IsPlanned == true)
|
|
||||||
// {
|
|
||||||
// // смотрим в истории, если задание уже было запущено, то его не отображаем
|
|
||||||
// foreach (var jobItem in jobsHost)
|
|
||||||
// {
|
|
||||||
// var journalItem = await jobJournalService.GetLastAsync(jobItem.Id, host.Id, date);
|
|
||||||
// if (JobStatusEnum.started) { }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (jobsHost.Any())
|
|
||||||
// {
|
|
||||||
// //Проверяем Job вк
|
|
||||||
// hostJobsDict.Add(host, jobsHost);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// //hostJobsDict.Values.Distinct();
|
|
||||||
|
|
||||||
// var jobsJoined = new List<Job>();
|
|
||||||
// foreach (var job in hostJobsDict.Values)
|
|
||||||
// {
|
|
||||||
// job.ForEach(item =>
|
|
||||||
// {
|
|
||||||
// jobsJoined.Add(item);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (!jobsJoined.Any())
|
|
||||||
// return NoContent();
|
|
||||||
|
|
||||||
// var jobResponse = mapper.Map<List<JobGetAllResponse>>(jobsJoined.Distinct());
|
|
||||||
|
|
||||||
// return Ok(new Response<List<JobGetAllResponse>>(jobResponse, true, new List<ErrorModel>(), $"{ip},{date}"));
|
|
||||||
//}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,11 +37,12 @@ namespace PARR.API.Installers
|
|||||||
public static void InstallSwagger(this WebApplication app)
|
public static void InstallSwagger(this WebApplication app)
|
||||||
{
|
{
|
||||||
// Configure the HTTP request pipeline.
|
// Configure the HTTP request pipeline.
|
||||||
if (app.Environment.IsDevelopment())
|
//todo: оставили swagger для прода
|
||||||
{
|
//if (app.Environment.IsDevelopment())
|
||||||
|
//{
|
||||||
app.UseSwagger();
|
app.UseSwagger();
|
||||||
app.UseSwaggerUI();
|
app.UseSwaggerUI();
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace PARR.DAL.Extensions
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return JsonSerializer.Serialize(value, new JsonSerializerOptions { Encoder = JavaScriptEncoder.Create(UnicodeRanges.All, UnicodeRanges.Cyrillic) }); ;
|
return JsonSerializer.Serialize(value, new JsonSerializerOptions { Encoder = JavaScriptEncoder.Create(UnicodeRanges.All, UnicodeRanges.Cyrillic) });
|
||||||
}
|
}
|
||||||
catch// (Exception ex)
|
catch// (Exception ex)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user