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::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::table::{ScrollbarTable, ScrollbarTableState};
|
||||
use crate::ui::UI_HEADER_SIZE;
|
||||
|
|
@ -13,13 +13,13 @@ use ratatui::widgets::{Cell, Paragraph, Row, Wrap};
|
|||
pub struct LogsByIdentifier<'a> {
|
||||
lines: &'a [&'a LogLine<'a>],
|
||||
filter: &'a Filter,
|
||||
grouping: GroupedLogGrouping,
|
||||
grouping: DistinctLogGrouping,
|
||||
}
|
||||
|
||||
pub fn logs_by_identifier<'a>(
|
||||
lines: &'a [&'a LogLine<'a>],
|
||||
filter: &'a Filter,
|
||||
grouping: GroupedLogGrouping,
|
||||
grouping: DistinctLogGrouping,
|
||||
) -> LogsByIdentifier<'a> {
|
||||
LogsByIdentifier {
|
||||
lines,
|
||||
|
|
@ -45,7 +45,7 @@ impl StatefulWidget for LogsByIdentifier<'_> {
|
|||
.unwrap_or(self.lines.first().unwrap());
|
||||
|
||||
let par = match self.grouping {
|
||||
GroupedLogGrouping::Message => Paragraph::new(format!(
|
||||
DistinctLogGrouping::Message => Paragraph::new(format!(
|
||||
"{}{}{}\n\n{} from {} - Nextcloud {}",
|
||||
line.exception
|
||||
.as_ref()
|
||||
|
|
@ -58,7 +58,7 @@ impl StatefulWidget for LogsByIdentifier<'_> {
|
|||
line.version,
|
||||
))
|
||||
.wrap(Wrap::default()),
|
||||
GroupedLogGrouping::Request => Paragraph::new(format!(
|
||||
DistinctLogGrouping::Request => Paragraph::new(format!(
|
||||
"{} {}\n\n {} from {} by {} - Nextcloud {}",
|
||||
line.method,
|
||||
line.url,
|
||||
|
|
@ -71,14 +71,14 @@ impl StatefulWidget for LogsByIdentifier<'_> {
|
|||
};
|
||||
|
||||
let header = match self.grouping {
|
||||
GroupedLogGrouping::Message => [
|
||||
DistinctLogGrouping::Message => [
|
||||
Text::from("Remote"),
|
||||
Text::from("Method"),
|
||||
Text::from("Url"),
|
||||
Text::from("Request Id"),
|
||||
Text::from("Time").alignment(Alignment::Right),
|
||||
],
|
||||
GroupedLogGrouping::Request => [
|
||||
DistinctLogGrouping::Request => [
|
||||
Text::from("Level"),
|
||||
Text::from("App"),
|
||||
Text::from("Message"),
|
||||
|
|
@ -93,14 +93,14 @@ impl StatefulWidget for LogsByIdentifier<'_> {
|
|||
.height(1);
|
||||
|
||||
let widths = match self.grouping {
|
||||
GroupedLogGrouping::Message => [
|
||||
DistinctLogGrouping::Message => [
|
||||
Constraint::Min(16),
|
||||
Constraint::Min(8),
|
||||
Constraint::Percentage(100),
|
||||
Constraint::Min(25),
|
||||
Constraint::Length(27),
|
||||
],
|
||||
GroupedLogGrouping::Request => [
|
||||
DistinctLogGrouping::Request => [
|
||||
Constraint::Min(16),
|
||||
Constraint::Min(8),
|
||||
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 {
|
||||
match grouping {
|
||||
GroupedLogGrouping::Message => Row::new([
|
||||
DistinctLogGrouping::Message => Row::new([
|
||||
Text::from(line.remote.as_str()),
|
||||
Text::from(line.method.as_str()),
|
||||
Text::from(line.url.as_ref()),
|
||||
Text::from(line.request_id.as_str()),
|
||||
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.app.as_ref()),
|
||||
Text::from(line.message.as_ref()),
|
||||
|
|
|
|||
|
|
@ -60,6 +60,9 @@ fn help(page: UiPage) -> &'static str {
|
|||
UiPage::DistinctLogs => {
|
||||
"«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 => {
|
||||
"«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 {
|
||||
table_state: ScrollbarTableState::new(line_count + 1),
|
||||
lines: result.lines.lines,
|
||||
grouping: GroupedLogGrouping::Message,
|
||||
grouping: DistinctLogGrouping::Message,
|
||||
previous: Box::new(self.into()),
|
||||
filter: Filter::default(),
|
||||
mode: Mode::Normal,
|
||||
|
|
@ -196,7 +196,7 @@ impl<'a> GroupState<'a> {
|
|||
previous: Box::new(self.into()),
|
||||
filter: Filter::default(),
|
||||
mode: Mode::Normal,
|
||||
grouping: GroupedLogGrouping::Message,
|
||||
grouping: DistinctLogGrouping::Message,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -207,8 +207,8 @@ impl PartialEq for GroupState<'_> {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
pub enum GroupedLogGrouping {
|
||||
#[derive(Clone, Copy, Eq, PartialEq)]
|
||||
pub enum DistinctLogGrouping {
|
||||
Message,
|
||||
Request,
|
||||
}
|
||||
|
|
@ -219,7 +219,7 @@ pub struct DistinctLogsState<'a> {
|
|||
pub previous: Box<UiState<'a>>,
|
||||
pub filter: Filter,
|
||||
mode: Mode,
|
||||
pub grouping: GroupedLogGrouping,
|
||||
pub grouping: DistinctLogGrouping,
|
||||
}
|
||||
|
||||
impl<'a> DistinctLogsState<'a> {
|
||||
|
|
@ -292,7 +292,7 @@ impl<'a> DistinctLogsState<'a> {
|
|||
filter: Filter::default(),
|
||||
table_state,
|
||||
previous: Box::new(self.into()),
|
||||
grouping: GroupedLogGrouping::Request,
|
||||
grouping: DistinctLogGrouping::Request,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -332,7 +332,7 @@ impl<'a> LogState<'a> {
|
|||
filter: Filter::default(),
|
||||
table_state,
|
||||
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::Group(_) => UiPage::Group,
|
||||
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::Errors(_) => UiPage::Errors,
|
||||
UiState::Error(_) => UiPage::Error,
|
||||
|
|
@ -596,7 +603,9 @@ impl<'a> UiState<'a> {
|
|||
copy_osc(raw);
|
||||
(false, UiState::Log(state))
|
||||
}
|
||||
(UiState::Distinct(state), UiEvent::ByRequest) => {
|
||||
(UiState::Distinct(state), UiEvent::ByRequest)
|
||||
if state.grouping == DistinctLogGrouping::Message =>
|
||||
{
|
||||
let selected = state.selected();
|
||||
(true, state.by_request(selected, app))
|
||||
}
|
||||
|
|
@ -681,6 +690,7 @@ pub enum UiPage {
|
|||
GroupList,
|
||||
Group,
|
||||
DistinctLogs,
|
||||
ByRequest,
|
||||
Log,
|
||||
Errors,
|
||||
Error,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue