+
+
+ 📜 {title}{" "}
+
+ · {subtitle}
+
+
+
+ setRunIdFilter(e.target.value === "" ? "" : Number(e.target.value))
+ }
+ placeholder="job_id / run_id (опц.)"
+ style={{
+ padding: "8px 10px",
+ border: "1px solid #d1d5db",
+ borderRadius: 6,
+ fontSize: 14,
+ width: 180,
+ boxSizing: "border-box",
+ }}
+ />
+
+
+ {!token ? (
+
+ Введите Admin Token чтобы видеть лог.
+
+ ) : logs.isLoading ? (
+ Загрузка…
+ ) : logs.isError ? (
+ Ошибка: {String(logs.error)}
+ ) : (logs.data?.length ?? 0) === 0 ? (
+
+ Нет событий
+ {runIdFilter !== "" ? ` для run_id=${runIdFilter}` : ""}.
+ {scraperType === "objective"
+ ? " Objective ETL пока не пишет в общий лог."
+ : " Когда worker запустится — появятся записи."}
+
+ ) : (
+
+ {(logs.data ?? []).map((l) => {
+ const color =
+ l.level === "error"
+ ? "#fca5a5"
+ : l.level === "warn"
+ ? "#fcd34d"
+ : "#a3e635";
+ return (
+
+ {l.ts?.slice(11, 19)} {" "}
+ {l.level.toUpperCase()} {" "}
+
+ [run-{l.run_id}
+ {l.stage ? ` · ${l.stage}` : ""}
+ {l.entity_id ? ` · ${l.entity_id}` : ""}]
+ {" "}
+ {l.message}
+
+ );
+ })}
+
+ )}
+
+ );
+}