DD.WellWorkover.Cloud/AsbCloudWebApi/Controllers/ReduceSamplingController.cs

78 lines
2.6 KiB
C#
Raw Permalink Normal View History

using AsbCloudApp.Services;
2022-10-11 17:04:26 +05:00
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;
using AsbCloudApp.Data;
using System.Linq;
using AsbCloudWebApi.SignalR;
using Microsoft.AspNetCore.SignalR;
2024-08-19 10:01:07 +05:00
namespace AsbCloudWebApi.Controllers;
/// <summary>
/// Редактор кустов для админки
/// </summary>
[Route("api/admin/[controller]")]
[ApiController]
[Authorize]
public class ReduceSamplingController: ControllerBase
2022-10-11 17:04:26 +05:00
{
2024-08-19 10:01:07 +05:00
private readonly IReduceSamplingService service;
private readonly IHubContext<TelemetryHub> telemetryHubContext;
private const string sirnalRGroupName = "ReduceSampling";
private const string sirnalRMethodOnProgress = "OnProgress";
public ReduceSamplingController(
IReduceSamplingService service,
IHubContext<TelemetryHub> telemetryHubContext )
{
this.service = service;
this.telemetryHubContext = telemetryHubContext;
}
2022-10-11 17:04:26 +05:00
/// <summary>
2024-08-19 10:01:07 +05:00
/// Получить все задания. Задания удаляются минимум через 10 сек после выполнения, возможно позднее.
2022-10-11 17:04:26 +05:00
/// </summary>
2024-08-19 10:01:07 +05:00
/// <param name="idTelemetry"></param>
/// <returns></returns>
[HttpGet]
public virtual ActionResult<IEnumerable<JobDto>> GetAll(int idTelemetry)
2022-10-11 17:04:26 +05:00
{
2024-08-19 10:01:07 +05:00
var result = service.GetJobs();
if (result.Any())
2022-10-11 17:04:26 +05:00
return Ok(result);
2024-08-19 10:01:07 +05:00
else
return NoContent();
}
2022-10-11 17:04:26 +05:00
2024-08-19 10:01:07 +05:00
/// <summary>
/// Получить состояние определенной задачи
/// </summary>
/// <param name="idTelemetry"></param>
/// <returns></returns>
[HttpGet("{idTelemetry}")]
public virtual ActionResult<JobDto> GetOrDefault(int idTelemetry)
{
var result = service.GetOrDefaultState(idTelemetry);
return Ok(result);
}
/// <summary>
/// Создать задачу прореживанию архива и добавить её в очередь на выполнение.
/// Если задача есть в очереди, она же и возвращается, но подписка не происходит.
/// </summary>
[HttpPost]
[Permission]
public virtual ActionResult<JobDto> Enqueue(int idTelemetry)
{
void onProgress(JobDto job) =>
Task.Run(async () =>
await telemetryHubContext.Clients.Group(sirnalRGroupName)
.SendAsync(sirnalRMethodOnProgress, job));
2022-10-11 17:04:26 +05:00
2024-08-19 10:01:07 +05:00
service.TryEnqueueRediceSamplingJob(idTelemetry, onProgress, out JobDto job);
return Ok(job);
2022-10-11 17:04:26 +05:00
}
}