An open API service indexing awesome lists of open source software.

https://github.com/giangndm/metrics-dashboard-rs

Zero-config dashboard with metrics-rs
https://github.com/giangndm/metrics-dashboard-rs

dashboard metric-rs rust zero-config

Last synced: 7 months ago
JSON representation

Zero-config dashboard with metrics-rs

Awesome Lists containing this project

README

          

# metrics-dashboard-rs

[![Crates.io](https://img.shields.io/crates/v/metrics-dashboard.svg)](https://crates.io/crates/metrics-dashboard)
[![Docs.rs](https://docs.rs/metrics-dashboard/badge.svg)](https://docs.rs/metrics-dashboard)
[![CI](https://github.com/giangndm/metrics-dashboard/workflows/CI/badge.svg)](https://github.com/giangndm/metrics-dashboard-rs/actions)

This crate provide simple auto-generate dashboard for [metric-rs](https://crates.io/crates/metrics) crate.

## Screenshot

![](./docs/screenshot.png)

## How to use

* run `cargo add metrics-dashboard`
* include into poem webserver like bellow:

```rust
use std::time::Duration;

use metrics_dashboard::build_dashboard_route;
use metrics::{describe_counter, increment_counter};
use poem::{
get, handler, listener::TcpListener, middleware::Tracing, web::Path, EndpointExt, Route, Server,
};

#[handler]
fn hello(Path(name): Path) -> String {
format!("hello: {name}")
}

#[tokio::main]
async fn main() -> Result<(), std::io::Error> {
if std::env::var_os("RUST_LOG").is_none() {
std::env::set_var("RUST_LOG", "poem=debug");
}
tracing_subscriber::fmt::init();

let dashboard_options = DashboardOptions {
custom_charts: vec![
ChartType::Line {
metrics: vec![
"demo_live_time".to_string(),
"demo_live_time_max".to_string(),
],
desc: Some("Demo metric line".to_string()),
}
],
include_default: true,
};

let app = Route::new()
.at("/hello/:name", get(hello))
.nest("/dashboard/", build_dashboard_route())
.with(Tracing);

tokio::spawn(async move {
describe_counter!("demo_metric1", "Demo metric1");
loop {
tokio::time::sleep(Duration::from_secs(1)).await;
increment_counter!("demo_metric1");
}
});

tokio::spawn(async move {
describe_counter!("demo_metric2", "Demo metric2");
loop {
tokio::time::sleep(Duration::from_secs(1)).await;
increment_counter!("demo_metric2");
}
});

Server::new(TcpListener::bind("0.0.0.0:3000"))
.name("hello-world")
.run(app)
.await
}
```

## License

Licensed under ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)

## Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the MIT license, without any additional terms or conditions.

See [CONTRIBUTING.md](CONTRIBUTING.md).