mirror of
https://github.com/C9Glax/tranga.git
synced 2025-07-04 09:54:16 +02:00
Fix Worker-Cycle:
Periodic set last execution, Print Running Worker-Names when done
This commit is contained in:
@ -91,7 +91,7 @@ public static class Tranga
|
|||||||
foreach (BaseWorker baseWorker in AllWorkers.DueWorkers())
|
foreach (BaseWorker baseWorker in AllWorkers.DueWorkers())
|
||||||
StartWorkers.Add(baseWorker);
|
StartWorkers.Add(baseWorker);
|
||||||
|
|
||||||
foreach (BaseWorker worker in StartWorkers)
|
foreach (BaseWorker worker in StartWorkers.ToArray())
|
||||||
{
|
{
|
||||||
if(RunningWorkers.ContainsKey(worker))
|
if(RunningWorkers.ContainsKey(worker))
|
||||||
continue;
|
continue;
|
||||||
@ -109,6 +109,8 @@ public static class Tranga
|
|||||||
RunningWorkers.Add(libraryContextWorker, libraryContextWorker.DoWork());
|
RunningWorkers.Add(libraryContextWorker, libraryContextWorker.DoWork());
|
||||||
}else
|
}else
|
||||||
RunningWorkers.Add(worker, worker.DoWork());
|
RunningWorkers.Add(worker, worker.DoWork());
|
||||||
|
|
||||||
|
StartWorkers.Remove(worker);
|
||||||
}
|
}
|
||||||
Thread.Sleep(Settings.WorkCycleTimeoutMs);
|
Thread.Sleep(Settings.WorkCycleTimeoutMs);
|
||||||
}
|
}
|
||||||
@ -117,8 +119,10 @@ public static class Tranga
|
|||||||
private static void CheckRunningWorkers()
|
private static void CheckRunningWorkers()
|
||||||
{
|
{
|
||||||
KeyValuePair<BaseWorker, Task<BaseWorker[]>>[] done = RunningWorkers.Where(kv => kv.Value.IsCompleted).ToArray();
|
KeyValuePair<BaseWorker, Task<BaseWorker[]>>[] done = RunningWorkers.Where(kv => kv.Value.IsCompleted).ToArray();
|
||||||
|
if (done.Length < 1)
|
||||||
|
return;
|
||||||
Log.Info($"Done: {done.Length}");
|
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<BaseWorker[]> task) in done)
|
foreach ((BaseWorker worker, Task<BaseWorker[]> task) in done)
|
||||||
{
|
{
|
||||||
RunningWorkers.Remove(worker);
|
RunningWorkers.Remove(worker);
|
||||||
|
@ -88,6 +88,8 @@ public abstract class BaseWorker : Identifiable
|
|||||||
DateTime endTime = DateTime.UtcNow;
|
DateTime endTime = DateTime.UtcNow;
|
||||||
Log.Info($"Completed {this}\n\t{endTime.Subtract(startTime).TotalMilliseconds} ms");
|
Log.Info($"Completed {this}\n\t{endTime.Subtract(startTime).TotalMilliseconds} ms");
|
||||||
this.State = WorkerExecutionState.Completed;
|
this.State = WorkerExecutionState.Completed;
|
||||||
|
if(this is IPeriodic periodic)
|
||||||
|
periodic.LastExecution = DateTime.UtcNow;
|
||||||
});
|
});
|
||||||
task.Start();
|
task.Start();
|
||||||
this.State = WorkerExecutionState.Running;
|
this.State = WorkerExecutionState.Running;
|
||||||
|
@ -2,7 +2,7 @@ namespace API.Workers;
|
|||||||
|
|
||||||
public interface IPeriodic
|
public interface IPeriodic
|
||||||
{
|
{
|
||||||
protected DateTime LastExecution { get; set; }
|
internal DateTime LastExecution { get; set; }
|
||||||
public TimeSpan Interval { get; set; }
|
public TimeSpan Interval { get; set; }
|
||||||
public DateTime NextExecution => LastExecution.Add(Interval);
|
public DateTime NextExecution => LastExecution.Add(Interval);
|
||||||
public bool IsDue => NextExecution <= DateTime.UtcNow;
|
public bool IsDue => NextExecution <= DateTime.UtcNow;
|
||||||
|
Reference in New Issue
Block a user