forked from ddrilling/AsbCloudServer
71 lines
2.2 KiB
C#
71 lines
2.2 KiB
C#
using AsbCloudApp.Data;
|
|
using AsbCloudInfrastructure.Background;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using System;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace AsbCloudWebApi.Controllers
|
|
{
|
|
[Route("api/[controller]")]
|
|
[Authorize]
|
|
[ApiController]
|
|
public class PeriodicBackgroundWorkerController : ControllerBase
|
|
{
|
|
private readonly PeriodicBackgroundWorker worker;
|
|
private readonly IServiceProvider serviceProvider;
|
|
|
|
public PeriodicBackgroundWorkerController(
|
|
PeriodicBackgroundWorker worker,
|
|
IServiceProvider serviceProvider)
|
|
{
|
|
this.worker = worker;
|
|
this.serviceProvider = serviceProvider;
|
|
}
|
|
|
|
[HttpGet]
|
|
public IActionResult GetAll()
|
|
{
|
|
var result = new
|
|
{
|
|
currentWork = (BackgroundWorkDto?)worker.CurrentWork,
|
|
worker.MainLoopLastException,
|
|
works = worker.Works.Select(work => (BackgroundWorkDto)work.Work),
|
|
};
|
|
return Ok(result);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Запуск задачи по Id
|
|
/// </summary>
|
|
/// <param name="workId">Id задачи</param>
|
|
/// <param name="token"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("start/{workId}")]
|
|
public async Task<IActionResult> Start(string workId, CancellationToken token)
|
|
{
|
|
var targetWork = worker.Works.FirstOrDefault(w => w.Work.Id == workId);
|
|
if(targetWork is not null)
|
|
{
|
|
using (var scope = serviceProvider.CreateScope()) {
|
|
|
|
var result = await targetWork.Work.Start(scope.ServiceProvider, token);
|
|
return Ok(result);
|
|
}
|
|
}
|
|
return BadRequest("Work not found by workId");
|
|
}
|
|
|
|
[HttpPost("restart"), Obsolete("temporary method")]
|
|
public async Task<IActionResult> RestartAsync(CancellationToken token)
|
|
{
|
|
await worker.StopAsync(token);
|
|
await worker.StartAsync(token);
|
|
return Ok();
|
|
}
|
|
}
|
|
}
|