warriors/trisha/cli/node.rs

use std::process;

use clap::{Args, Subcommand};

use crate::neptune::NeptuneClient;
use crate::NetworkArgs;

#[derive(Args)]
pub struct NodeArgs {
    #[command(subcommand)]
    pub cmd: NodeCmd,
    #[command(flatten)]
    pub network: NetworkArgs,
}

#[derive(Subcommand)]
pub enum NodeCmd {
    /// Show block height, peers, and mempool
    Status,
}

pub fn cmd_node(args: NodeArgs) {
    let (state, rpc_port) = args.network.resolve().unwrap_or_else(|e| {
        eprintln!("error: {}", e);
        process::exit(1);
    });
    match args.cmd {
        NodeCmd::Status => cmd_node_status(rpc_port, state.display_name),
    }
}

fn cmd_node_status(rpc_port: u16, display_name: &str) {
    eprintln!("Network: {}", display_name);
    let client = NeptuneClient::new(rpc_port);

    let height = client.block_height().unwrap_or_else(|e| {
        eprintln!("error: {}", e);
        process::exit(1);
    });

    let peers = client.peer_info().unwrap_or_else(|e| {
        eprintln!("warning: peer-info failed: {}", e);
        "(unavailable)".to_string()
    });

    let mempool = client.mempool_tx_count().unwrap_or_else(|_| "?".to_string());

    println!("Block height : {}", height);
    println!("Mempool txs  : {}", mempool);
    println!("Peers        :");
    if peers.is_empty() || peers == "(unavailable)" {
        println!("  {}", peers);
    } else {
        for line in peers.lines() {
            println!("  {}", line);
        }
    }
}

Homonyms

soft3/foculus/src/node.rs
soft3/radio/iroh-ffi/src/node.rs
cyb/evy/crates/evy_engine_dispatch/src/node.rs
soft3/radio/iroh-ffi/iroh-js/src/node.rs
cyb/evy/forks/bevy_core_pipeline/src/upscaling/node.rs
cyb/evy/forks/bevy_post_process/src/motion_blur/node.rs
cyb/evy/forks/bevy_post_process/src/auto_exposure/node.rs
cyb/evy/forks/bevy_core_pipeline/src/tonemapping/node.rs
cyb/evy/forks/bevy_anti_alias/src/dlss/node.rs
cyb/evy/forks/bevy_core_pipeline/src/prepass/node.rs
cyb/evy/forks/bevy_ecs/src/schedule/node.rs
cyb/evy/forks/bevy_core_pipeline/src/deferred/node.rs
cyb/evy/forks/bevy_render/src/render_graph/node.rs
cyb/evy/forks/bevy_anti_alias/src/fxaa/node.rs
cyb/evy/forks/bevy_anti_alias/src/contrast_adaptive_sharpening/node.rs
cyb/evy/forks/bevy_pbr/src/atmosphere/node.rs
neural/trident/src/neural/data/tir_graph/node.rs
cyb/evy/forks/bevy_core_pipeline/src/oit/resolve/node.rs

Graph