Skip to content

Commit

Permalink
feat: support table view (#44)
Browse files Browse the repository at this point in the history
* feat: 新增表格视图模式展示

* docs: update README_ZH.md
  • Loading branch information
hanshuaikang authored Jan 12, 2025
1 parent b3f9559 commit 42a5e09
Show file tree
Hide file tree
Showing 6 changed files with 435 additions and 249 deletions.
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@
<img src="docs/imgs/black.gif" alt="Nping demo" width="100%">
</p>

**Table View**
<p align="center">
<img src="docs/imgs/table.gif" alt="Nping demo" width="100%">
</p>

## Installation

Expand Down Expand Up @@ -62,6 +66,7 @@ Options:
-i, --interval <INTERVAL> Interval in seconds between pings [default: 0]
-6, --force_ipv6 Force using IPv6
-m, --multiple <MULTIPLE> Specify the maximum number of target addresses, Only works on one target address [default: 0]
-v, --view-type <VIEW_TYPE> view mode graph or table [default: graph]
-h, --help Print help
-V, --version Print version
```
Expand Down
5 changes: 5 additions & 0 deletions README_ZH.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@
<img src="docs/imgs/black.gif" alt="Nping demo" width="100%">
</p>

**表格模式w**
<p align="center">
<img src="docs/imgs/table.gif" alt="Nping demo" width="100%">
</p>

## Installation

Expand Down Expand Up @@ -61,6 +65,7 @@ Options:
-i, --interval <INTERVAL> Interval in seconds between pings [default: 0]
-6, --force_ipv6 Force using IPv6
-m, --multiple <MULTIPLE> Specify the maximum number of target addresses, Only works on one target address [default: 0]
-v, --view-type <VIEW_TYPE> view mode graph or table [default: graph]
-h, --help Print help
-V, --version Print version
```
Expand Down
Binary file added docs/imgs/table.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src/ip_data.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::collections::VecDeque;

#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct IpData {
pub(crate) addr: String,
pub(crate) ip: String,
Expand Down
12 changes: 9 additions & 3 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ use tokio::task;
use crate::ip_data::IpData;
use crate::network::send_ping;


#[derive(Parser, Debug)]
#[command(
version = "v0.2.2",
Expand Down Expand Up @@ -39,6 +38,9 @@ struct Args {
help = "Specify the maximum number of target addresses, Only works on one target address"
)]
multiple: i32,

#[arg(short, long, default_value = "graph", help = "view mode graph or table")]
view_type: String,
}


Expand All @@ -61,7 +63,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {

let targets: Vec<String> = args.target.into_iter().collect::<HashSet<_>>().into_iter().collect();

let res = run_app(targets, args.count, args.interval, running.clone(), args.force_ipv6, args.multiple).await;
let res = run_app(targets, args.count, args.interval, running.clone(), args.force_ipv6, args.multiple, args.view_type).await;

// if error print error message and exit
if let Err(err) = res {
Expand All @@ -78,6 +80,7 @@ async fn run_app(
running: Arc<Mutex<bool>>,
force_ipv6: bool,
multiple: i32,
view_type: String,
) -> Result<(), Box<dyn std::error::Error>> {

// init terminal
Expand Down Expand Up @@ -113,6 +116,8 @@ async fn run_app(
pop_count: 0,
}).collect::<Vec<_>>()));

let view_type = Arc::new(view_type);

let errs = Arc::new(Mutex::new(Vec::new()));

let interval = if interval == 0 { 500 } else { interval * 1000 };
Expand All @@ -127,10 +132,11 @@ async fn run_app(
let ip_data = ip_data.clone();
let errs = errs.clone();
let terminal_guard = terminal_guard.clone(); // Clone terminal_guard here
let view_type = view_type.clone();
async move {
send_ping(addr, i, errs.clone(), count, interval, ip_data.clone(), move || {
let mut terminal_guard = terminal_guard.lock().unwrap();
ui::draw_interface(&mut terminal_guard.terminal.as_mut().unwrap(), &ip_data.lock().unwrap(), &errs.lock().unwrap()).unwrap();
ui::draw_interface(&mut terminal_guard.terminal.as_mut().unwrap(), &view_type, &ip_data.lock().unwrap(), &errs.lock().unwrap()).unwrap();
}, running.clone()).await.unwrap();
}
});
Expand Down
Loading

0 comments on commit 42a5e09

Please sign in to comment.