Files
jontsai_command-center/src/actions.js

77 lines
2.4 KiB
JavaScript

const ALLOWED_ACTIONS = new Set([
"gateway-status",
"gateway-restart",
"sessions-list",
"cron-list",
"health-check",
"clear-stale-sessions",
]);
function executeAction(action, deps) {
const { runOpenClaw, extractJSON, PORT } = deps;
const results = { success: false, action, output: "", error: null };
if (!ALLOWED_ACTIONS.has(action)) {
results.error = `Unknown action: ${action}`;
return results;
}
try {
switch (action) {
case "gateway-status":
results.output = runOpenClaw("gateway status 2>&1") || "Unknown";
results.success = true;
break;
case "gateway-restart":
results.output = "To restart gateway, run: openclaw gateway restart";
results.success = true;
results.note = "Dashboard cannot restart gateway for safety";
break;
case "sessions-list":
results.output = runOpenClaw("sessions 2>&1") || "No sessions";
results.success = true;
break;
case "cron-list":
results.output = runOpenClaw("cron list 2>&1") || "No cron jobs";
results.success = true;
break;
case "health-check": {
const gateway = runOpenClaw("gateway status 2>&1");
const sessions = runOpenClaw("sessions --json 2>&1");
let sessionCount = 0;
try {
const data = JSON.parse(sessions);
sessionCount = data.sessions?.length || 0;
} catch (e) {}
results.output = [
`Gateway: ${gateway?.includes("running") ? "OK Running" : "NOT Running"}`,
`Sessions: ${sessionCount}`,
`Dashboard: OK Running on port ${PORT}`,
].join("\n");
results.success = true;
break;
}
case "clear-stale-sessions": {
const staleOutput = runOpenClaw("sessions --json 2>&1");
let staleCount = 0;
try {
const staleJson = extractJSON(staleOutput);
if (staleJson) {
const data = JSON.parse(staleJson);
staleCount = (data.sessions || []).filter((s) => s.ageMs > 24 * 60 * 60 * 1000).length;
}
} catch (e) {}
results.output = `Found ${staleCount} stale sessions (>24h old).\nTo clean: openclaw sessions prune`;
results.success = true;
break;
}
}
} catch (e) {
results.error = e.message;
}
return results;
}
module.exports = { executeAction, ALLOWED_ACTIONS };