From 5921e524a966f1865852a955717baa14dbb58053 Mon Sep 17 00:00:00 2001 From: Glax Date: Fri, 7 Mar 2025 11:32:59 +0100 Subject: [PATCH] Option to disable/enable jobs --- API/Controllers/JobController.cs | 1 + API/ModifyJobRecord.cs | 2 +- API/Schema/Jobs/Job.cs | 1 + API/Tranga.cs | 9 ++++++--- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/API/Controllers/JobController.cs b/API/Controllers/JobController.cs index 260cc53..1fbba01 100644 --- a/API/Controllers/JobController.cs +++ b/API/Controllers/JobController.cs @@ -212,6 +212,7 @@ public class JobController(PgsqlContext context) : Controller return NotFound(); ret.RecurrenceMs = modifyJobRecord.RecurrenceMs ?? ret.RecurrenceMs; + ret.Enabled = modifyJobRecord.Enabled ?? ret.Enabled; context.SaveChanges(); return new AcceptedResult(ret.JobId, ret); diff --git a/API/ModifyJobRecord.cs b/API/ModifyJobRecord.cs index 4c9a476..28b0260 100644 --- a/API/ModifyJobRecord.cs +++ b/API/ModifyJobRecord.cs @@ -1,3 +1,3 @@ namespace API; -public record ModifyJobRecord(ulong? RecurrenceMs); \ No newline at end of file +public record ModifyJobRecord(ulong? RecurrenceMs, bool? Enabled); \ No newline at end of file diff --git a/API/Schema/Jobs/Job.cs b/API/Schema/Jobs/Job.cs index fc23512..866eacc 100644 --- a/API/Schema/Jobs/Job.cs +++ b/API/Schema/Jobs/Job.cs @@ -26,6 +26,7 @@ public abstract class Job [NotMapped] public DateTime NextExecution => LastExecution.AddMilliseconds(RecurrenceMs); public JobState state { get; internal set; } = JobState.Waiting; + public bool Enabled { get; internal set; } = true; public Job(string jobId, JobType jobType, ulong recurrenceMs, Job? parentJob = null, ICollection? dependsOnJobs = null) : this(jobId, jobType, recurrenceMs, parentJob?.JobId, dependsOnJobs?.Select(j => j.JobId).ToList()) diff --git a/API/Tranga.cs b/API/Tranga.cs index 9c15dc4..20b786e 100644 --- a/API/Tranga.cs +++ b/API/Tranga.cs @@ -69,18 +69,21 @@ public static class Tranga Log.Info(TRANGA); while (true) { - List completedJobs = context.Jobs.Where(j => j.state >= JobState.Completed && j.state < JobState.Failed).ToList(); + List completedJobs = context.Jobs.Where(j => j.state >= JobState.Completed).ToList(); foreach (Job job in completedJobs) if (job.RecurrenceMs <= 0) context.Jobs.Remove(job); else { + if (job.state >= JobState.Failed) + job.Enabled = false; + else + job.state = JobState.Waiting; job.LastExecution = DateTime.UtcNow; - job.state = JobState.Waiting; context.Jobs.Update(job); } - List runJobs = context.Jobs.Where(j => j.state <= JobState.Running).ToList() + List runJobs = context.Jobs.Where(j => j.state <= JobState.Running && j.Enabled == true).ToList() .Where(j => j.NextExecution < DateTime.UtcNow).ToList(); foreach (Job job in runJobs) {