Pular para o conteúdo

Comando Doctor

Nesta página

Um comando doctor (ao estilo brew doctor ou node --check) percorre uma lista de pré-condições do ambiente, relata o status de cada uma e sai com código 1 assim que detecta alguma falha. É o ponto de entrada ideal para novos colaboradores e para smoke tests de CI.

O padrão combina process.* e env.* numa sequência de verificações sequenciais. Cada check imprime [OK], [!] (aviso não-fatal) ou [X] (falha), e uma variável booleana ok acumula o estado geral:

Verifica SO, arquitetura, PID, uptime, uso de memória, diretório de trabalho, HOME e uma variável de ambiente opcional. Encerra com process.exit(0) se tudo estiver OK ou process.exit(1) se alguma verificação obrigatória falhar.

08-doctor.zolo
Playground
// Feature: doctor / diagnostics — self-check script

// Syntax: combines `process.*` + `env.*` + custom checks. Prints

// a readable status and exits with a non-zero code if anything fails.

// When to use: a `myapp doctor` command for new users; CI smoke tests.

// PID and memory rss are per-run; Uptime is wall-clock (collapsed by the

// harness timing rule). The subs neutralize only those operands — the OK/FAIL

// checks, cwd, HOME and final status stay exact.

// parity-sub: PID:\s+\d+ => PID: <N>

// parity-sub: rss=\d+ => rss=<N>


use std::process
use std::env

print("=== Zolo doctor ===\n")

var ok = true

// 1. Platform

print("OS:   {env.os()}")
print("ARCH: {env.arch()}")

// 2. PID, uptime, memory.

print("PID:    {process.pid()}")
print("Uptime: {process.uptime()}s")
let mem = process.memory_usage()
print("Memory: rss={mem.rss} bytes")

// 3. Working directory — must be readable.

let cwd, err = process.cwd()
if cwd == nil {
  print("[X] cwd unavailable: {err}")

  ok = false
} else {
  print("[OK] cwd: {cwd}")
}

// 4. HOME defined.

let home = env.home_dir()
if home == nil {
  print("[X] HOME not detected")

  ok = false
} else {
  print("[OK] HOME: {home}")
}

// 5. Required environment variable?

let demo = env.get("ZOLO_DOCTOR_REQUIRED")
if demo == nil {
  // Warning, not failure (tweak to your app).

  print("[!]  ZOLO_DOCTOR_REQUIRED not set (optional)")
} else {
  print("[OK] ZOLO_DOCTOR_REQUIRED = {demo}")
}

print("")
if ok {
  print("status: OK")
  process.exit(0)
} else {
  print("status: FAILED")
  process.exit(1)
}
// expected (healthy):

//   ...checks...

//   status: OK

Requer a CLI/host do Zolo — abra no playground ou rode localmente.

Desafio

Acrescente uma verificação que leia env.get("DATABASE_URL") e trate a ausência como falha (não apenas aviso). Observe como isso muda o código de saída.

Buscar no Zolo

9 resultados

enespt-br