gioser

tawasuyu/brahman

Rust 260TOML 84JSON 14HTML 13339 Sutichaykuna

⎇ b3feaf667ca5f34292ea23c0c70ae4895962491f crates/core/brahman-admin/examples/brahman-status.rs Rust · 98 siq'ikuna · 3.5 KB Ñawpa willay Pi imata llamkarqan ch'uya

feat: Crossreferencia — Card.references como grafo del fractal b3feaf667 · Sergio ·

1//! `brahman-status` — CLI para inspeccionar el estado del Init.
2//!
3//! Conecta al socket admin (default `$XDG_RUNTIME_DIR/brahman-admin.sock`,
4//! override con `$BRAHMAN_ADMIN_SOCKET`), recibe el snapshot, y lo imprime.
5
6use brahman_admin::{client, transport};
7
8#[tokio::main(flavor = "current_thread")]
9async fn main() -> anyhow::Result<()> {
10    let path = transport::default_socket_path();
11    let snap = client::query(&path).await?;
12
13    println!(
14        "Init: server={} protocol={} attached={}",
15        snap.server_version, snap.protocol_version, snap.init_attached
16    );
17    if let Some(ctx) = &snap.current_context {
18        println!("Context: {}", ctx);
19    }
20    println!();
21    println!("Sessions ({}):", snap.sessions.len());
22    if snap.sessions.is_empty() {
23        println!("  (ninguna)");
24    } else {
25        for s in &snap.sessions {
26            let conscious_marker = if s.wit.is_some() { " 🧠" } else { "" };
27            let kind_marker = match s.kind {
28                brahman_card::CardKind::Ente => "ente",
29                brahman_card::CardKind::Data => "data",
30            };
31            println!(
32                "  [{}]  {}  {}{}  lifecycle={:?}  priority={:?}",
33                kind_marker, s.session, s.label, conscious_marker, s.lifecycle, s.priority
34            );
35            if let Some(sock) = &s.service_socket {
36                println!("      socket:     {}", sock.display());
37            }
38            for r in &s.references {
39                println!(
40                    "      ref {:?}  →  {}  ({})",
41                    r.kind, r.target_label, r.target_id
42                );
43            }
44            if let Some(data) = &s.data {
45                if !data.summary.is_empty() {
46                    println!("      summary:    {}", data.summary);
47                }
48                if data.member_count > 0 {
49                    println!(
50                        "      members:    {} (dispersion={:.2})",
51                        data.member_count, data.dispersion
52                    );
53                }
54                if !data.keywords.is_empty() {
55                    println!("      keywords:   {}", data.keywords.join(", "));
56                }
57                if !data.presentation_hint.is_empty() {
58                    println!("      lens hint:  {}", data.presentation_hint);
59                }
60            }
61            if let Some(wit) = &s.wit {
62                println!("      wit: {} / {}", wit.package, wit.world);
63                if !wit.imports.is_empty() {
64                    println!("           imports: {}", wit.imports.join(", "));
65                }
66                if !wit.exports.is_empty() {
67                    println!("           exports: {}", wit.exports.join(", "));
68                }
69            }
70            for f in &s.inputs {
71                println!("      in  {}: {:?}", f.name, f.ty);
72            }
73            for f in &s.outputs {
74                println!("      out {}: {:?}", f.name, f.ty);
75            }
76        }
77    }
78    println!();
79    println!("Matches ({}):", snap.matches.len());
80    if snap.matches.is_empty() {
81        println!("  (ninguno)");
82    } else {
83        for m in &snap.matches {
84            let pin_marker = if m.pinned { "📌" } else { "  " };
85            println!(
86                "  {} {}.{}  ←  {}.{}  via {:?}",
87                pin_marker,
88                m.consumer_label,
89                m.consumer.flow_name,
90                m.producer_label,
91                m.producer.flow_name,
92                m.via
93            );
94        }
95    }
96
97    Ok(())
98}