Add atuin status
(#830)
Useful for debugging, checking the state of things, and for if you forget your username!
This commit is contained in:
parent
ca5e58ad01
commit
0d16a113c5
6 changed files with 58 additions and 1 deletions
12
Cargo.lock
generated
12
Cargo.lock
generated
|
@ -80,6 +80,7 @@ dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"clap",
|
"clap",
|
||||||
"clap_complete",
|
"clap_complete",
|
||||||
|
"colored",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
"directories",
|
"directories",
|
||||||
|
@ -383,6 +384,17 @@ dependencies = [
|
||||||
"os_str_bytes",
|
"os_str_bytes",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "colored"
|
||||||
|
version = "2.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
|
||||||
|
dependencies = [
|
||||||
|
"atty",
|
||||||
|
"lazy_static",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "config"
|
name = "config"
|
||||||
version = "0.13.2"
|
version = "0.13.2"
|
||||||
|
|
|
@ -75,6 +75,7 @@ tiny-bip39 = "1"
|
||||||
futures-util = "0.3"
|
futures-util = "0.3"
|
||||||
ratatui = "0.20.1"
|
ratatui = "0.20.1"
|
||||||
fuzzy-matcher = "0.3.7"
|
fuzzy-matcher = "0.3.7"
|
||||||
|
colored = "2.0.0"
|
||||||
|
|
||||||
[dependencies.tracing-subscriber]
|
[dependencies.tracing-subscriber]
|
||||||
version = "0.3"
|
version = "0.3"
|
||||||
|
|
|
@ -69,6 +69,7 @@ pub struct IndexResponse {
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub struct StatusResponse {
|
pub struct StatusResponse {
|
||||||
pub count: i64,
|
pub count: i64,
|
||||||
|
pub username: String,
|
||||||
pub deleted: Vec<String>,
|
pub deleted: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,5 +31,9 @@ pub async fn status<DB: Database>(
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(Json(StatusResponse { count, deleted }))
|
Ok(Json(StatusResponse {
|
||||||
|
count,
|
||||||
|
deleted,
|
||||||
|
username: user.username,
|
||||||
|
}))
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ use atuin_client::{database::Database, settings::Settings};
|
||||||
mod login;
|
mod login;
|
||||||
mod logout;
|
mod logout;
|
||||||
mod register;
|
mod register;
|
||||||
|
mod status;
|
||||||
|
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand)]
|
||||||
#[command(infer_subcommands = true)]
|
#[command(infer_subcommands = true)]
|
||||||
|
@ -32,6 +33,8 @@ pub enum Cmd {
|
||||||
#[arg(long)]
|
#[arg(long)]
|
||||||
base64: bool,
|
base64: bool,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Status,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Cmd {
|
impl Cmd {
|
||||||
|
@ -41,6 +44,7 @@ impl Cmd {
|
||||||
Self::Login(l) => l.run(&settings).await,
|
Self::Login(l) => l.run(&settings).await,
|
||||||
Self::Logout => logout::run(&settings),
|
Self::Logout => logout::run(&settings),
|
||||||
Self::Register(r) => r.run(&settings).await,
|
Self::Register(r) => r.run(&settings).await,
|
||||||
|
Self::Status => status::run(&settings, db).await,
|
||||||
Self::Key { base64 } => {
|
Self::Key { base64 } => {
|
||||||
use atuin_client::encryption::{encode_key, load_key};
|
use atuin_client::encryption::{encode_key, load_key};
|
||||||
let key = load_key(&settings).wrap_err("could not load encryption key")?;
|
let key = load_key(&settings).wrap_err("could not load encryption key")?;
|
||||||
|
|
35
src/command/client/sync/status.rs
Normal file
35
src/command/client/sync/status.rs
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
use atuin_client::{
|
||||||
|
api_client, database::Database, encryption::load_encoded_key, settings::Settings,
|
||||||
|
};
|
||||||
|
use colored::Colorize;
|
||||||
|
use eyre::Result;
|
||||||
|
|
||||||
|
pub async fn run(settings: &Settings, db: &impl Database) -> Result<()> {
|
||||||
|
let client = api_client::Client::new(
|
||||||
|
&settings.sync_address,
|
||||||
|
&settings.session_token,
|
||||||
|
load_encoded_key(settings)?,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
let status = client.status().await?;
|
||||||
|
let last_sync = Settings::last_sync()?;
|
||||||
|
let local_count = db.history_count().await?;
|
||||||
|
|
||||||
|
println!("{}", "[Local]".green());
|
||||||
|
|
||||||
|
if settings.auto_sync {
|
||||||
|
println!("Sync frequency: {}", settings.sync_frequency);
|
||||||
|
println!("Last sync: {last_sync}");
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("History count: {local_count}\n");
|
||||||
|
|
||||||
|
if settings.auto_sync {
|
||||||
|
println!("{}", "[Remote]".green());
|
||||||
|
println!("Address: {}", settings.sync_address);
|
||||||
|
println!("Username: {}", status.username);
|
||||||
|
println!("History count: {}", status.count);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
Loading…
Reference in a new issue