Argos
Sistema de ejecución de comandos y orquestación de tareas - Nivel 1B de Proyecto Ypsilon
Argos es una librería base sin dependencias para ejecución de comandos del sistema y gestión de tareas asíncronas.
Arquitectura
Argos forma parte de Proyecto Ypsilon:
┌─────────────────┐
│ NIVEL 3: ARK │
│ Microframework │
│ Global │
└────────┬────────┘
│
┌────────▼─────────┐
│ NIVEL 2: AEGIS │
│ CLI/TUI │
│ Framework │
└────┬─────┬───────┘
│ │
┌─────────────┘ └─────────────┐
│ │
┌──────▼────────┐ ┌─────────▼──────┐
│ NIVEL 1A: │ │ NIVEL 1B: │
│ AURORA │ │ ARGOS │
│ Formatting & │ │ Execution & │
│ Rendering │ │ Orchestration │
└───────────────┘ └────────────────┘
BASE BASE
(sin deps) (sin deps) ← ESTÁS AQUÍ
Características
- 🚀 Ejecución de comandos del sistema con resultados estructurados
- ⚡ Tareas asíncronas con control de concurrencia
- 📝 Logging estructurado sin dependencias de UI
- 🛠️ Sin dependencias externas - completamente autónomo
- 🎯 Devuelve structs en lugar de IO para fácil procesamiento
Instalación
Agrega a tu mix.exs:
def deps do
[
{:argos, "~> 1.0.0"}
]
end
Uso Rápido
Ejecución de comandos
# Ejecución simple
result = Argos.exec_command("ls", ["-la"])
if result.success? do
IO.puts("Output: #{result.output}")
end
# Ejecución con sudo
result = Argos.exec_sudo("systemctl restart nginx")
# Ejecución interactiva
result = Argos.exec_interactive("vim", ["config.txt"])
# Ejecución básica sin logging
result = Argos.exec_raw("pwd")
Tareas en paralelo
tasks = [
{"compile", "mix compile"},
{"test", {:function, &run_tests/0}},
{"lint", "mix credo --strict"}
]
result = Argos.run_parallel(tasks, max_concurrency: 2)
IO.inspect(result.results)
Logging estructurado
# Logging simple
Argos.log(:info, "Operation completed")
# Logging con metadata
Argos.log(:info, "Task completed", task_id: 123, duration: 1500)
# Logging de comandos
Argos.log_command("ls -la", 0, 250, "total 8...")
API Principal
Ejecución de Comandos
Argos.exec_command/3- Ejecuta un comando del sistemaArgos.exec_raw/2- Ejecución básica sin logging adicionalArgos.exec_sudo/2- Ejecuta un comando con privilegios sudoArgos.exec_interactive/2- Ejecuta un comando de forma interactiva
Tareas Asíncronas
Argos.run_parallel/2- Ejecuta múltiples tareas en paraleloArgos.start_async_task/3- Inicia una tarea asíncronaArgos.stop_async_task/1- Detiene una tarea asíncronaArgos.get_async_task/1- Obtiene el estado de una tarea
Logging
Argos.log/3- Registra un mensaje con metadata estructuradaArgos.log_command/4- Registra la ejecución de un comandoArgos.log_task/4- Registra la ejecución de una tarea
Gestión de Procesos
Argos.kill_process/1- Mata un proceso por nombreArgos.kill_processes/1- Mata múltiples procesosArgos.halt/0- Detiene la ejecución del sistema
Módulos Principales
Argos.Command- Ejecución de comandos del sistemaArgos.AsyncTask- Gestión de tareas asíncronasArgos.Log- Logging estructuradoArgos.Structs.CommandResult- Resultado de comandosArgos.Structs.TaskResult- Resultado de tareas
Estructuras de Datos
CommandResult
%Argos.Structs.CommandResult{
command: "ls -la",
args: [],
output: "total 8\n-rw-r--r--...",
exit_code: 0,
duration: 150,
success?: true,
error: nil
}
TaskResult
%Argos.Structs.TaskResult{
task_name: "compile",
result: %CommandResult{},
duration: 2500,
success?: true,
error: nil
}
Uso como CLI
Argos también puede usarse como una herramienta de línea de comandos independiente:
# Ejecutar un comando
argos exec ls -la
# Ejecutar con sudo
argos sudo "systemctl restart nginx"
# Ejecutar comando sin logging adicional
argos raw "pwd"
# Ejecutar tareas en paralelo
argos parallel --task "compile:mix compile" --task "test:mix test"
# Matar un proceso
argos kill "process_name"
# Listar procesos
argos ps
Licencia
Apache 2.0 - Consulta el archivo LICENSE para más detalles.