SAFE Network Vault Dashboard

vdash is a SAFE Network Vault/Node dashboard for the terminal. It is written in Rust, using tui-rs to create the terminal UI and linemux to monitor vault logfiles on the local machine.

Status: working on Windows, MacOS and Linux using 'baby-fleming-vaults' tests.

screenshot of vdash v0.2.0

Features

vdash will load historic metrics from one or more Safe node logfiles and display these with live updates in the terminal (see above).

You can cycle through different Safe nodes using left/right arrow keys, and zoom the timeline scale in/out using 'i' and 'o' (or '+' and '-').

Press 'q' to quit.

Feature requests and discussion are currently summarised in the opening post of the Safe Network forum topic: Vault Dashboard ideas please!.

For more details and progress see Roadmap (below).

Operating Systems

Install from crates.io

1 Install Rust via https://doc.rust-lang.org/cargo/getting-started/installation.html

2a. Linux (Ubuntu)

sudo apt-get install build-essential

2b. Linux/MacOS install vdash:

cargo install vdash
vdash --help

2c. Windows install vdash-crossterm:

To install on Windows you must build manually and use the 'nightly' compiler until the 'itarget' feature becomes part of 'stable', so install Rust nightly using rustup:

rustup toolchain install nightly

To build vdash-crossterm on Windows, clone vdash, build with +nightly and use the binary it creates under ./taget/release:

git clone https://github.com/theWebalyst/vdash
cd vdash
cargo +nightly build -Z features=itarget --bin vdash-crossterm --release --no-default-features

./target/release/vdash-crossterm --help

Using vdash - SAFE Network Vault Dashboard

vdash is provides a terminal based graphical dashboard of SAFE Network Vault activity on the local machine. It parses input from one or more vault logfiles to gather live vault metrics which are displayed using terminal graphics.

Status: work-in-progress, not useful yet unless you want to help!

Get SAFE Network pre-requisites

  1. Get Rust: see: https://doc.rust-lang.org/cargo/getting-started/installation.html

  2. Get the SAFE CLI: either download using an install script or build the SAFE CLI locally. Instructions for both options are here.

  3. Get the SAFE Vault: when you have the SAFE CLI working you can install the vault software with the command safe vault install (details here).

You are now ready to install vdash and can test it by running a local test network.

Usage

In the terminal type the command and the paths of one or more vault logfiles you want to monitor. For example:

vdash ~/.safe/vault/local-vault/safe_vault.log

When the dashboard is active, pressing 's' or 'd' switches between summary and detail views. For more information:

vdash --help

Vault Setup

IMPORTANT: You must ensure the vault logfile includes the telemetry information used by vdash by setting the required logging level (e.g. 'info', or 'debug' etc).

The required level may change as things progress, so for now I recommend using a logging level of 'info' to keep resources minimal. The logfile will be larger and vdash become slower, but may have access to more metrics if you increase the logging level to 'debug', or even 'trace'.

You control the vault logging level by setting the environment variable RUST_LOG but be aware that setting this to one of to one of 'warn', 'info', 'debug', or 'trace' will apply this to all modules used by safe_vault code, not just the safe_vault module. You can though set the default to one level and different levels for other modules.

For example, to set the default level to 'debug' for everything, except for the quinn module which generates a lot of unnecessary INFO log messages, module use:

sh safe vault killall rm -f ~/.safe/vault/local-vault/safe_vault.log RUST_LOG=debug,quinn=error safe vault join Or sh safe vault killall rm -f ~/.safe/vault/baby-fleming-vaults/*/safe_vault.log RUST_LOG=debug,quinn=error safe vault run-baby-fleming -t Note: - save vault killall makes sure no existing vaults are still running, and deleting existing logfiles prevents you picking up statistics from previous activity. If you leave the logfile in place then vdash will waste time processing that, although you can skip that process using a command line option. - setting RUSTLOG ensures the logfiles contain the data which vdash needs, and excludes some that gets in the way. - On Windows to set RUSTLOG environment variable:

Using Windows Command Line:
```
set RUST_LOG="safe=trace,quinn=trace"
safe vault run-baby-fleming -t
```

Using Windows PowerShell:
```
$env:RUST_LOG="safe=trace,quinn=trace"
safe vault run-baby-fleming -t
```

Using vdash With a Local Test Network

  1. Start a local test network: follow the instructions to Run a local network, but I suggest using the -t option to create an account and authorise the CLI with it altogether. As here: safe vault killall rm -f ~/.safe/vault/baby-fleming-vaults/*/safe_vault.log RUST_LOG=debug,quinn=error safe vault run-baby-fleming -t

    Windows: see "Note" immediately above for how to set RUST_LOG on Windows.

  2. Run vdash: in a different terminal window (so you can continue to use the safe-cli in the first terminal), start vdash with: vdash ~/.safe/vault/baby-fleming-vaults/*/safe_vault.log Or with a live network: vdash ~/.safe/vault/local-vault/safe_vault.log

  3. Upload files using SAFE CLI: in the SAFE CLI window you can perform operations on the local test network that will affect the vault and the effects will be shown in vdash. For example, to use the SAFE CLI to upload files: safe files put ./<some-directory>/ --recursive

If you want to try vdash with a live network, check to see if one is running at the SAFE Network community forum: https://safenetforum.org

Build

See Get SAFE Network Pre-requisites.

Get code

git clone https://github.com/theWebalyst/vdash cd vdash

Build

Linux / MacOS

Build vdash with the termion backend (see tui-rs). Note: MacOS is untested but may 'just work'. cargo build --features="termion" --features="vdash" --release

Windows 10

Builds vdash the crossterm backend (see tui-rs), with the intention to support Windows.

NOT working on Windows yet, this is being worked on at the moment. Help with testing appreciated. cargo build --bin vdash-crossterm --features="crossterm" --features="vdash" --release

Roadmap

Where vdash is headed: - [x] implement ability to parse logfiles - [x] add --debug-parser to show results in second logfile - [x] implement parsing log file for simple metrics and timeline - [x] keep the debug UI available (selected with 'D' when using --debug-parse) - [x] change events to use tokio mpsc (unbounded) channel - [x] does tokio mpsc fix loss of updates from linemux (see linemux issue #17) - [ ] implement vault dashboard - [x] vault status summary page (single vault) - [x] debug window (--debug-window) - [x] add basic vault stats (age/PUTs/GETs) - [x] scroll vault logfile (arrow keys) - [x] multiple vaults (navigate with tab and arrow keys) - [ ] add a timeline - [x] simple timeline with PUTS and GETS - [x] implement multiple timeline durations (hour, minute etc) - [x] add status/timeline for ERRORS - [x] anchor 'now' to right border - [ ] mod sparkline widget to have a minimum Y scale (e.g. 10 units) - [ ] reduce lag in processing logfile changes - [x] implement simple rate limit on redraws - [x] implement update/redraw tick (for timeline and stats) - [x] fix load from logfile to timeline (currently all ends up in last bucket) - [x] change timeline scaling to use +/- an i/o keys rather than s, m, d etc - [ ] optimise redraw rate limit - [ ] make a CLI option for redraw rate limit - [ ] track sn_node issue #1126 (maintain Get/Put response in) - [x] implement storage 'meter' - [x] code to get vault storage used - [x] code to get free space on same device - [x] implement storage used/free 'progress' bar - [ ] implement bandwidth 'meter' - [ ] code to get vault bandwidth - [ ] code to get total bandwidth - [ ] implement bandwidth vault/total/max in last day 'progress' bar - [ ] Implement DashOverview: all vaults on one page (rename from DashSummary) - [ ] trim VaultMetrics timeline - [ ] logtail-dash Issue #1: Implement popup help on ?, h, H - [x] FIXED by upate to tui-rs v0.11.0 Issue #382: Window titles corrupted when using --debug-window - [ ] Implement --features="vdash" / --features="logtail" to select app and UI

LICENSE

Everything is GPL3.0 unless otherwise stated. Any contributions are accepted on the condition they conform to this license.

See also ./LICENSE