v2.5Erweitert

CLI & Systemprozesse

Velisch eignet sich hervorragend als Ersatz für Bash- oder Python-Skripte im DevOps-Bereich. Das process-Modul bietet volle Kontrolle über Systemprozesse.

Features

Befehle ausführen

Systembefehle mit process.spawn

Prozess-Monitoring

Speicher, Status, Restart

Interaktive CLIs

Prompts, Select, Confirm

Externe Befehle ausführen

Nutzen Sie process.spawn, um Systembefehle auszuführen:

use process

fn backupDatabase() {
    log.info("Starte Backup...");
    
    // Führt 'pg_dump' aus
    let output = process.spawn("pg_dump", [
        "-U", "postgres",
        "-f", "./backup.sql",
        "my_database"
    ]);

    if (output.exitCode == 0) {
        log.info("Backup erfolgreich!");
    } else {
        log.error("Backup fehlgeschlagen: " + output.stderr);
        throw Error("Backup Failed");
    }
}

Prozessmanagement und Überwachung

Sie können laufende Prozesse überwachen und steuern:

use process

fn ensureServiceRunning(serviceName: string) {
    if (process.is_running(serviceName)) {
        let mem = process.get_memory(serviceName); // in MB
        log.info(serviceName + " läuft (RAM: " + mem + "MB)");
        
        if (mem > 1024) {
            log.warn("Speicherleck erkannt, starte neu...");
            process.restart(serviceName);
        }
    } else {
        log.warn(serviceName + " ist down. Starte...");
        process.spawn("systemctl", ["start", serviceName]);
    }
}

Interaktive CLIs bauen

Velisch kann Benutzereingaben lesen und farbige Ausgaben erzeugen:

use console

fn main() {
    console.print("Willkommen zum Setup-Wizard!", "green");
    
    let name = console.prompt("Wie heißt dein Projekt?");
    let type = console.select("Projekttyp wählen:", ["API", "CLI", "Web"]);
    
    if (console.confirm("Soll ich 'git init' ausführen?")) {
        process.spawn("git", ["init"]);
    }
    
    console.print("Fertig!", "bold");
}

Console API

use console

// Text-Ausgabe mit Farben
console.print("Erfolg!", "green");
console.print("Warnung!", "yellow");
console.print("Fehler!", "red");
console.print("Fett!", "bold");

// Benutzereingabe
let name = console.prompt("Dein Name?");
let age = console.prompt("Dein Alter?", "18"); // Mit Default-Wert

// Ja/Nein Abfrage
if (console.confirm("Fortfahren?")) {
    // ...
}

// Auswahl-Menü
let choice = console.select("Wähle eine Option:", [
    "Option A",
    "Option B", 
    "Option C"
]);

// Passwort-Eingabe (versteckt)
let password = console.password("Passwort eingeben:");

// Progress Bar
let progress = console.progress(100);
for i in 0..100 {
    progress.update(i);
    utils.sleep("50ms");
}
progress.finish();

Vollständiges Beispiel: Deploy-Script

use process
use console

fn deploy(env: string) {
    console.print("🚀 Deployment nach " + env, "cyan");
    
    // 1. Tests ausführen
    console.print("Running tests...", "yellow");
    let tests = process.spawn("velin", ["test"]);
    if (tests.exitCode != 0) {
        console.print("❌ Tests fehlgeschlagen!", "red");
        return;
    }
    console.print("✅ Tests bestanden", "green");
    
    // 2. Build
    console.print("Building...", "yellow");
    let build = process.spawn("velin", ["build", "--release"]);
    if (build.exitCode != 0) {
        console.print("❌ Build fehlgeschlagen!", "red");
        return;
    }
    
    // 3. Deploy
    if (console.confirm("Deploy nach " + env + "?")) {
        process.spawn("ssh", [
            env + ".example.com",
            "cd /app && git pull && systemctl restart app"
        ]);
        console.print("✅ Deployed!", "green");
    }
}

fn main() {
    let env = console.select("Wohin deployen?", ["staging", "production"]);
    deploy(env);
}

Best Practices

Exit Codes prüfen

Immer exitCode != 0 abfangen

Timeout setzen

Lange Prozesse mit Timeout absichern

Logging

stdout/stderr loggen für Debugging

Graceful Shutdown

Signale wie SIGTERM abfangen