Find dashboard files in the user's config path

This commit is contained in:
Olivier 'reivilibre' 2021-11-28 13:46:38 +00:00
parent 4f45d2b96d
commit a0f85a4fdf
4 changed files with 117 additions and 22 deletions

89
Cargo.lock generated
View File

@ -78,6 +78,17 @@ version = "1.0.48"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62e1f47f7dc0422027a4e370dd4548d4d66b26782e513e98dca1e689e058a80e" checksum = "62e1f47f7dc0422027a4e370dd4548d4d66b26782e513e98dca1e689e058a80e"
[[package]]
name = "appdirs"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d512b3e61196d27562dcc71446a58ba8a93d3bed2a03a87f96101b9a17f1d378"
dependencies = [
"ole32-sys",
"shell32-sys",
"winapi 0.2.8",
]
[[package]] [[package]]
name = "atk-sys" name = "atk-sys"
version = "0.14.0" version = "0.14.0"
@ -104,7 +115,7 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [ dependencies = [
"hermit-abi", "hermit-abi",
"libc", "libc",
"winapi", "winapi 0.3.9",
] ]
[[package]] [[package]]
@ -142,6 +153,7 @@ name = "bare-metrics-gui"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"appdirs",
"bare-metrics-core", "bare-metrics-core",
"bare-metrics-reader", "bare-metrics-reader",
"eframe", "eframe",
@ -151,6 +163,8 @@ dependencies = [
"hdrhistogram", "hdrhistogram",
"log", "log",
"rfd", "rfd",
"ron",
"serde",
] ]
[[package]] [[package]]
@ -274,7 +288,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fdf5e01086b6be750428ba4a40619f847eb2e95756eee84b18e06e5f0b50342" checksum = "9fdf5e01086b6be750428ba4a40619f847eb2e95756eee84b18e06e5f0b50342"
dependencies = [ dependencies = [
"lazy-bytes-cast", "lazy-bytes-cast",
"winapi", "winapi 0.3.9",
] ]
[[package]] [[package]]
@ -560,7 +574,7 @@ checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
dependencies = [ dependencies = [
"libc", "libc",
"redox_users", "redox_users",
"winapi", "winapi 0.3.9",
] ]
[[package]] [[package]]
@ -802,7 +816,7 @@ dependencies = [
"gobject-sys", "gobject-sys",
"libc", "libc",
"system-deps", "system-deps",
"winapi", "winapi 0.3.9",
] ]
[[package]] [[package]]
@ -865,7 +879,7 @@ dependencies = [
"parking_lot", "parking_lot",
"wayland-client 0.28.6", "wayland-client 0.28.6",
"wayland-egl", "wayland-egl",
"winapi", "winapi 0.3.9",
"winit", "winit",
] ]
@ -876,7 +890,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2abb6aa55523480c4adc5a56bbaa249992e2dddb2fc63dc96e04a3355364c211" checksum = "2abb6aa55523480c4adc5a56bbaa249992e2dddb2fc63dc96e04a3355364c211"
dependencies = [ dependencies = [
"gl_generator", "gl_generator",
"winapi", "winapi 0.3.9",
] ]
[[package]] [[package]]
@ -1051,7 +1065,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if 1.0.0",
"winapi", "winapi 0.3.9",
] ]
[[package]] [[package]]
@ -1061,7 +1075,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afe203d669ec979b7128619bae5a63b7b42e9203c1b29146079ee05e2f604b52" checksum = "afe203d669ec979b7128619bae5a63b7b42e9203c1b29146079ee05e2f604b52"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if 1.0.0",
"winapi", "winapi 0.3.9",
] ]
[[package]] [[package]]
@ -1175,7 +1189,7 @@ dependencies = [
"log", "log",
"miow", "miow",
"ntapi", "ntapi",
"winapi", "winapi 0.3.9",
] ]
[[package]] [[package]]
@ -1196,7 +1210,7 @@ version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
dependencies = [ dependencies = [
"winapi", "winapi 0.3.9",
] ]
[[package]] [[package]]
@ -1304,7 +1318,7 @@ version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
dependencies = [ dependencies = [
"winapi", "winapi 0.3.9",
] ]
[[package]] [[package]]
@ -1386,6 +1400,16 @@ dependencies = [
"memchr", "memchr",
] ]
[[package]]
name = "ole32-sys"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d2c49021782e5233cd243168edfa8037574afed4eba4bbaf538b3d8d1789d8c"
dependencies = [
"winapi 0.2.8",
"winapi-build",
]
[[package]] [[package]]
name = "once_cell" name = "once_cell"
version = "1.8.0" version = "1.8.0"
@ -1453,7 +1477,7 @@ dependencies = [
"libc", "libc",
"redox_syscall", "redox_syscall",
"smallvec", "smallvec",
"winapi", "winapi 0.3.9",
] ]
[[package]] [[package]]
@ -1597,6 +1621,17 @@ dependencies = [
"windows", "windows",
] ]
[[package]]
name = "ron"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b861ecaade43ac97886a512b360d01d66be9f41f3c61088b42cedf92e03d678"
dependencies = [
"base64",
"bitflags",
"serde",
]
[[package]] [[package]]
name = "rustc-demangle" name = "rustc-demangle"
version = "0.1.21" version = "0.1.21"
@ -1673,6 +1708,16 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "shell32-sys"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ee04b46101f57121c9da2b151988283b6beb79b34f5bb29a58ee48cb695122c"
dependencies = [
"winapi 0.2.8",
"winapi-build",
]
[[package]] [[package]]
name = "smallvec" name = "smallvec"
version = "1.7.0" version = "1.7.0"
@ -1866,7 +1911,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
dependencies = [ dependencies = [
"same-file", "same-file",
"winapi", "winapi 0.3.9",
"winapi-util", "winapi-util",
] ]
@ -2116,7 +2161,7 @@ checksum = "ecad156490d6b620308ed411cfee90d280b3cbd13e189ea0d3fada8acc89158a"
dependencies = [ dependencies = [
"web-sys", "web-sys",
"widestring", "widestring",
"winapi", "winapi 0.3.9",
] ]
[[package]] [[package]]
@ -2125,6 +2170,12 @@ version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c"
[[package]]
name = "winapi"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
[[package]] [[package]]
name = "winapi" name = "winapi"
version = "0.3.9" version = "0.3.9"
@ -2135,6 +2186,12 @@ dependencies = [
"winapi-x86_64-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu",
] ]
[[package]]
name = "winapi-build"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
[[package]] [[package]]
name = "winapi-i686-pc-windows-gnu" name = "winapi-i686-pc-windows-gnu"
version = "0.4.0" version = "0.4.0"
@ -2147,7 +2204,7 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
dependencies = [ dependencies = [
"winapi", "winapi 0.3.9",
] ]
[[package]] [[package]]
@ -2236,7 +2293,7 @@ dependencies = [
"scopeguard", "scopeguard",
"smithay-client-toolkit 0.12.3", "smithay-client-toolkit 0.12.3",
"wayland-client 0.28.6", "wayland-client 0.28.6",
"winapi", "winapi 0.3.9",
"x11-dl", "x11-dl",
] ]

View File

@ -18,3 +18,6 @@ anyhow = "1.0.48"
hdrhistogram = "7.4.0" hdrhistogram = "7.4.0"
# Rusty File Dialogue # Rusty File Dialogue
rfd = "0.6.1" rfd = "0.6.1"
ron = "0.7.0"
serde = { version = "1.0.130", features = ["derive"] }
appdirs = "0.2.0"

View File

@ -0,0 +1,13 @@
use bare_metrics_core::structures::MetricKind;
use serde::Deserialize;
#[derive(Deserialize, Default, Clone)]
pub struct DashboardConfig {
graphs: Vec<GraphConfig>,
}
#[derive(Deserialize, Clone)]
pub struct GraphConfig {
name: String,
kind: MetricKind,
}

View File

@ -1,3 +1,4 @@
use crate::config::DashboardConfig;
use crate::graph::{Graph, MetricsLogReaderMessage, MetricsLogReadingRequester}; use crate::graph::{Graph, MetricsLogReaderMessage, MetricsLogReadingRequester};
use bare_metrics_core::structures::MetricId; use bare_metrics_core::structures::MetricId;
use bare_metrics_reader::MetricsLogReader; use bare_metrics_reader::MetricsLogReader;
@ -6,13 +7,14 @@ use eframe::epi::{App, Frame, Storage};
use eframe::NativeOptions; use eframe::NativeOptions;
use env_logger::Env; use env_logger::Env;
use std::fs::File; use std::fs::File;
use std::path::PathBuf;
use std::str::FromStr;
pub mod config;
pub mod graph; pub mod graph;
pub struct MetricsGui { pub struct MetricsGui {
requester: MetricsLogReadingRequester, requester: MetricsLogReadingRequester,
dashboard: Option<DashboardConfig>,
} }
impl App for MetricsGui { impl App for MetricsGui {
@ -40,7 +42,7 @@ impl App for MetricsGui {
} }
} }
fn main() { fn main() -> anyhow::Result<()> {
env_logger::Builder::from_env(Env::default().default_filter_or("info")).init(); env_logger::Builder::from_env(Env::default().default_filter_or("info")).init();
let path = rfd::FileDialog::new() let path = rfd::FileDialog::new()
@ -53,9 +55,29 @@ fn main() {
let file = File::open(path).unwrap(); let file = File::open(path).unwrap();
let requester = MetricsLogReadingRequester::new_manager(MetricsLogReader::new(file).unwrap()); let reader = MetricsLogReader::new(file).unwrap();
let log_app_name = reader.header.application_name.clone();
let requester = MetricsLogReadingRequester::new_manager(reader);
let app = MetricsGui { requester }; let dashboard_dir = appdirs::user_data_dir(Some("baremetrics"), Some("rei"), true)
.unwrap()
.join("gui/dashboards");
let filtered_log_app_name = log_app_name.to_lowercase().replace(' ', "_");
let dashboard_file = dashboard_dir.join(filtered_log_app_name + ".ron");
eprintln!("Looking for dashboard file at {:?}", dashboard_file);
let dashboard = if dashboard_file.exists() {
let rules_data: DashboardConfig = ron::de::from_reader(File::open(dashboard_file)?)?;
Some(rules_data)
} else {
None
};
let app = MetricsGui {
requester,
dashboard,
};
let native_options = NativeOptions::default(); let native_options = NativeOptions::default();