From 9743bb6e8ec8ca189b2017d3b1a89a7986e0ed3a Mon Sep 17 00:00:00 2001 From: glax Date: Thu, 3 Jul 2025 22:48:06 +0200 Subject: [PATCH] Fix Worker-Cycle: Periodic set last execution, Print Running Worker-Names when done --- API/Tranga.cs | 8 ++++++-- API/Workers/BaseWorker.cs | 2 ++ API/Workers/IPeriodic.cs | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/API/Tranga.cs b/API/Tranga.cs index 6deb350..376b1f1 100644 --- a/API/Tranga.cs +++ b/API/Tranga.cs @@ -91,7 +91,7 @@ public static class Tranga foreach (BaseWorker baseWorker in AllWorkers.DueWorkers()) StartWorkers.Add(baseWorker); - foreach (BaseWorker worker in StartWorkers) + foreach (BaseWorker worker in StartWorkers.ToArray()) { if(RunningWorkers.ContainsKey(worker)) continue; @@ -109,6 +109,8 @@ public static class Tranga RunningWorkers.Add(libraryContextWorker, libraryContextWorker.DoWork()); }else RunningWorkers.Add(worker, worker.DoWork()); + + StartWorkers.Remove(worker); } Thread.Sleep(Settings.WorkCycleTimeoutMs); } @@ -117,8 +119,10 @@ public static class Tranga private static void CheckRunningWorkers() { KeyValuePair>[] done = RunningWorkers.Where(kv => kv.Value.IsCompleted).ToArray(); + if (done.Length < 1) + return; Log.Info($"Done: {done.Length}"); - Log.Debug(string.Join("\n", done.Select(d => d.ToString()))); + Log.Debug(string.Join("\n", done.Select(d => d.Key.ToString()))); foreach ((BaseWorker worker, Task task) in done) { RunningWorkers.Remove(worker); diff --git a/API/Workers/BaseWorker.cs b/API/Workers/BaseWorker.cs index 4fbcc91..2be3601 100644 --- a/API/Workers/BaseWorker.cs +++ b/API/Workers/BaseWorker.cs @@ -88,6 +88,8 @@ public abstract class BaseWorker : Identifiable DateTime endTime = DateTime.UtcNow; Log.Info($"Completed {this}\n\t{endTime.Subtract(startTime).TotalMilliseconds} ms"); this.State = WorkerExecutionState.Completed; + if(this is IPeriodic periodic) + periodic.LastExecution = DateTime.UtcNow; }); task.Start(); this.State = WorkerExecutionState.Running; diff --git a/API/Workers/IPeriodic.cs b/API/Workers/IPeriodic.cs index 14c0fc3..597305f 100644 --- a/API/Workers/IPeriodic.cs +++ b/API/Workers/IPeriodic.cs @@ -2,7 +2,7 @@ namespace API.Workers; public interface IPeriodic { - protected DateTime LastExecution { get; set; } + internal DateTime LastExecution { get; set; } public TimeSpan Interval { get; set; } public DateTime NextExecution => LastExecution.Add(Interval); public bool IsDue => NextExecution <= DateTime.UtcNow;