mirror of
https://codeberg.org/icewind/logsmash.git
synced 2026-06-03 18:14:11 +02:00
by-request fixes
This commit is contained in:
parent
3982c2e354
commit
2631696ddd
3 changed files with 34 additions and 21 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::app::Filter;
|
use crate::app::Filter;
|
||||||
use crate::logfile::logline::{format_time, LogLine};
|
use crate::logfile::logline::{format_time, LogLine};
|
||||||
use crate::ui::state::GroupedLogGrouping;
|
use crate::ui::state::DistinctLogGrouping;
|
||||||
use crate::ui::style::TABLE_HEADER_STYLE;
|
use crate::ui::style::TABLE_HEADER_STYLE;
|
||||||
use crate::ui::table::{ScrollbarTable, ScrollbarTableState};
|
use crate::ui::table::{ScrollbarTable, ScrollbarTableState};
|
||||||
use crate::ui::UI_HEADER_SIZE;
|
use crate::ui::UI_HEADER_SIZE;
|
||||||
|
|
@ -13,13 +13,13 @@ use ratatui::widgets::{Cell, Paragraph, Row, Wrap};
|
||||||
pub struct LogsByIdentifier<'a> {
|
pub struct LogsByIdentifier<'a> {
|
||||||
lines: &'a [&'a LogLine<'a>],
|
lines: &'a [&'a LogLine<'a>],
|
||||||
filter: &'a Filter,
|
filter: &'a Filter,
|
||||||
grouping: GroupedLogGrouping,
|
grouping: DistinctLogGrouping,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn logs_by_identifier<'a>(
|
pub fn logs_by_identifier<'a>(
|
||||||
lines: &'a [&'a LogLine<'a>],
|
lines: &'a [&'a LogLine<'a>],
|
||||||
filter: &'a Filter,
|
filter: &'a Filter,
|
||||||
grouping: GroupedLogGrouping,
|
grouping: DistinctLogGrouping,
|
||||||
) -> LogsByIdentifier<'a> {
|
) -> LogsByIdentifier<'a> {
|
||||||
LogsByIdentifier {
|
LogsByIdentifier {
|
||||||
lines,
|
lines,
|
||||||
|
|
@ -45,7 +45,7 @@ impl StatefulWidget for LogsByIdentifier<'_> {
|
||||||
.unwrap_or(self.lines.first().unwrap());
|
.unwrap_or(self.lines.first().unwrap());
|
||||||
|
|
||||||
let par = match self.grouping {
|
let par = match self.grouping {
|
||||||
GroupedLogGrouping::Message => Paragraph::new(format!(
|
DistinctLogGrouping::Message => Paragraph::new(format!(
|
||||||
"{}{}{}\n\n{} from {} - Nextcloud {}",
|
"{}{}{}\n\n{} from {} - Nextcloud {}",
|
||||||
line.exception
|
line.exception
|
||||||
.as_ref()
|
.as_ref()
|
||||||
|
|
@ -58,7 +58,7 @@ impl StatefulWidget for LogsByIdentifier<'_> {
|
||||||
line.version,
|
line.version,
|
||||||
))
|
))
|
||||||
.wrap(Wrap::default()),
|
.wrap(Wrap::default()),
|
||||||
GroupedLogGrouping::Request => Paragraph::new(format!(
|
DistinctLogGrouping::Request => Paragraph::new(format!(
|
||||||
"{} {}\n\n {} from {} by {} - Nextcloud {}",
|
"{} {}\n\n {} from {} by {} - Nextcloud {}",
|
||||||
line.method,
|
line.method,
|
||||||
line.url,
|
line.url,
|
||||||
|
|
@ -71,14 +71,14 @@ impl StatefulWidget for LogsByIdentifier<'_> {
|
||||||
};
|
};
|
||||||
|
|
||||||
let header = match self.grouping {
|
let header = match self.grouping {
|
||||||
GroupedLogGrouping::Message => [
|
DistinctLogGrouping::Message => [
|
||||||
Text::from("Remote"),
|
Text::from("Remote"),
|
||||||
Text::from("Method"),
|
Text::from("Method"),
|
||||||
Text::from("Url"),
|
Text::from("Url"),
|
||||||
Text::from("Request Id"),
|
Text::from("Request Id"),
|
||||||
Text::from("Time").alignment(Alignment::Right),
|
Text::from("Time").alignment(Alignment::Right),
|
||||||
],
|
],
|
||||||
GroupedLogGrouping::Request => [
|
DistinctLogGrouping::Request => [
|
||||||
Text::from("Level"),
|
Text::from("Level"),
|
||||||
Text::from("App"),
|
Text::from("App"),
|
||||||
Text::from("Message"),
|
Text::from("Message"),
|
||||||
|
|
@ -93,14 +93,14 @@ impl StatefulWidget for LogsByIdentifier<'_> {
|
||||||
.height(1);
|
.height(1);
|
||||||
|
|
||||||
let widths = match self.grouping {
|
let widths = match self.grouping {
|
||||||
GroupedLogGrouping::Message => [
|
DistinctLogGrouping::Message => [
|
||||||
Constraint::Min(16),
|
Constraint::Min(16),
|
||||||
Constraint::Min(8),
|
Constraint::Min(8),
|
||||||
Constraint::Percentage(100),
|
Constraint::Percentage(100),
|
||||||
Constraint::Min(25),
|
Constraint::Min(25),
|
||||||
Constraint::Length(27),
|
Constraint::Length(27),
|
||||||
],
|
],
|
||||||
GroupedLogGrouping::Request => [
|
DistinctLogGrouping::Request => [
|
||||||
Constraint::Min(16),
|
Constraint::Min(16),
|
||||||
Constraint::Min(8),
|
Constraint::Min(8),
|
||||||
Constraint::Percentage(100),
|
Constraint::Percentage(100),
|
||||||
|
|
@ -130,17 +130,17 @@ impl StatefulWidget for LogsByIdentifier<'_> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn log_row<'a>(line: &'a LogLine<'a>, grouping: GroupedLogGrouping, is_in_view: bool) -> Row<'a> {
|
fn log_row<'a>(line: &'a LogLine<'a>, grouping: DistinctLogGrouping, is_in_view: bool) -> Row<'a> {
|
||||||
if is_in_view {
|
if is_in_view {
|
||||||
match grouping {
|
match grouping {
|
||||||
GroupedLogGrouping::Message => Row::new([
|
DistinctLogGrouping::Message => Row::new([
|
||||||
Text::from(line.remote.as_str()),
|
Text::from(line.remote.as_str()),
|
||||||
Text::from(line.method.as_str()),
|
Text::from(line.method.as_str()),
|
||||||
Text::from(line.url.as_ref()),
|
Text::from(line.url.as_ref()),
|
||||||
Text::from(line.request_id.as_str()),
|
Text::from(line.request_id.as_str()),
|
||||||
Text::from(format_time(line.time)).alignment(Alignment::Right),
|
Text::from(format_time(line.time)).alignment(Alignment::Right),
|
||||||
]),
|
]),
|
||||||
GroupedLogGrouping::Request => Row::new([
|
DistinctLogGrouping::Request => Row::new([
|
||||||
Text::from(line.level.as_str()),
|
Text::from(line.level.as_str()),
|
||||||
Text::from(line.app.as_ref()),
|
Text::from(line.app.as_ref()),
|
||||||
Text::from(line.message.as_ref()),
|
Text::from(line.message.as_ref()),
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,9 @@ fn help(page: UiPage) -> &'static str {
|
||||||
UiPage::DistinctLogs => {
|
UiPage::DistinctLogs => {
|
||||||
"«Q» Exit - «F» Filter - «Esc» Back - «C» Copy log line - «G» Group By - «R» Show logs for request"
|
"«Q» Exit - «F» Filter - «Esc» Back - «C» Copy log line - «G» Group By - «R» Show logs for request"
|
||||||
}
|
}
|
||||||
|
UiPage::ByRequest => {
|
||||||
|
"«Q» Exit - «F» Filter - «Esc» Back - «C» Copy log line"
|
||||||
|
}
|
||||||
UiPage::Log => {
|
UiPage::Log => {
|
||||||
"«Q» Exit - «Esc» Back - «R» Toggle raw - «C» Copy log line - «R» Show logs for request"
|
"«Q» Exit - «Esc» Back - «R» Toggle raw - «C» Copy log line - «R» Show logs for request"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ impl<'a> GroupListState<'a> {
|
||||||
UiPage::DistinctLogs => UiState::Distinct(DistinctLogsState {
|
UiPage::DistinctLogs => UiState::Distinct(DistinctLogsState {
|
||||||
table_state: ScrollbarTableState::new(line_count + 1),
|
table_state: ScrollbarTableState::new(line_count + 1),
|
||||||
lines: result.lines.lines,
|
lines: result.lines.lines,
|
||||||
grouping: GroupedLogGrouping::Message,
|
grouping: DistinctLogGrouping::Message,
|
||||||
previous: Box::new(self.into()),
|
previous: Box::new(self.into()),
|
||||||
filter: Filter::default(),
|
filter: Filter::default(),
|
||||||
mode: Mode::Normal,
|
mode: Mode::Normal,
|
||||||
|
|
@ -196,7 +196,7 @@ impl<'a> GroupState<'a> {
|
||||||
previous: Box::new(self.into()),
|
previous: Box::new(self.into()),
|
||||||
filter: Filter::default(),
|
filter: Filter::default(),
|
||||||
mode: Mode::Normal,
|
mode: Mode::Normal,
|
||||||
grouping: GroupedLogGrouping::Message,
|
grouping: DistinctLogGrouping::Message,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -207,8 +207,8 @@ impl PartialEq for GroupState<'_> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy, Eq, PartialEq)]
|
||||||
pub enum GroupedLogGrouping {
|
pub enum DistinctLogGrouping {
|
||||||
Message,
|
Message,
|
||||||
Request,
|
Request,
|
||||||
}
|
}
|
||||||
|
|
@ -219,7 +219,7 @@ pub struct DistinctLogsState<'a> {
|
||||||
pub previous: Box<UiState<'a>>,
|
pub previous: Box<UiState<'a>>,
|
||||||
pub filter: Filter,
|
pub filter: Filter,
|
||||||
mode: Mode,
|
mode: Mode,
|
||||||
pub grouping: GroupedLogGrouping,
|
pub grouping: DistinctLogGrouping,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> DistinctLogsState<'a> {
|
impl<'a> DistinctLogsState<'a> {
|
||||||
|
|
@ -292,7 +292,7 @@ impl<'a> DistinctLogsState<'a> {
|
||||||
filter: Filter::default(),
|
filter: Filter::default(),
|
||||||
table_state,
|
table_state,
|
||||||
previous: Box::new(self.into()),
|
previous: Box::new(self.into()),
|
||||||
grouping: GroupedLogGrouping::Request,
|
grouping: DistinctLogGrouping::Request,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -332,7 +332,7 @@ impl<'a> LogState<'a> {
|
||||||
filter: Filter::default(),
|
filter: Filter::default(),
|
||||||
table_state,
|
table_state,
|
||||||
previous: Box::new(self.into()),
|
previous: Box::new(self.into()),
|
||||||
grouping: GroupedLogGrouping::Request,
|
grouping: DistinctLogGrouping::Request,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -364,7 +364,14 @@ impl<'a> UiState<'a> {
|
||||||
UiState::Quit | UiState::GroupList(_) => UiPage::GroupList,
|
UiState::Quit | UiState::GroupList(_) => UiPage::GroupList,
|
||||||
UiState::Group(_) => UiPage::Group,
|
UiState::Group(_) => UiPage::Group,
|
||||||
UiState::GroupByMenu(_) => UiPage::Group, // todo
|
UiState::GroupByMenu(_) => UiPage::Group, // todo
|
||||||
UiState::Distinct(_) => UiPage::DistinctLogs,
|
UiState::Distinct(DistinctLogsState {
|
||||||
|
grouping: DistinctLogGrouping::Message,
|
||||||
|
..
|
||||||
|
}) => UiPage::DistinctLogs,
|
||||||
|
UiState::Distinct(DistinctLogsState {
|
||||||
|
grouping: DistinctLogGrouping::Request,
|
||||||
|
..
|
||||||
|
}) => UiPage::ByRequest,
|
||||||
UiState::Log(_) => UiPage::Log,
|
UiState::Log(_) => UiPage::Log,
|
||||||
UiState::Errors(_) => UiPage::Errors,
|
UiState::Errors(_) => UiPage::Errors,
|
||||||
UiState::Error(_) => UiPage::Error,
|
UiState::Error(_) => UiPage::Error,
|
||||||
|
|
@ -596,7 +603,9 @@ impl<'a> UiState<'a> {
|
||||||
copy_osc(raw);
|
copy_osc(raw);
|
||||||
(false, UiState::Log(state))
|
(false, UiState::Log(state))
|
||||||
}
|
}
|
||||||
(UiState::Distinct(state), UiEvent::ByRequest) => {
|
(UiState::Distinct(state), UiEvent::ByRequest)
|
||||||
|
if state.grouping == DistinctLogGrouping::Message =>
|
||||||
|
{
|
||||||
let selected = state.selected();
|
let selected = state.selected();
|
||||||
(true, state.by_request(selected, app))
|
(true, state.by_request(selected, app))
|
||||||
}
|
}
|
||||||
|
|
@ -681,6 +690,7 @@ pub enum UiPage {
|
||||||
GroupList,
|
GroupList,
|
||||||
Group,
|
Group,
|
||||||
DistinctLogs,
|
DistinctLogs,
|
||||||
|
ByRequest,
|
||||||
Log,
|
Log,
|
||||||
Errors,
|
Errors,
|
||||||
Error,
|
Error,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue