API + Perigee
Perigee With .NET Hosting
Admin controller example
using Microsoft.AspNetCore.Mvc;
using Perigee;
using Perigee.Helpers;
// Visit https://docs.perigee.software to learn more
// Visit https://perigee.software to purchase a license!
namespace PerigeeIntroAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AdminController : ControllerBase
{
public ThreadRegistry reg { get; }
public AdminController(ThreadRegistry tr)
{
this.reg = tr;
}
[HttpGet]
public IActionResult Taskcontrol([FromQuery] string task, [FromQuery] bool start)
{
//Does this thread exist?
if (reg.ContainsThreadByName(task))
{
if (start)
{
reg.StartIfNotRunning(task); //Start if not started
return Ok();
}
else
{
reg.QueueStop(task, true); //Stop and do not auto restart
return Ok();
}
}
return BadRequest();
}
[Route("cron")]
[HttpGet]
public IActionResult cron([FromQuery] string name, [FromQuery] string cron, [FromQuery] string result)
{
if (reg.ContainsThreadByName(name) || string.IsNullOrEmpty(cron) || string.IsNullOrEmpty(result)) return BadRequest();
reg.AddManagedThread(new ManagedThread(name, (ct, l) =>
{
l.LogInformation("result: {result}", result);
}, cron, reg.CTS, reg.GetLogger<AdminController>()));
return new JsonResult(new { Message = $"Will run a CRON thread named {name} {Cron.Parse(cron).ToString()}" });
}
[Route("delete")]
[HttpDelete]
public IActionResult remove([FromQuery] string name)
{
reg.RemoveThreadByName(name);
return Ok();
}
[Route("list")]
[HttpGet]
public IActionResult list()
{
return new JsonResult(new { Threads = reg.GetThreads().Select(f => new { Name = f.Name, Runtime = f.RunTime }).ToArray() });
}
[Route("reboot")]
[HttpGet]
public IActionResult reboot()
{
reg.RestartAllThreads();
return Ok();
}
[Route("exec")]
[HttpGet]
public IActionResult exec([FromQuery] string name)
{
reg.ExecuteCRONNow(name);
return Ok();
}
}
}
Last updated

