feat(queue): erweiterte Queue mit Cron-Jobs + Tasks, Prioritäten, Delete/Priority API
CI - Build & Test / Backend (.NET) (push) Successful in 26s
CI - Build & Test / Frontend (Vue/TS) (push) Successful in 15s
CI - Build & Test / Security Check (push) Successful in 3s

This commit is contained in:
2026-06-11 15:58:12 +02:00
parent 068b0d31b8
commit 5fb62bef8a
5 changed files with 273 additions and 15 deletions
+35 -1
View File
@@ -639,7 +639,28 @@ public sealed class OpenClawGatewayClient(HttpClient httpClient, IConfiguration
var status = j["state"]?["lastStatus"]?.GetValue<string>()
?? j["status"]?.GetValue<string>()
?? "unknown";
items.Add(new QueueItem(id, name, status));
// Calculate waitTime from nextRun if available
var waitTime = "--";
var nextRunStr = j["nextRun"]?.GetValue<string>()
?? j["next_run"]?.GetValue<string>()
?? j["scheduledAt"]?.GetValue<string>();
if (nextRunStr is not null && DateTimeOffset.TryParse(nextRunStr, out var nextRun))
{
var diff = nextRun - DateTimeOffset.UtcNow;
if (diff.TotalMinutes < 0)
waitTime = "now";
else if (diff.TotalMinutes < 1)
waitTime = "<1m";
else if (diff.TotalMinutes < 60)
waitTime = $"{(int)diff.TotalMinutes}m";
else if (diff.TotalHours < 24)
waitTime = $"{(int)diff.TotalHours}h";
else
waitTime = $"{(int)diff.TotalDays}d";
}
items.Add(new QueueItem(id, name, status, "medium", "cron", waitTime));
}
return items;
}
@@ -649,6 +670,19 @@ public sealed class OpenClawGatewayClient(HttpClient httpClient, IConfiguration
}
}
public async Task<bool> DeleteCronJobAsync(string id)
{
try
{
var result = await InvokeToolAsync("cron", new { action = "delete", id });
return result is not null;
}
catch
{
return false;
}
}
public async Task<DashboardStatus> GetStatusAsync()
{
var gatewayOk = false;