Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/interpreter/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ pub struct Context {
pub current_view: Option<ChDigViews>,

pub perfetto_server: Option<Arc<PerfettoServer>>,

pub queries_filter: Arc<Mutex<String>>,
pub queries_limit: Arc<Mutex<u64>>,
}

impl Context {
Expand All @@ -65,6 +68,9 @@ impl Context {

let view_registry = crate::view::ViewRegistry::new();

let queries_filter = Arc::new(Mutex::new(String::new()));
let queries_limit = Arc::new(Mutex::new(options.view.queries_limit));

let context = Arc::new(Mutex::new(Context {
options,
clickhouse,
Expand All @@ -83,6 +89,8 @@ impl Context {
selected_host: None,
current_view: None,
perfetto_server: None,
queries_filter,
queries_limit,
}));

context.lock().unwrap().worker.start(context.clone());
Expand Down
10 changes: 10 additions & 0 deletions src/interpreter/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,10 @@ pub struct ViewOptions {
/// Disable stripping common hostname prefix and suffix in queries and logs views
#[arg(long, action = ArgAction::SetTrue)]
pub no_strip_hostname_suffix: bool,

/// Limit for number of queries to render in queries views
#[arg(long, default_value_t = 10000)]
pub queries_limit: u64,
// TODO: --mouse/--no-mouse (see EXIT_MOUSE_SEQUENCE in termion)
}

Expand Down Expand Up @@ -371,6 +375,7 @@ struct ChDigViewConfig {
end: Option<String>,
wrap: Option<bool>,
no_strip_hostname_suffix: Option<bool>,
queries_limit: Option<u64>,
}

#[derive(Deserialize, Default)]
Expand Down Expand Up @@ -593,6 +598,9 @@ fn apply_chdig_config(options: &mut ChDigOptions, config: &ChDigConfig) {
{
options.view.no_strip_hostname_suffix = no_strip;
}
if let Some(queries_limit) = view.queries_limit {
options.view.queries_limit = queries_limit;
}

// service section
let svc = &config.service;
Expand Down Expand Up @@ -1252,6 +1260,7 @@ mod tests {
assert_eq!(config.view.end.as_deref(), Some("30min"));
assert_eq!(config.view.wrap, Some(true));
assert_eq!(config.view.no_strip_hostname_suffix, Some(true));
assert_eq!(config.view.queries_limit, Some(500));

assert_eq!(config.service.log.as_deref(), Some("/tmp/chdig.log"));
assert_eq!(
Expand Down Expand Up @@ -1313,6 +1322,7 @@ mod tests {
assert_eq!(options.view.no_subqueries, true);
assert_eq!(options.view.wrap, true);
assert_eq!(options.view.no_strip_hostname_suffix, true);
assert_eq!(options.view.queries_limit, 500);
assert_eq!(options.service.log.as_deref(), Some("/tmp/chdig.log"));
assert_eq!(
options.service.pastila_clickhouse_host,
Expand Down
33 changes: 32 additions & 1 deletion src/view/navigation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -391,13 +391,14 @@ impl Navigation for Cursive {
}

let context = self.user_data::<ContextArc>().unwrap().clone();
let (opts, server_version, selected_host, current_view) = {
let (opts, server_version, selected_host, current_view, queries_filter) = {
let ctx = context.lock().unwrap();
(
ctx.options.clone(),
ctx.server_version.clone(),
ctx.selected_host.clone(),
ctx.current_view,
ctx.queries_filter.lock().unwrap().clone(),
)
};

Expand Down Expand Up @@ -477,6 +478,18 @@ impl Navigation for Cursive {
"set_no_strip_hostname_suffix",
opts.view.no_strip_hostname_suffix,
));
layout.add_child(edit_row(
"queries_filter",
"set_queries_filter",
&queries_filter,
30,
));
layout.add_child(edit_row(
"queries_limit",
"set_queries_limit",
&opts.view.queries_limit.to_string(),
12,
));
layout.add_child(edit_row(
"start",
"set_start",
Expand Down Expand Up @@ -649,6 +662,14 @@ impl Navigation for Cursive {
v.is_checked()
})
.unwrap();
let queries_filter = siv
.call_on_name("set_queries_filter", |v: &mut EditView| {
(*v.get_content()).clone()
})
.unwrap();
let queries_limit_str = siv
.call_on_name("set_queries_limit", |v: &mut EditView| v.get_content())
.unwrap();
let start_str = siv
.call_on_name("set_start", |v: &mut EditView| v.get_content())
.unwrap();
Expand Down Expand Up @@ -726,6 +747,13 @@ impl Navigation for Cursive {
return;
}
};
let queries_limit: u64 = match queries_limit_str.parse() {
Ok(v) => v,
Err(_) => {
siv.add_layer(Dialog::info("Invalid queries_limit value"));
return;
}
};
let new_start = match start_str.parse::<crate::common::RelativeDateTime>() {
Ok(v) => v,
Err(err) => {
Expand Down Expand Up @@ -753,6 +781,9 @@ impl Navigation for Cursive {
ctx.options.view.no_subqueries = no_subqueries;
ctx.options.view.wrap = wrap;
ctx.options.view.no_strip_hostname_suffix = no_strip;
*ctx.queries_filter.lock().unwrap() = queries_filter;
ctx.options.view.queries_limit = queries_limit;
*ctx.queries_limit.lock().unwrap() = queries_limit;
ctx.options.view.start = new_start;
ctx.options.view.end = new_end;

Expand Down
4 changes: 2 additions & 2 deletions src/view/queries_view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -947,8 +947,8 @@ impl QueriesView {
let delay = context.lock().unwrap().options.view.delay_interval;

let is_system_processes = matches!(processes_type, Type::ProcessList);
let filter = Arc::new(Mutex::new(String::new()));
let limit = Arc::new(Mutex::new(10000));
let filter = context.lock().unwrap().queries_filter.clone();
let limit = context.lock().unwrap().queries_limit.clone();

let update_callback_context = context.clone();
let update_callback_filter = filter.clone();
Expand Down
1 change: 1 addition & 0 deletions tests/configs/chdig_basic.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ view:
end: "30min"
wrap: true
no_strip_hostname_suffix: true
queries_limit: 500

service:
log: "/tmp/chdig.log"
Expand Down
Loading