Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 27 additions & 22 deletions cli/src/commands/cluster/mod.rs
Original file line number Diff line number Diff line change
@@ -1,22 +1,27 @@
mod status;

use anyhow::Result;
use clap::{Args as ClapArgs, Subcommand};

#[derive(ClapArgs)]
pub struct Args {
#[command(subcommand)]
pub sub: ClusterCmd,
}

#[derive(Subcommand)]
pub enum ClusterCmd {
/// Print the live state of every node listed in --config.
Status(status::StatusArgs),
}

pub async fn run(args: Args) -> Result<()> {
match args.sub {
ClusterCmd::Status(a) => status::run(a).await,
}
}
mod status;
mod topology;

use anyhow::Result;
use clap::{Args as ClapArgs, Subcommand};

#[derive(ClapArgs)]
pub struct Args {
#[command(subcommand)]
pub sub: ClusterCmd,
}

#[derive(Subcommand)]
pub enum ClusterCmd {
/// Print the live state of every node listed in --config.
Status(status::StatusArgs),

/// Print cluster topology.
Topology(topology::TopologyArgs),
}

pub async fn run(args: Args) -> Result<()> {
match args.sub {
ClusterCmd::Status(a) => status::run(a).await,
ClusterCmd::Topology(a) => topology::run(a).await,
}
}
36 changes: 36 additions & 0 deletions cli/src/commands/cluster/topology.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
use anyhow::{Context, Result};
use clap::Args as ClapArgs;
use std::path::PathBuf;

use crate::config;

#[derive(ClapArgs)]
pub struct TopologyArgs {
/// Path to the cluster TOML config file.
#[arg(long)]
pub config: PathBuf,
}

pub async fn run(args: TopologyArgs) -> Result<()> {
let cfg =
config::load(&args.config).with_context(|| format!("load {}", args.config.display()))?;

println!("OpenLake Cluster Topology");
println!("=========================");

if cfg.nodes.is_empty() {
println!(
"no openlake cluster detected: {} declares zero nodes",
args.config.display()
);
return Ok(());
}

for node in &cfg.nodes {
println!("[node {:>3}] {}", node.id, node.rpc_addr);
}

println!();
println!("cluster contains {} node(s)", cfg.nodes.len());
Ok(())
}