Show effective worker enabled state

This commit is contained in:
Your Name
2026-08-03 17:36:22 +05:00
parent 6b873b3aee
commit b38a70b3af
2 changed files with 63 additions and 16 deletions
+44 -1
View File
@@ -3432,6 +3432,7 @@ async def workers(request: Request):
"""
)
settings_rows = await pool.fetch("SELECT * FROM app_settings ORDER BY category, key")
setting_values: dict[str, Any] = {}
settings = []
for row in settings_rows:
item = dict(row)
@@ -3440,6 +3441,7 @@ async def workers(request: Request):
item["value_json"] = json.loads(item["value_json"])
except json.JSONDecodeError:
pass
setting_values[str(item.get("key") or "")] = item.get("value_json")
if item.get("key") in {"ai_writer_categories", "tg_poster_schedule_json", "vk_poster_schedule_json", *AI_WORKER_ENABLED_SETTINGS.values()}:
continue
settings.append(item)
@@ -3460,6 +3462,19 @@ async def workers(request: Request):
workers=[
{
**dict(r),
"setting_enabled": (
bool(setting_values.get(AI_WORKER_ENABLED_SETTINGS[str(r["name"])]))
if str(r["name"]) in AI_WORKER_ENABLED_SETTINGS
else None
),
"effective_enabled": (
bool(r["enabled"])
and (
bool(setting_values.get(AI_WORKER_ENABLED_SETTINGS[str(r["name"])]))
if str(r["name"]) in AI_WORKER_ENABLED_SETTINGS
else True
)
),
"meta_json": json.loads(r["meta_json"]) if isinstance(r["meta_json"], str) else (r["meta_json"] or {}),
}
for r in rows
@@ -3750,6 +3765,35 @@ async def worker_toggle(request: Request, worker_name: str, csrf_token: str = Fo
pool = await get_pool()
async with pool.acquire() as conn:
async with conn.transaction():
setting_key = AI_WORKER_ENABLED_SETTINGS.get(worker_name)
if setting_key:
current = await conn.fetchrow(
"""
SELECT wc.enabled AS worker_enabled,
COALESCE((s.value_json)::boolean, FALSE) AS setting_enabled
FROM worker_controls wc
LEFT JOIN app_settings s ON s.key=$2
WHERE wc.name=$1
""",
worker_name,
setting_key,
)
if not current:
return redirect("/workers")
enabled = not (bool(current["worker_enabled"]) and bool(current["setting_enabled"]))
await conn.execute(
"""
UPDATE worker_controls
SET enabled=$2,
updated_by=$3,
updated_at=NOW()
WHERE name=$1
""",
worker_name,
enabled,
user["id"],
)
else:
row = await conn.fetchrow(
"""
UPDATE worker_controls
@@ -3765,7 +3809,6 @@ async def worker_toggle(request: Request, worker_name: str, csrf_token: str = Fo
if not row:
return redirect("/workers")
enabled = bool(row["enabled"])
setting_key = AI_WORKER_ENABLED_SETTINGS.get(worker_name)
if setting_key:
await conn.execute(
"""
+5 -1
View File
@@ -27,10 +27,14 @@
<tr class="hover:bg-app-surfaceHover transition-colors">
<td class="px-4 py-3 font-mono font-bold text-white">{{ w.name }}</td>
<td class="px-4 py-3">
{% if w.enabled %}
{% if w.effective_enabled %}
<span class="badge badge-success px-2 py-0.5 flex items-center gap-1.5 w-max">
<span class="w-1.5 h-1.5 rounded-full bg-app-success"></span> Включен
</span>
{% elif w.enabled and w.setting_enabled == false %}
<span class="badge badge-warning px-2 py-0.5 flex items-center gap-1.5 w-max">
<span class="w-1.5 h-1.5 rounded-full bg-app-warning"></span> Выключен настройкой
</span>
{% else %}
<span class="badge badge-error px-2 py-0.5 flex items-center gap-1.5 w-max">
<span class="w-1.5 h-1.5 rounded-full bg-app-error"></span> Выключен