diff --git a/src/Indexer/Calls.cs b/src/Indexer/Calls.cs index 76c9a4c..2b150cd 100644 --- a/src/Indexer/Calls.cs +++ b/src/Indexer/Calls.cs @@ -77,14 +77,49 @@ public class IntervalCall : ICall public DateTime? LastExecution { 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 = scriptable; + Scriptable = worker.Scriptable; _logger = logger; CallConfig = callConfig; IsEnabled = true; 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() @@ -246,8 +281,10 @@ public class FileUpdateCall : ICall throw new IndexerConfigurationException($"Path not set for a Call in Worker \"{Worker.Name}\""); } _watcher = new FileSystemWatcher(CallConfig.Path); + _watcher.Created += OnFileChanged; _watcher.Changed += OnFileChanged; _watcher.Deleted += OnFileChanged; + _watcher.Renamed += OnFileChanged; _watcher.EnableRaisingEvents = true; } diff --git a/src/Indexer/WorkerManager.cs b/src/Indexer/WorkerManager.cs index 179c355..7399d7c 100644 --- a/src/Indexer/WorkerManager.cs +++ b/src/Indexer/WorkerManager.cs @@ -63,56 +63,14 @@ public class WorkerManager worker.Calls.Add(runOnceCall); break; case "interval": - if (callConfig.Interval is null) - { - _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); - } - }; + IntervalCall intervallCall = new(worker, _logger, callConfig); worker.Calls.Add(intervallCall); break; - case "schedule": // TODO implement scheduled tasks using Quartz + case "schedule": ScheduleCall scheduleCall = new(worker, callConfig, _logger); worker.Calls.Add(scheduleCall); break; 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); worker.Calls.Add(fileUpdateCall); break;