Added uptime metrics for radarr
This commit is contained in:
+1
-1
@@ -7,7 +7,7 @@ edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.68"
|
||||
chrono = "0.4"
|
||||
chrono = { version = "0.4", features = ["serde"] }
|
||||
clap = { version = "4.0.30", features = ["help", "usage", "error-context", "derive"] }
|
||||
confy = { version = "0.5.1", default_features = false, features = ["yaml_conf"] }
|
||||
crossterm = "0.25.0"
|
||||
|
||||
+2
-3
@@ -1,10 +1,9 @@
|
||||
use chrono::Duration;
|
||||
|
||||
use crate::network::radarr::DiskSpace;
|
||||
use chrono::{DateTime, Utc};
|
||||
|
||||
#[derive(Default, Debug)]
|
||||
pub struct RadarrData {
|
||||
pub free_space: u64,
|
||||
pub total_space: u64,
|
||||
pub version: String,
|
||||
pub start_time: DateTime<Utc>
|
||||
}
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
use std::borrow::Borrow;
|
||||
|
||||
use anyhow::Result;
|
||||
use chrono::{DateTime, Utc};
|
||||
use log::{debug, error};
|
||||
use reqwest::RequestBuilder;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::Number;
|
||||
|
||||
use crate::app::radarr::RadarrData;
|
||||
use crate::app::RadarrConfig;
|
||||
use crate::network::{Network, RadarrEvent};
|
||||
|
||||
@@ -22,7 +19,7 @@ impl RadarrEvent {
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct DiskSpace {
|
||||
struct DiskSpace {
|
||||
pub path: String,
|
||||
pub label: String,
|
||||
pub free_space: Number,
|
||||
@@ -30,8 +27,10 @@ pub struct DiskSpace {
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Debug)]
|
||||
pub struct SystemStatus {
|
||||
#[serde(rename_all = "camelCase")]
|
||||
struct SystemStatus {
|
||||
version: String,
|
||||
start_time: DateTime<Utc>,
|
||||
}
|
||||
|
||||
impl<'a> Network<'a> {
|
||||
@@ -59,6 +58,7 @@ impl<'a> Network<'a> {
|
||||
Ok(system_status) => {
|
||||
let mut app = self.app.lock().await;
|
||||
app.data.radarr_data.version = system_status.version;
|
||||
app.data.radarr_data.start_time = system_status.start_time;
|
||||
}
|
||||
Err(e) => {
|
||||
error!("Failed to fetch system status. {:?}", e);
|
||||
|
||||
+35
-13
@@ -1,9 +1,11 @@
|
||||
use std::ops::Sub;
|
||||
use chrono::{Duration, Utc};
|
||||
use tui::backend::Backend;
|
||||
use tui::layout::{Alignment, Constraint, Direction, Layout, Rect};
|
||||
use tui::layout::{Alignment, Constraint, Rect};
|
||||
use tui::style::Color::Cyan;
|
||||
use tui::style::{Color, Style};
|
||||
use tui::style::Style;
|
||||
use tui::text::{Spans, Text};
|
||||
use tui::widgets::{Block, Borders, Gauge, LineGauge, Paragraph};
|
||||
use tui::widgets::{Block, Borders, LineGauge, Paragraph};
|
||||
use tui::{symbols, Frame};
|
||||
|
||||
use crate::app::radarr::RadarrData;
|
||||
@@ -51,6 +53,7 @@ fn draw_stats<B: Backend>(f: &mut Frame<'_, B>, app: &App, area: Rect) {
|
||||
let RadarrData {
|
||||
free_space,
|
||||
total_space,
|
||||
start_time,
|
||||
..
|
||||
} = app.data.radarr_data;
|
||||
let ratio = if total_space == 0 {
|
||||
@@ -63,22 +66,40 @@ fn draw_stats<B: Backend>(f: &mut Frame<'_, B>, app: &App, area: Rect) {
|
||||
f.render_widget(base_block, area);
|
||||
|
||||
let chunks =
|
||||
vertical_chunks_with_margin(vec![Constraint::Length(1), Constraint::Min(2)], area, 1);
|
||||
vertical_chunks_with_margin(vec![
|
||||
Constraint::Length(1),
|
||||
Constraint::Length(1),
|
||||
Constraint::Min(2)], area, 1);
|
||||
|
||||
let version = Paragraph::new(Text::from(format!(
|
||||
"Version: {}",
|
||||
let version_paragraph = Paragraph::new(Text::from(format!(
|
||||
"Radarr Version: {}",
|
||||
app.data.radarr_data.version
|
||||
)))
|
||||
.block(Block::default());
|
||||
f.render_widget(version, chunks[0]);
|
||||
|
||||
let uptime = Utc::now().sub(start_time);
|
||||
let days = uptime.num_days();
|
||||
let day_difference = uptime.sub(Duration::days(days));
|
||||
let hours = day_difference.num_hours();
|
||||
let hour_difference = day_difference.sub(Duration::hours(hours));
|
||||
let minutes = hour_difference.num_minutes();
|
||||
let seconds = hour_difference.sub(Duration::minutes(minutes)).num_seconds();
|
||||
|
||||
let uptime_paragraph = Paragraph::new(Text::from(format!(
|
||||
"Uptime: {}d {}:{}:{}",
|
||||
days, hours, minutes, seconds
|
||||
))).block(Block::default());
|
||||
|
||||
let space_gauge = LineGauge::default()
|
||||
.block(Block::default().title("Storage:"))
|
||||
.gauge_style(Style::default().fg(Cyan))
|
||||
.line_set(symbols::line::THICK)
|
||||
.ratio(ratio)
|
||||
.label(Spans::from(format!("{:.0}%", ratio * 100.0)));
|
||||
f.render_widget(space_gauge, chunks[1]);
|
||||
.block(Block::default().title("Storage:"))
|
||||
.gauge_style(Style::default().fg(Cyan))
|
||||
.line_set(symbols::line::THICK)
|
||||
.ratio(ratio)
|
||||
.label(Spans::from(format!("{:.0}%", ratio * 100.0)));
|
||||
|
||||
f.render_widget(version_paragraph, chunks[0]);
|
||||
f.render_widget(uptime_paragraph, chunks[1]);
|
||||
f.render_widget(space_gauge, chunks[2]);
|
||||
}
|
||||
|
||||
fn draw_logo<B: Backend>(f: &mut Frame<'_, B>, area: Rect) {
|
||||
@@ -89,5 +110,6 @@ fn draw_logo<B: Backend>(f: &mut Frame<'_, B>, area: Rect) {
|
||||
let logo = Paragraph::new(Text::from(RADARR_LOGO))
|
||||
.block(Block::default())
|
||||
.alignment(Alignment::Center);
|
||||
|
||||
f.render_widget(logo, chunks[0]);
|
||||
}
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ use log4rs::encode::pattern::PatternEncoder;
|
||||
use log::LevelFilter;
|
||||
|
||||
pub fn init_logging_config() -> log4rs::Config {
|
||||
let file_path = "/tmp/devtools.log";
|
||||
let file_path = "/tmp/managarr.log";
|
||||
let logfile = FileAppender::builder()
|
||||
.encoder(Box::new(PatternEncoder::new("{l} - {m}\n")))
|
||||
.build(file_path)
|
||||
|
||||
Reference in New Issue
Block a user