statusBackfillTemperature.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import fs from "node:fs";
  2. import path from "node:path";
  3. import { execSync } from "node:child_process";
  4. import { fileURLToPath } from "node:url";
  5. const __dirname = path.dirname(fileURLToPath(import.meta.url));
  6. const LOGS_DIR = path.resolve(__dirname, "logs");
  7. function logMaisRecente() {
  8. const candidatos = fs.readdirSync(LOGS_DIR)
  9. .filter((f) => f.startsWith("reavaliar-temperature-zero-") && f.endsWith(".log"))
  10. .map((f) => ({ f, mtime: fs.statSync(path.join(LOGS_DIR, f)).mtimeMs }))
  11. .sort((a, b) => b.mtime - a.mtime);
  12. return candidatos[0]?.f ?? null;
  13. }
  14. function processoRodando() {
  15. try {
  16. const out = execSync("ps aux | grep reavaliarComTemperatureZero | grep -v grep", { encoding: "utf8" });
  17. return out.trim().length > 0;
  18. } catch {
  19. return false;
  20. }
  21. }
  22. function barraProgresso(pct, largura = 30) {
  23. const preenchido = Math.round((pct / 100) * largura);
  24. return "█".repeat(preenchido) + "░".repeat(largura - preenchido);
  25. }
  26. function main() {
  27. const arquivo = logMaisRecente();
  28. if (!arquivo) {
  29. console.log("Nenhum log de reavaliar-temperature-zero encontrado em scripts/logs/.");
  30. return;
  31. }
  32. const conteudo = fs.readFileSync(path.join(LOGS_DIR, arquivo), "utf8");
  33. const linhas = conteudo.trim().split("\n");
  34. const concluido = linhas.find((l) => l.includes("[reavaliar-temp0] concluído"));
  35. const falha = linhas.find((l) => l.includes("falha fatal"));
  36. const progressoLinhas = linhas.filter((l) => l.includes("[reavaliar-temp0] progresso:"));
  37. const ultimaJanela = [...linhas].reverse().find((l) => l.includes("janela"));
  38. console.log(`Log: ${arquivo}`);
  39. console.log(`Processo rodando agora: ${processoRodando() ? "sim" : "não"}`);
  40. if (falha) {
  41. console.log(`\n⚠ FALHA FATAL: ${falha}`);
  42. return;
  43. }
  44. if (concluido) {
  45. console.log(`\n✔ ${concluido}`);
  46. return;
  47. }
  48. if (!progressoLinhas.length) {
  49. console.log("\nAinda sem nenhuma linha de progresso (ou está fora da janela, aguardando reabrir).");
  50. if (ultimaJanela) console.log(ultimaJanela);
  51. return;
  52. }
  53. const ultima = progressoLinhas[progressoLinhas.length - 1];
  54. const m = /progresso: (\d+)\/(\d+) \| erros: (\d+) \| (\d+)min decorridos \| ~(\d+)min restantes/.exec(ultima);
  55. if (!m) {
  56. console.log("\nNão consegui parsear a última linha de progresso:", ultima);
  57. return;
  58. }
  59. const [, processados, total, erros, decorridos, restantes] = m.map(Number);
  60. const pct = Math.round((processados / total) * 100);
  61. console.log(`\n${barraProgresso(pct)} ${pct}%`);
  62. console.log(`${processados}/${total} atendimentos | erros: ${erros}`);
  63. console.log(`${decorridos}min decorridos | ~${restantes}min restantes (~${Math.round(restantes / 60)}h)`);
  64. if (ultimaJanela && ultimaJanela !== ultima) console.log(`\n${ultimaJanela}`);
  65. }
  66. main();