Added runonce call
This commit is contained in:
@@ -113,6 +113,8 @@ public class ScriptToolSet
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class RunOnceCallbackInfos : ICallbackInfos {}
|
||||||
|
|
||||||
public class IntervalCallbackInfos : ICallbackInfos
|
public class IntervalCallbackInfos : ICallbackInfos
|
||||||
{
|
{
|
||||||
public object? sender;
|
public object? sender;
|
||||||
|
|||||||
@@ -61,6 +61,10 @@ public class WorkerCollection
|
|||||||
|
|
||||||
switch (callConfig.Type)
|
switch (callConfig.Type)
|
||||||
{
|
{
|
||||||
|
case "runonce":
|
||||||
|
RunOnceCall runOnceCall = new(worker, _logger, callConfig);
|
||||||
|
worker.Calls.Add(runOnceCall);
|
||||||
|
break;
|
||||||
case "interval":
|
case "interval":
|
||||||
if (callConfig.Interval is null)
|
if (callConfig.Interval is null)
|
||||||
{
|
{
|
||||||
@@ -241,6 +245,69 @@ public interface ICall
|
|||||||
public DateTime? LastSuccessfulExecution { get; set; }
|
public DateTime? LastSuccessfulExecution { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class RunOnceCall : ICall
|
||||||
|
{
|
||||||
|
public ILogger _logger;
|
||||||
|
public bool IsEnabled { get; set; }
|
||||||
|
public bool IsExecuting { get; set; }
|
||||||
|
public Worker Worker { get; }
|
||||||
|
public CallConfig CallConfig { get; set; }
|
||||||
|
public DateTime? LastExecution { get; set; }
|
||||||
|
public DateTime? LastSuccessfulExecution { get; set; }
|
||||||
|
|
||||||
|
public RunOnceCall(Worker worker, ILogger logger, CallConfig callConfig)
|
||||||
|
{
|
||||||
|
Worker = worker;
|
||||||
|
_logger = logger;
|
||||||
|
CallConfig = callConfig;
|
||||||
|
IsEnabled = true;
|
||||||
|
IsExecuting = false;
|
||||||
|
IndexAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Start()
|
||||||
|
{
|
||||||
|
IndexAsync();
|
||||||
|
IsEnabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Stop()
|
||||||
|
{
|
||||||
|
IsEnabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void IndexAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DateTime beforeExecution = DateTime.Now;
|
||||||
|
IsExecuting = true;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await Task.Run(() => Worker.Scriptable.Update(new RunOnceCallbackInfos()));
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
IsExecuting = false;
|
||||||
|
LastExecution = beforeExecution;
|
||||||
|
Worker.LastExecution = beforeExecution;
|
||||||
|
}
|
||||||
|
DateTime afterExecution = DateTime.Now;
|
||||||
|
WorkerCollection.UpdateCallAndWorkerTimestamps(this, Worker, beforeExecution, afterExecution);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError("Exception occurred in a Call of Worker \"{name}\": \"{ex}\"", Worker.Name, ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public HealthCheckResult HealthCheck()
|
||||||
|
{
|
||||||
|
return HealthCheckResult.Healthy(); // TODO implement proper healthcheck
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public class IntervalCall : ICall
|
public class IntervalCall : ICall
|
||||||
{
|
{
|
||||||
public System.Timers.Timer Timer;
|
public System.Timers.Timer Timer;
|
||||||
|
|||||||
Reference in New Issue
Block a user