Skip to content

Commit b8319af

Browse files
committed
0.1.0
1 parent b8fc1b2 commit b8319af

6 files changed

Lines changed: 35 additions & 28 deletions

File tree

Cargo.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
[package]
22
name = "pgmon"
33
version = "0.1.0"
4-
edition = "2021"
5-
authors = ["nbari"]
4+
edition = "2024"
5+
authors = ["Nicolas Embriz <nbari@tequila.io>"]
66
description = "A PostgreSQL monitoring TUI"
77
license = "BSD-3-Clause"
8+
readme = "README.md"
9+
repository = "https://github.com/nbari/pgmon"
10+
keywords = ["postgresql", "monitoring", "tui", "database"]
11+
categories = ["command-line-utilities", "database"]
812

913
[lints.rust]
1014
warnings = "deny"

src/cli/commands/mod.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use clap::{
2-
builder::styling::{AnsiColor, Effects, Styles},
32
Arg, ArgAction, ColorChoice, Command,
3+
builder::styling::{AnsiColor, Effects, Styles},
44
};
55

66
pub mod built_info {
@@ -101,7 +101,10 @@ mod tests {
101101

102102
#[test]
103103
fn test_cli_dsn_required() {
104-
std::env::remove_var("PGMON_DSN");
104+
// SAFETY: This is a test environment and we're ensuring PGMON_DSN is cleared.
105+
unsafe {
106+
std::env::remove_var("PGMON_DSN");
107+
}
105108
let cmd = new();
106109
let matches = cmd.try_get_matches_from(vec!["pgmon"]);
107110
assert!(matches.is_err());

src/cli/telemetry.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use tracing_subscriber::{fmt, prelude::*, EnvFilter};
1+
use tracing_subscriber::{EnvFilter, fmt, prelude::*};
22

33
pub fn init(verbosity: u8) {
44
let level = match verbosity {

src/pg/client.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ impl PgClient {
7575
pub fn fetch_io_stats(&mut self) -> Result<Vec<Vec<String>>> {
7676
if !self.view_exists("pg_stat_io")? {
7777
return Ok(vec![vec![
78-
"pg_stat_io not available (PG 16+ required)".to_string()
78+
"pg_stat_io not available (PG 16+ required)".to_string(),
7979
]]);
8080
}
8181
let rows = self.client.query(IO_QUERY, &[])?;
@@ -102,7 +102,7 @@ impl PgClient {
102102
Err(e) => {
103103
if e.to_string().contains("shared_preload_libraries") {
104104
return Ok(vec![vec![
105-
"pg_stat_statements library not loaded".to_string()
105+
"pg_stat_statements library not loaded".to_string(),
106106
]]);
107107
}
108108
return Err(e.into());

src/tui/app.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ use anyhow::Result;
33
use crossterm::{
44
event::{self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode},
55
execute,
6-
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
6+
terminal::{EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode},
77
};
8-
use ratatui::{backend::CrosstermBackend, Terminal};
8+
use ratatui::{Terminal, backend::CrosstermBackend};
99
use std::{
1010
io,
1111
sync::mpsc,
@@ -84,27 +84,27 @@ impl App {
8484
while !self.should_quit {
8585
terminal.draw(|f| crate::tui::ui::draw(f, self))?;
8686

87-
if let Ok(true) = event::poll(Duration::from_millis(50)) {
88-
if let Event::Key(key) = event::read()? {
89-
match key.code {
90-
KeyCode::Char('q') => self.should_quit = true,
91-
KeyCode::Char('1') => self.set_tab(Tab::Activity),
92-
KeyCode::Char('2') => self.set_tab(Tab::Database),
93-
KeyCode::Char('3') => self.set_tab(Tab::Locks),
94-
KeyCode::Char('4') => self.set_tab(Tab::IO),
95-
KeyCode::Char('5') => self.set_tab(Tab::Statements),
96-
KeyCode::Down => {
97-
if !self.data.is_empty() && self.selected_row < self.data.len() - 1 {
98-
self.selected_row += 1;
99-
}
87+
if let Ok(true) = event::poll(Duration::from_millis(50))
88+
&& let Event::Key(key) = event::read()?
89+
{
90+
match key.code {
91+
KeyCode::Char('q') => self.should_quit = true,
92+
KeyCode::Char('1') => self.set_tab(Tab::Activity),
93+
KeyCode::Char('2') => self.set_tab(Tab::Database),
94+
KeyCode::Char('3') => self.set_tab(Tab::Locks),
95+
KeyCode::Char('4') => self.set_tab(Tab::IO),
96+
KeyCode::Char('5') => self.set_tab(Tab::Statements),
97+
KeyCode::Down => {
98+
if !self.data.is_empty() && self.selected_row < self.data.len() - 1 {
99+
self.selected_row += 1;
100100
}
101-
KeyCode::Up => {
102-
if self.selected_row > 0 {
103-
self.selected_row -= 1;
104-
}
101+
}
102+
KeyCode::Up => {
103+
if self.selected_row > 0 {
104+
self.selected_row -= 1;
105105
}
106-
_ => {}
107106
}
107+
_ => {}
108108
}
109109
}
110110

src/tui/ui.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use crate::tui::app::{App, Tab};
22
use ratatui::{
3+
Frame,
34
layout::{Constraint, Direction, Layout, Rect},
45
style::{Color, Modifier, Style},
56
text::{Line, Span},
67
widgets::{Block, Borders, Cell, Paragraph, Row, Table, Tabs},
7-
Frame,
88
};
99

1010
pub fn draw(f: &mut Frame, app: &mut App) {

0 commit comments

Comments
 (0)