Comando Doctor
En esta página
Un comando doctor (al estilo de brew doctor o node --check) recorre una
lista de precondiciones del entorno, reporta el estado de cada una y sale con
código 1 en cuanto detecta algún fallo. Es el punto de entrada ideal para nuevos
colaboradores y para smoke tests de CI.
El patrón combina process.* y env.* en una secuencia de verificaciones
secuenciales. Cada check imprime [OK], [!] (advertencia no fatal) o [X]
(fallo), y una variable booleana ok acumula el estado general:
Verifica SO, arquitectura, PID, uptime, uso de memoria, directorio de trabajo,
HOME y una variable de entorno opcional. Sale con process.exit(0) si todo está
OK o process.exit(1) si alguna verificación obligatoria falla.
// 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
Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.
Desafío
Agrega una verificación que lea env.get("DATABASE_URL") y trate la ausencia
como un fallo (no solo una advertencia). Observa cómo eso cambia el código de
salida.
Consulta también