Cleaned up WorkerManager by moving call-related code to corresponding call
This commit is contained in:
@@ -77,14 +77,49 @@ public class IntervalCall : ICall
|
|||||||
public DateTime? LastExecution { get; set; }
|
public DateTime? LastExecution { get; set; }
|
||||||
public DateTime? LastSuccessfulExecution { get; set; }
|
public DateTime? LastSuccessfulExecution { get; set; }
|
||||||
|
|
||||||
public IntervalCall(System.Timers.Timer timer, IScriptable scriptable, ILogger logger, CallConfig callConfig)
|
public IntervalCall(Worker worker, ILogger logger, CallConfig callConfig)
|
||||||
{
|
{
|
||||||
Timer = timer;
|
Scriptable = worker.Scriptable;
|
||||||
Scriptable = scriptable;
|
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
CallConfig = callConfig;
|
CallConfig = callConfig;
|
||||||
IsEnabled = true;
|
IsEnabled = true;
|
||||||
IsExecuting = false;
|
IsExecuting = false;
|
||||||
|
if (callConfig.Interval is null)
|
||||||
|
{
|
||||||
|
_logger.LogError("Interval not set for a Call in Worker \"{Name}\"", worker.Name);
|
||||||
|
throw new IndexerConfigurationException($"Interval not set for a Call in Worker \"{worker.Name}\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer = new System.Timers.Timer((double)callConfig.Interval)
|
||||||
|
{
|
||||||
|
AutoReset = true,
|
||||||
|
Enabled = true
|
||||||
|
};
|
||||||
|
DateTime now = DateTime.Now;
|
||||||
|
Timer.Elapsed += (sender, e) =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DateTime beforeExecution = DateTime.Now;
|
||||||
|
IsExecuting = true;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
worker.Scriptable.Update(new IntervalCallbackInfos() { sender = sender, e = e });
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
IsExecuting = false;
|
||||||
|
LastExecution = beforeExecution;
|
||||||
|
worker.LastExecution = beforeExecution;
|
||||||
|
}
|
||||||
|
DateTime afterExecution = DateTime.Now;
|
||||||
|
WorkerManager.UpdateCallAndWorkerTimestamps(this, worker, beforeExecution, afterExecution);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError("Exception occurred in a Call of Worker \"{name}\": \"{ex}\"", worker.Name, ex.Message);
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Start()
|
public void Start()
|
||||||
@@ -246,8 +281,10 @@ public class FileUpdateCall : ICall
|
|||||||
throw new IndexerConfigurationException($"Path not set for a Call in Worker \"{Worker.Name}\"");
|
throw new IndexerConfigurationException($"Path not set for a Call in Worker \"{Worker.Name}\"");
|
||||||
}
|
}
|
||||||
_watcher = new FileSystemWatcher(CallConfig.Path);
|
_watcher = new FileSystemWatcher(CallConfig.Path);
|
||||||
|
_watcher.Created += OnFileChanged;
|
||||||
_watcher.Changed += OnFileChanged;
|
_watcher.Changed += OnFileChanged;
|
||||||
_watcher.Deleted += OnFileChanged;
|
_watcher.Deleted += OnFileChanged;
|
||||||
|
_watcher.Renamed += OnFileChanged;
|
||||||
_watcher.EnableRaisingEvents = true;
|
_watcher.EnableRaisingEvents = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,56 +63,14 @@ public class WorkerManager
|
|||||||
worker.Calls.Add(runOnceCall);
|
worker.Calls.Add(runOnceCall);
|
||||||
break;
|
break;
|
||||||
case "interval":
|
case "interval":
|
||||||
if (callConfig.Interval is null)
|
IntervalCall intervallCall = new(worker, _logger, callConfig);
|
||||||
{
|
|
||||||
_logger.LogError("Interval not set for a Call in Worker \"{Name}\"", workerConfig.Name);
|
|
||||||
throw new IndexerConfigurationException($"Interval not set for a Call in Worker \"{workerConfig.Name}\"");
|
|
||||||
}
|
|
||||||
var timer = new System.Timers.Timer((double)callConfig.Interval);
|
|
||||||
timer.AutoReset = true;
|
|
||||||
timer.Enabled = true;
|
|
||||||
DateTime now = DateTime.Now;
|
|
||||||
IntervalCall intervallCall = new(timer, worker.Scriptable, _logger, callConfig)
|
|
||||||
{
|
|
||||||
LastExecution = now,
|
|
||||||
LastSuccessfulExecution = now
|
|
||||||
};
|
|
||||||
timer.Elapsed += (sender, e) =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
DateTime beforeExecution = DateTime.Now;
|
|
||||||
intervallCall.IsExecuting = true;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
worker.Scriptable.Update(new IntervalCallbackInfos() { sender = sender, e = e });
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
intervallCall.IsExecuting = false;
|
|
||||||
intervallCall.LastExecution = beforeExecution;
|
|
||||||
worker.LastExecution = beforeExecution;
|
|
||||||
}
|
|
||||||
DateTime afterExecution = DateTime.Now;
|
|
||||||
UpdateCallAndWorkerTimestamps(intervallCall, worker, beforeExecution, afterExecution);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.LogError("Exception occurred in a Call of Worker \"{name}\": \"{ex}\"", worker.Name, ex.Message);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
worker.Calls.Add(intervallCall);
|
worker.Calls.Add(intervallCall);
|
||||||
break;
|
break;
|
||||||
case "schedule": // TODO implement scheduled tasks using Quartz
|
case "schedule":
|
||||||
ScheduleCall scheduleCall = new(worker, callConfig, _logger);
|
ScheduleCall scheduleCall = new(worker, callConfig, _logger);
|
||||||
worker.Calls.Add(scheduleCall);
|
worker.Calls.Add(scheduleCall);
|
||||||
break;
|
break;
|
||||||
case "fileupdate":
|
case "fileupdate":
|
||||||
if (callConfig.Path is null)
|
|
||||||
{
|
|
||||||
_logger.LogError("Path not set for a Call in Worker \"{Name}\"", workerConfig.Name);
|
|
||||||
throw new IndexerConfigurationException($"Path not set for a Call in Worker \"{workerConfig.Name}\"");
|
|
||||||
}
|
|
||||||
FileUpdateCall fileUpdateCall = new(worker, callConfig, _logger);
|
FileUpdateCall fileUpdateCall = new(worker, callConfig, _logger);
|
||||||
worker.Calls.Add(fileUpdateCall);
|
worker.Calls.Add(fileUpdateCall);
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user