mirror of
https://github.com/tstack/lnav.git
synced 2024-09-11 13:05:51 +03:00
[tests] more gantt tests
This commit is contained in:
parent
b791c573e1
commit
98699b318c
@ -75,7 +75,7 @@ strftime_rfc3339(
|
||||
return index;
|
||||
}
|
||||
|
||||
}
|
||||
} // namespace lnav
|
||||
|
||||
static time_t BAD_DATE = -1;
|
||||
|
||||
@ -225,6 +225,17 @@ secs2tm(lnav::time64_t tim, struct tm* res)
|
||||
return (res);
|
||||
}
|
||||
|
||||
exttm
|
||||
exttm::from_tv(const timeval& tv)
|
||||
{
|
||||
auto retval = exttm{};
|
||||
|
||||
retval.et_tm = *gmtime(&tv.tv_sec);
|
||||
retval.et_nsec = tv.tv_usec * 1000;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
struct timeval
|
||||
exttm::to_timeval() const
|
||||
{
|
||||
|
@ -104,6 +104,8 @@ enum exttm_flags_t {
|
||||
};
|
||||
|
||||
struct exttm {
|
||||
static exttm from_tv(const timeval& tv);
|
||||
|
||||
struct tm et_tm {};
|
||||
int32_t et_nsec{0};
|
||||
unsigned int et_flags{0};
|
||||
|
@ -321,6 +321,9 @@ gantt_source::rebuild_indexes()
|
||||
this->gs_preview_source.clear();
|
||||
this->gs_preview_status_source.get_description().clear();
|
||||
|
||||
auto min_log_time_opt = this->gs_lss.get_min_log_time();
|
||||
auto max_log_time_opt = this->gs_lss.get_max_log_time();
|
||||
|
||||
auto max_desc_width = size_t{0};
|
||||
|
||||
std::map<string_fragment, opid_row> active_opids;
|
||||
@ -403,6 +406,7 @@ gantt_source::rebuild_indexes()
|
||||
}
|
||||
this->gs_filter_hits = {};
|
||||
for (auto& pair : time_order_map) {
|
||||
auto& otr = pair.second.or_value;
|
||||
auto& full_desc = pair.second.or_description;
|
||||
for (auto& desc : pair.second.or_descriptions) {
|
||||
const auto& format_desc_defs
|
||||
@ -450,6 +454,14 @@ gantt_source::rebuild_indexes()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (min_log_time_opt && otr.otr_end < min_log_time_opt.value()) {
|
||||
filtered_out = true;
|
||||
}
|
||||
if (max_log_time_opt && max_log_time_opt.value() < otr.otr_begin) {
|
||||
filtered_out = true;
|
||||
}
|
||||
|
||||
if ((filtered_in_count > 0 && !filtered_in) || filtered_out) {
|
||||
this->gs_filtered_count += 1;
|
||||
continue;
|
||||
|
@ -176,10 +176,13 @@
|
||||
|
||||
.. _close:
|
||||
|
||||
:close
|
||||
^^^^^^
|
||||
:close *path*
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
Close the top file in the view
|
||||
Close the given file(s) or the top file in the view
|
||||
|
||||
**Parameters**
|
||||
* **path** --- A path or glob pattern that specifies the files to close
|
||||
|
||||
|
||||
----
|
||||
|
@ -2867,47 +2867,80 @@ com_close(exec_context& ec, std::string cmdline, std::vector<std::string>& args)
|
||||
std::string retval;
|
||||
|
||||
if (args.empty()) {
|
||||
} else {
|
||||
textview_curses* tc = *lnav_data.ld_view_stack.top();
|
||||
nonstd::optional<ghc::filesystem::path> actual_path;
|
||||
std::string fn;
|
||||
args.emplace_back("loaded-files");
|
||||
return Ok(retval);
|
||||
}
|
||||
|
||||
if (tc == &lnav_data.ld_views[LNV_TEXT]) {
|
||||
textfile_sub_source& tss = lnav_data.ld_text_source;
|
||||
auto* tc = *lnav_data.ld_view_stack.top();
|
||||
std::vector<nonstd::optional<ghc::filesystem::path>> actual_path_v;
|
||||
std::vector<std::string> fn_v;
|
||||
|
||||
if (tss.empty()) {
|
||||
return ec.make_error("no text files are opened");
|
||||
} else {
|
||||
fn = tss.current_file()->get_filename();
|
||||
lnav_data.ld_active_files.request_close(tss.current_file());
|
||||
if (args.size() > 1) {
|
||||
auto lexer = shlex(cmdline);
|
||||
|
||||
if (tss.size() == 1) {
|
||||
lnav_data.ld_view_stack.pop_back();
|
||||
}
|
||||
lexer.split(args, ec.create_resolver());
|
||||
args.erase(args.begin());
|
||||
|
||||
for (const auto& lf : lnav_data.ld_active_files.fc_files) {
|
||||
if (lf.get() == nullptr) {
|
||||
continue;
|
||||
}
|
||||
} else if (tc == &lnav_data.ld_views[LNV_LOG]) {
|
||||
if (tc->get_inner_height() == 0) {
|
||||
return ec.make_error("no log files loaded");
|
||||
} else {
|
||||
logfile_sub_source& lss = lnav_data.ld_log_source;
|
||||
vis_line_t vl = tc->get_selection();
|
||||
content_line_t cl = lss.at(vl);
|
||||
std::shared_ptr<logfile> lf = lss.find(cl);
|
||||
|
||||
actual_path = lf->get_actual_path();
|
||||
fn = lf->get_filename();
|
||||
if (!ec.ec_dry_run) {
|
||||
lnav_data.ld_active_files.request_close(lf);
|
||||
}
|
||||
auto find_iter
|
||||
= find_if(args.begin(), args.end(), [&lf](const auto& arg) {
|
||||
return fnmatch(arg.c_str(), lf->get_filename().c_str(), 0)
|
||||
== 0;
|
||||
});
|
||||
|
||||
if (find_iter == args.end()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
actual_path_v.push_back(lf->get_actual_path());
|
||||
fn_v.emplace_back(lf->get_filename());
|
||||
if (!ec.ec_dry_run) {
|
||||
lnav_data.ld_active_files.request_close(lf);
|
||||
}
|
||||
} else {
|
||||
return ec.make_error(
|
||||
"close must be run in the log or text file views");
|
||||
}
|
||||
if (!fn.empty()) {
|
||||
if (ec.ec_dry_run) {
|
||||
retval = "";
|
||||
} else {
|
||||
} else if (tc == &lnav_data.ld_views[LNV_TEXT]) {
|
||||
auto& tss = lnav_data.ld_text_source;
|
||||
|
||||
if (tss.empty()) {
|
||||
return ec.make_error("no text files are opened");
|
||||
} else {
|
||||
fn_v.emplace_back(tss.current_file()->get_filename());
|
||||
lnav_data.ld_active_files.request_close(tss.current_file());
|
||||
|
||||
if (tss.size() == 1) {
|
||||
lnav_data.ld_view_stack.pop_back();
|
||||
}
|
||||
}
|
||||
} else if (tc == &lnav_data.ld_views[LNV_LOG]) {
|
||||
if (tc->get_inner_height() == 0) {
|
||||
return ec.make_error("no log files loaded");
|
||||
} else {
|
||||
auto& lss = lnav_data.ld_log_source;
|
||||
auto vl = tc->get_selection();
|
||||
auto cl = lss.at(vl);
|
||||
auto lf = lss.find(cl);
|
||||
|
||||
actual_path_v.push_back(lf->get_actual_path());
|
||||
fn_v.emplace_back(lf->get_filename());
|
||||
if (!ec.ec_dry_run) {
|
||||
lnav_data.ld_active_files.request_close(lf);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return ec.make_error("close must be run in the log or text file views");
|
||||
}
|
||||
if (!fn_v.empty()) {
|
||||
if (ec.ec_dry_run) {
|
||||
retval = "";
|
||||
} else {
|
||||
for (size_t lpc = 0; lpc < actual_path_v.size(); lpc++) {
|
||||
const auto& fn = fn_v[lpc];
|
||||
const auto& actual_path = actual_path_v[lpc];
|
||||
|
||||
if (is_url(fn.c_str())) {
|
||||
isc::to<curl_looper&, services::curl_streamer_t>().send(
|
||||
[fn](auto& clooper) { clooper.close_request(fn); });
|
||||
@ -2917,8 +2950,9 @@ com_close(exec_context& ec, std::string cmdline, std::vector<std::string>& args)
|
||||
actual_path.value().string());
|
||||
}
|
||||
lnav_data.ld_active_files.fc_closed_files.insert(fn);
|
||||
retval = "info: closed -- " + fn;
|
||||
}
|
||||
retval = fmt::format(FMT_STRING("info: closed -- {}"),
|
||||
fmt::join(fn_v, ", "));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2944,11 +2978,11 @@ com_file_visibility(exec_context& ec,
|
||||
}
|
||||
|
||||
if (args.size() == 1 || only_this_file) {
|
||||
textview_curses* tc = *lnav_data.ld_view_stack.top();
|
||||
auto* tc = *lnav_data.ld_view_stack.top();
|
||||
std::shared_ptr<logfile> lf;
|
||||
|
||||
if (tc == &lnav_data.ld_views[LNV_TEXT]) {
|
||||
textfile_sub_source& tss = lnav_data.ld_text_source;
|
||||
const auto& tss = lnav_data.ld_text_source;
|
||||
|
||||
if (tss.empty()) {
|
||||
return ec.make_error("no text files are opened");
|
||||
@ -2981,6 +3015,7 @@ com_file_visibility(exec_context& ec,
|
||||
make_visible ? "showing" : "hiding",
|
||||
lf->get_filename());
|
||||
} else {
|
||||
auto* top_tc = *lnav_data.ld_view_stack.top();
|
||||
int text_file_count = 0, log_file_count = 0;
|
||||
auto lexer = shlex(cmdline);
|
||||
|
||||
@ -3023,6 +3058,11 @@ com_file_visibility(exec_context& ec,
|
||||
lnav_data.ld_views[LNV_LOG]
|
||||
.get_sub_source()
|
||||
->text_filters_changed();
|
||||
if (top_tc == &lnav_data.ld_views[LNV_GANTT]) {
|
||||
lnav_data.ld_views[LNV_GANTT]
|
||||
.get_sub_source()
|
||||
->text_filters_changed();
|
||||
}
|
||||
}
|
||||
if (!ec.ec_dry_run && text_file_count > 0) {
|
||||
lnav_data.ld_views[LNV_TEXT]
|
||||
@ -3879,10 +3919,10 @@ com_export_session_to(exec_context& ec,
|
||||
tcsetattr(1, TCSANOW, &curr_termios);
|
||||
setvbuf(stdout, nullptr, _IONBF, 0);
|
||||
to_term = true;
|
||||
fprintf(
|
||||
outfile,
|
||||
"\n---------------- Press any key to exit lo-fi display "
|
||||
"----------------\n\n");
|
||||
fprintf(outfile,
|
||||
"\n---------------- Press any key to exit lo-fi "
|
||||
"display "
|
||||
"----------------\n\n");
|
||||
} else {
|
||||
outfile = auto_mem<FILE>::leak(ec_out.value());
|
||||
}
|
||||
@ -4039,30 +4079,31 @@ com_hide_line(exec_context& ec,
|
||||
if (args.empty()) {
|
||||
args.emplace_back("move-time");
|
||||
} else if (args.size() == 1) {
|
||||
textview_curses* tc = *lnav_data.ld_view_stack.top();
|
||||
logfile_sub_source& lss = lnav_data.ld_log_source;
|
||||
auto* tc = *lnav_data.ld_view_stack.top();
|
||||
auto& lss = lnav_data.ld_log_source;
|
||||
|
||||
if (tc == &lnav_data.ld_views[LNV_LOG]) {
|
||||
struct timeval min_time, max_time;
|
||||
bool have_min_time = lss.get_min_log_time(min_time);
|
||||
bool have_max_time = lss.get_max_log_time(max_time);
|
||||
auto min_time_opt = lss.get_min_log_time();
|
||||
auto max_time_opt = lss.get_max_log_time();
|
||||
char min_time_str[32], max_time_str[32];
|
||||
|
||||
if (have_min_time) {
|
||||
sql_strftime(min_time_str, sizeof(min_time_str), min_time);
|
||||
if (min_time_opt) {
|
||||
sql_strftime(
|
||||
min_time_str, sizeof(min_time_str), min_time_opt.value());
|
||||
}
|
||||
if (have_max_time) {
|
||||
sql_strftime(max_time_str, sizeof(max_time_str), max_time);
|
||||
if (max_time_opt) {
|
||||
sql_strftime(
|
||||
max_time_str, sizeof(max_time_str), max_time_opt.value());
|
||||
}
|
||||
if (have_min_time && have_max_time) {
|
||||
if (min_time_opt && max_time_opt) {
|
||||
retval = fmt::format(
|
||||
FMT_STRING("info: hiding lines before {} and after {}"),
|
||||
min_time_str,
|
||||
max_time_str);
|
||||
} else if (have_min_time) {
|
||||
} else if (min_time_opt) {
|
||||
retval = fmt::format(FMT_STRING("info: hiding lines before {}"),
|
||||
min_time_str);
|
||||
} else if (have_max_time) {
|
||||
} else if (max_time_opt) {
|
||||
retval = fmt::format(FMT_STRING("info: hiding lines after {}"),
|
||||
max_time_str);
|
||||
} else {
|
||||
@ -4076,55 +4117,54 @@ com_hide_line(exec_context& ec,
|
||||
}
|
||||
} else if (args.size() >= 2) {
|
||||
std::string all_args = remaining_args(cmdline, args);
|
||||
textview_curses* tc = *lnav_data.ld_view_stack.top();
|
||||
logfile_sub_source& lss = lnav_data.ld_log_source;
|
||||
auto* tc = *lnav_data.ld_view_stack.top();
|
||||
auto* ttt = dynamic_cast<text_time_translator*>(tc->get_sub_source());
|
||||
auto& lss = lnav_data.ld_log_source;
|
||||
date_time_scanner dts;
|
||||
struct timeval tv;
|
||||
bool tv_set = false;
|
||||
struct timeval tv_abs;
|
||||
nonstd::optional<timeval> tv_opt;
|
||||
auto parse_res = relative_time::from_str(all_args);
|
||||
|
||||
if (parse_res.isOk()) {
|
||||
if (tc == &lnav_data.ld_views[LNV_LOG]) {
|
||||
if (ttt != nullptr) {
|
||||
if (tc->get_inner_height() > 0) {
|
||||
content_line_t cl;
|
||||
struct exttm tm;
|
||||
vis_line_t vl;
|
||||
logline* ll;
|
||||
|
||||
vl = tc->get_selection();
|
||||
cl = lnav_data.ld_log_source.at(vl);
|
||||
ll = lnav_data.ld_log_source.find_line(cl);
|
||||
ll->to_exttm(tm);
|
||||
tv = parse_res.unwrap().adjust(tm).to_timeval();
|
||||
|
||||
tv_set = true;
|
||||
auto vl = tc->get_selection();
|
||||
auto log_tv = ttt->time_for_row(vl);
|
||||
if (log_tv) {
|
||||
tm = exttm::from_tv(log_tv.value());
|
||||
tv_opt = parse_res.unwrap().adjust(tm).to_timeval();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return ec.make_error(
|
||||
"relative time values only work in the log view");
|
||||
}
|
||||
} else if (dts.convert_to_timeval(all_args, tv)) {
|
||||
if (tc == &lnav_data.ld_views[LNV_LOG]) {
|
||||
tv_set = true;
|
||||
} else {
|
||||
return ec.make_error("time values only work in the log view");
|
||||
"relative time values only work in a time-based view");
|
||||
}
|
||||
} else if (dts.convert_to_timeval(all_args, tv_abs)) {
|
||||
tv_opt = tv_abs;
|
||||
}
|
||||
|
||||
if (tv_set && !ec.ec_dry_run) {
|
||||
if (tv_opt && !ec.ec_dry_run) {
|
||||
char time_text[256];
|
||||
std::string relation;
|
||||
|
||||
sql_strftime(time_text, sizeof(time_text), tv);
|
||||
sql_strftime(time_text, sizeof(time_text), tv_opt.value());
|
||||
if (args[0] == "hide-lines-before") {
|
||||
lss.set_min_log_time(tv);
|
||||
lss.set_min_log_time(tv_opt.value());
|
||||
relation = "before";
|
||||
} else {
|
||||
lss.set_max_log_time(tv);
|
||||
lss.set_max_log_time(tv_opt.value());
|
||||
relation = "after";
|
||||
}
|
||||
|
||||
retval = "info: hiding lines " + relation + " " + time_text;
|
||||
if (ttt != nullptr && tc != &lnav_data.ld_views[LNV_LOG]) {
|
||||
tc->get_sub_source()->text_filters_changed();
|
||||
tc->reload_data();
|
||||
}
|
||||
|
||||
retval = fmt::format(
|
||||
FMT_STRING("info: hiding lines {} {}"), relation, time_text);
|
||||
}
|
||||
}
|
||||
|
||||
@ -5185,7 +5225,8 @@ readline_context::command_t STD_COMMANDS[] = {
|
||||
"The initial value to fill in for the prompt")
|
||||
.optional())
|
||||
.with_example({
|
||||
"To open the command prompt with 'filter-in' already filled in",
|
||||
"To open the command prompt with 'filter-in' already filled "
|
||||
"in",
|
||||
"command : 'filter-in '",
|
||||
})
|
||||
.with_example({
|
||||
@ -5263,8 +5304,8 @@ readline_context::command_t STD_COMMANDS[] = {
|
||||
com_mark,
|
||||
|
||||
help_text(":mark")
|
||||
.with_summary(
|
||||
"Toggle the bookmark state for the top line in the current view")
|
||||
.with_summary("Toggle the bookmark state for the top line in the "
|
||||
"current view")
|
||||
.with_tags({"bookmarks"})},
|
||||
{
|
||||
"mark-expr",
|
||||
@ -5296,8 +5337,8 @@ readline_context::command_t STD_COMMANDS[] = {
|
||||
com_goto_mark,
|
||||
|
||||
help_text(":next-mark")
|
||||
.with_summary(
|
||||
"Move to the next bookmark of the given type in the current view")
|
||||
.with_summary("Move to the next bookmark of the given type in the "
|
||||
"current view")
|
||||
.with_parameter(help_text("type",
|
||||
"The type of bookmark -- error, warning, "
|
||||
"search, user, file, meta")
|
||||
@ -5464,9 +5505,9 @@ readline_context::command_t STD_COMMANDS[] = {
|
||||
help_text("pattern", "The regular expression to match"))
|
||||
.with_opposites({"filter-in", "filter-out"})
|
||||
.with_tags({"filtering"})
|
||||
.with_example(
|
||||
{"To delete the filter with the pattern 'last message repeated'",
|
||||
"last message repeated"})},
|
||||
.with_example({"To delete the filter with the pattern 'last "
|
||||
"message repeated'",
|
||||
"last message repeated"})},
|
||||
{
|
||||
"filter-expr",
|
||||
com_filter_expr,
|
||||
@ -5484,8 +5525,10 @@ readline_context::command_t STD_COMMANDS[] = {
|
||||
"messages from 'syslogd'",
|
||||
":log_procname = 'syslogd'"})
|
||||
.with_example(
|
||||
{"To set a filter expression that matches log messages where "
|
||||
"'id' is followed by a number and contains the string 'foo'",
|
||||
{"To set a filter expression that matches log messages "
|
||||
"where "
|
||||
"'id' is followed by a number and contains the string "
|
||||
"'foo'",
|
||||
":log_body REGEXP 'id\\d+' AND :log_body REGEXP 'foo'"}),
|
||||
|
||||
com_filter_expr_prompt,
|
||||
@ -5505,9 +5548,9 @@ readline_context::command_t STD_COMMANDS[] = {
|
||||
"Append marked lines in the current view to the given file")
|
||||
.with_parameter(help_text("path", "The path to the file to append to"))
|
||||
.with_tags({"io"})
|
||||
.with_example(
|
||||
{"To append marked lines to the file /tmp/interesting-lines.txt",
|
||||
"/tmp/interesting-lines.txt"})},
|
||||
.with_example({"To append marked lines to the file "
|
||||
"/tmp/interesting-lines.txt",
|
||||
"/tmp/interesting-lines.txt"})},
|
||||
{"write-to",
|
||||
com_save_to,
|
||||
|
||||
@ -5518,9 +5561,9 @@ readline_context::command_t STD_COMMANDS[] = {
|
||||
help_text("--anonymize", "Anonymize the lines").optional())
|
||||
.with_parameter(help_text("path", "The path to the file to write"))
|
||||
.with_tags({"io", "scripting"})
|
||||
.with_example(
|
||||
{"To write marked lines to the file /tmp/interesting-lines.txt",
|
||||
"/tmp/interesting-lines.txt"})},
|
||||
.with_example({"To write marked lines to the file "
|
||||
"/tmp/interesting-lines.txt",
|
||||
"/tmp/interesting-lines.txt"})},
|
||||
{"write-csv-to",
|
||||
com_save_to,
|
||||
|
||||
@ -5667,9 +5710,9 @@ readline_context::command_t STD_COMMANDS[] = {
|
||||
"pattern", "The regular expression used in the filter command"))
|
||||
.with_tags({"filtering"})
|
||||
.with_opposites({"filter-out", "filter-in"})
|
||||
.with_example(
|
||||
{"To disable the filter with the pattern 'last message repeated'",
|
||||
"last message repeated"})},
|
||||
.with_example({"To disable the filter with the pattern 'last "
|
||||
"message repeated'",
|
||||
"last message repeated"})},
|
||||
{"enable-word-wrap",
|
||||
com_enable_word_wrap,
|
||||
|
||||
@ -5714,10 +5757,10 @@ readline_context::command_t STD_COMMANDS[] = {
|
||||
.with_parameter(
|
||||
help_text("table-name", "The name of the table to create"))
|
||||
.with_parameter(
|
||||
help_text(
|
||||
"pattern",
|
||||
"The regular expression used to capture the table columns. "
|
||||
"If not given, the current search pattern is used.")
|
||||
help_text("pattern",
|
||||
"The regular expression used to capture the table "
|
||||
"columns. "
|
||||
"If not given, the current search pattern is used.")
|
||||
.optional())
|
||||
.with_tags({"vtables", "sql"})
|
||||
.with_example(
|
||||
@ -5779,18 +5822,23 @@ readline_context::command_t STD_COMMANDS[] = {
|
||||
com_close,
|
||||
|
||||
help_text(":close")
|
||||
.with_summary("Close the top file in the view")
|
||||
.with_summary("Close the given file(s) or the top file in the view")
|
||||
.with_parameter(help_text{
|
||||
"path", "A path or glob pattern that specifies the files to close"}
|
||||
.zero_or_more())
|
||||
.with_opposites({"open"})},
|
||||
{
|
||||
"comment",
|
||||
com_comment,
|
||||
|
||||
help_text(":comment")
|
||||
.with_summary(
|
||||
"Attach a comment to the top log line. The comment will be "
|
||||
"displayed right below the log message it is associated with. "
|
||||
"The comment can be formatted using markdown and you can add "
|
||||
"new-lines with '\\n'.")
|
||||
.with_summary("Attach a comment to the top log line. The "
|
||||
"comment will be "
|
||||
"displayed right below the log message it is "
|
||||
"associated with. "
|
||||
"The comment can be formatted using markdown and "
|
||||
"you can add "
|
||||
"new-lines with '\\n'.")
|
||||
.with_parameter(help_text("text", "The comment text"))
|
||||
.with_example({"To add the comment 'This is where it all went "
|
||||
"wrong' to the top line",
|
||||
@ -5875,9 +5923,9 @@ readline_context::command_t STD_COMMANDS[] = {
|
||||
"of the values in the given column")
|
||||
.with_parameter(
|
||||
help_text("column-name", "The name of the column to analyze."))
|
||||
.with_example(
|
||||
{"To get a summary of the sc_bytes column in the access_log table",
|
||||
"sc_bytes"})},
|
||||
.with_example({"To get a summary of the sc_bytes column in the "
|
||||
"access_log table",
|
||||
"sc_bytes"})},
|
||||
{"switch-to-view",
|
||||
com_switch_to_view,
|
||||
|
||||
|
@ -240,11 +240,15 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
bool get_min_log_time(struct timeval& tv_out) const
|
||||
nonstd::optional<timeval> get_min_log_time() const
|
||||
{
|
||||
tv_out = this->lss_min_log_time;
|
||||
return (this->lss_min_log_time.tv_sec != 0
|
||||
|| this->lss_min_log_time.tv_usec != 0);
|
||||
if (this->lss_min_log_time.tv_sec == 0
|
||||
&& this->lss_min_log_time.tv_usec == 0)
|
||||
{
|
||||
return nonstd::nullopt;
|
||||
}
|
||||
|
||||
return this->lss_min_log_time;
|
||||
}
|
||||
|
||||
void set_min_log_time(const struct timeval& tv)
|
||||
@ -255,12 +259,15 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
bool get_max_log_time(struct timeval& tv_out) const
|
||||
nonstd::optional<timeval> get_max_log_time() const
|
||||
{
|
||||
tv_out = this->lss_max_log_time;
|
||||
return (this->lss_max_log_time.tv_sec
|
||||
!= std::numeric_limits<time_t>::max()
|
||||
|| this->lss_max_log_time.tv_usec != 0);
|
||||
if (this->lss_max_log_time.tv_sec == std::numeric_limits<time_t>::max()
|
||||
&& this->lss_max_log_time.tv_usec == 0)
|
||||
{
|
||||
return nonstd::nullopt;
|
||||
}
|
||||
|
||||
return this->lss_max_log_time;
|
||||
}
|
||||
|
||||
void set_max_log_time(struct timeval& tv)
|
||||
|
@ -377,15 +377,18 @@ add_file_possibilities()
|
||||
|
||||
rc->clear_possibilities(ln_mode_t::COMMAND, "visible-files");
|
||||
rc->clear_possibilities(ln_mode_t::COMMAND, "hidden-files");
|
||||
rc->clear_possibilities(ln_mode_t::COMMAND, "loaded-files");
|
||||
for (const auto& lf : lnav_data.ld_active_files.fc_files) {
|
||||
if (lf.get() == nullptr) {
|
||||
continue;
|
||||
}
|
||||
|
||||
lnav_data.ld_log_source.find_data(lf) | [&lf, rc](auto ld) {
|
||||
auto escaped_fn
|
||||
= std::regex_replace(lf->get_filename(), sh_escape, R"(\\\1)");
|
||||
auto escaped_fn
|
||||
= std::regex_replace(lf->get_filename(), sh_escape, R"(\\\1)");
|
||||
|
||||
rc->add_possibility(ln_mode_t::COMMAND, "loaded-files", escaped_fn);
|
||||
|
||||
lnav_data.ld_log_source.find_data(lf) | [&escaped_fn, rc](auto ld) {
|
||||
rc->add_possibility(
|
||||
ln_mode_t::COMMAND,
|
||||
ld->is_visible() ? "visible-files" : "hidden-files",
|
||||
|
@ -431,14 +431,15 @@ SELECT content_id, format, time_offset FROM lnav_file
|
||||
level_names[min_level]);
|
||||
}
|
||||
|
||||
struct timeval min_time, max_time;
|
||||
char tsbuf[128];
|
||||
if (lss->get_min_log_time(min_time)) {
|
||||
sql_strftime(tsbuf, sizeof(tsbuf), min_time, 'T');
|
||||
auto min_time_opt = lss->get_min_log_time();
|
||||
if (min_time_opt) {
|
||||
sql_strftime(tsbuf, sizeof(tsbuf), min_time_opt.value(), 'T');
|
||||
fmt::print(file, FMT_STRING(":hide-lines-before {}\n"), tsbuf);
|
||||
}
|
||||
if (lss->get_max_log_time(max_time)) {
|
||||
sql_strftime(tsbuf, sizeof(tsbuf), max_time, 'T');
|
||||
auto max_time_opt = lss->get_max_log_time();
|
||||
if (max_time_opt) {
|
||||
sql_strftime(tsbuf, sizeof(tsbuf), max_time_opt.value(), 'T');
|
||||
fmt::print(file, FMT_STRING(":hide-lines-after {}\n"), tsbuf);
|
||||
}
|
||||
for (const auto& ld : *lss) {
|
||||
|
@ -1535,20 +1535,21 @@ save_session_with_id(const std::string& session_id)
|
||||
|
||||
auto& lss = lnav_data.ld_log_source;
|
||||
|
||||
struct timeval min_time, max_time;
|
||||
bool have_min_time = lss.get_min_log_time(min_time);
|
||||
bool have_max_time = lss.get_max_log_time(max_time);
|
||||
auto min_time_opt = lss.get_min_log_time();
|
||||
auto max_time_opt = lss.get_max_log_time();
|
||||
char min_time_str[32], max_time_str[32];
|
||||
|
||||
sql_strftime(
|
||||
min_time_str, sizeof(min_time_str), min_time);
|
||||
if (have_min_time) {
|
||||
if (min_time_opt) {
|
||||
sql_strftime(min_time_str,
|
||||
sizeof(min_time_str),
|
||||
min_time_opt.value());
|
||||
cmd_array.gen("hide-lines-before "
|
||||
+ std::string(min_time_str));
|
||||
}
|
||||
if (have_max_time) {
|
||||
sql_strftime(
|
||||
max_time_str, sizeof(max_time_str), max_time);
|
||||
if (max_time_opt) {
|
||||
sql_strftime(max_time_str,
|
||||
sizeof(max_time_str),
|
||||
max_time_opt.value());
|
||||
cmd_array.gen("hide-lines-after "
|
||||
+ std::string(max_time_str));
|
||||
}
|
||||
@ -1703,9 +1704,27 @@ lnav::session::restore_view_states()
|
||||
}
|
||||
for (const auto& cmdline : vs.vs_commands) {
|
||||
auto active = ensure_view(&tview);
|
||||
execute_command(lnav_data.ld_exec_context, cmdline);
|
||||
auto exec_cmd_res
|
||||
= execute_command(lnav_data.ld_exec_context, cmdline);
|
||||
if (exec_cmd_res.isOk()) {
|
||||
log_info("Result: %s", exec_cmd_res.unwrap().c_str());
|
||||
} else {
|
||||
log_error("Result: %s",
|
||||
exec_cmd_res.unwrapErr()
|
||||
.to_attr_line()
|
||||
.get_string()
|
||||
.c_str());
|
||||
}
|
||||
if (!active) {
|
||||
lnav_data.ld_view_stack.pop_back();
|
||||
lnav_data.ld_view_stack.top() | [](auto* tc) {
|
||||
// XXX
|
||||
if (tc == &lnav_data.ld_views[LNV_GANTT]) {
|
||||
auto tss = tc->get_sub_source();
|
||||
tss->text_filters_changed();
|
||||
tc->reload_data();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -959,6 +959,14 @@ toggle_view(textview_curses* toggle_tc)
|
||||
}
|
||||
lnav_data.ld_last_view = tc;
|
||||
lnav_data.ld_view_stack.pop_back();
|
||||
lnav_data.ld_view_stack.top() | [](auto* tc) {
|
||||
// XXX
|
||||
if (tc == &lnav_data.ld_views[LNV_GANTT]) {
|
||||
auto tss = tc->get_sub_source();
|
||||
tss->text_filters_changed();
|
||||
tc->reload_data();
|
||||
}
|
||||
};
|
||||
} else {
|
||||
if (toggle_tc == &lnav_data.ld_views[LNV_LOG]
|
||||
|| toggle_tc == &lnav_data.ld_views[LNV_TEXT])
|
||||
|
@ -276,12 +276,20 @@ EXPECTED_FILES = \
|
||||
$(srcdir)/%reldir%/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.out \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_3af11588ee36bab7e2caea0f7a24d3c9cafd2310.err \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_3af11588ee36bab7e2caea0f7a24d3c9cafd2310.out \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_63500be50fc6743d8312133e2030cbbc39ca15ff.err \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_63500be50fc6743d8312133e2030cbbc39ca15ff.out \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_74a94ee9103eac5e8e78ca57bccf49efa3827a9d.err \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_74a94ee9103eac5e8e78ca57bccf49efa3827a9d.out \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_83db753dd2669f801810f311e2d7d74397e10f26.err \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_83db753dd2669f801810f311e2d7d74397e10f26.out \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_8fed8a7400042814ba13e50be5e3bd1741d82119.err \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_8fed8a7400042814ba13e50be5e3bd1741d82119.out \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_b013ab41c3cca76cf05a01ca1ba65888be247ada.err \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_b013ab41c3cca76cf05a01ca1ba65888be247ada.out \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_cde7947f361e5f3d4cd1bbc3f7458f426b6a8eb4.err \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_cde7947f361e5f3d4cd1bbc3f7458f426b6a8eb4.out \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_e6a4681a5a671c84c020dc91d7ce03c9d17fde07.err \
|
||||
$(srcdir)/%reldir%/test_gantt.sh_e6a4681a5a671c84c020dc91d7ce03c9d17fde07.out \
|
||||
$(srcdir)/%reldir%/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.err \
|
||||
$(srcdir)/%reldir%/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.out \
|
||||
$(srcdir)/%reldir%/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.err \
|
||||
|
@ -1,6 +1,6 @@
|
||||
[1m[31m✘ error[0m: no log files loaded
|
||||
[36m --> [0m[1mcommand-option[0m:2
|
||||
[36m | [0m[37m[40m:close [0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mclose[0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mclose[0m[4m [0m[4mpath[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Close the top file in the view
|
||||
Close the given file(s) or the top file in the view
|
||||
|
@ -774,9 +774,12 @@ For support questions, email:
|
||||
Clear the partition the top line is a part of
|
||||
|
||||
|
||||
[4m:[0m[1m[4mclose[0m
|
||||
[4m:[0m[1m[4mclose[0m[4m [0m[4mpath[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Close the top file in the view
|
||||
Close the given file(s) or the top file in the view
|
||||
[4mParameter[0m
|
||||
[4mpath[0m A path or glob pattern that specifies the files to
|
||||
close
|
||||
|
||||
|
||||
[4m:[0m[1m[4mcomment[0m[4m [0m[4mtext[0m
|
||||
|
@ -0,0 +1,70 @@
|
||||
2011-11-03T00:19:26.452 2011-11-03T00:21:13.204
|
||||
2011-11-03T00:17:00.000 2011-11-03T00:22:00.000
|
||||
[1m[4m[35m Duration [0m[4m|[0m[4m [0m[1m[4m[31m✘[0m[4m[33m▲[0m[4m [0m[4m|[0m[1m[4m[35m Operation[0m
|
||||
[32m 23s044[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCN5hnY3x51j6Hr1v4[0m[32m [0m[7m[32m192[0m[32m.168.2.76[0m
|
||||
[32m 32s388[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCmWpC33jXuKpXNLcie[0m[32m [0m[7m[32m192.[0m[32m168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCEh6Ka2HInkNSH01L2[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[1m[32m 4s840[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCjPGiy13ncXKxU765j[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[32m 6s895[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCPoz7NUpXISemlNSd[0m[32m 1[0m[7m[32m9[0m[32m2.168.2.76[0m
|
||||
[32m 6s837[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCt6ixh35y9AEr7J7o9[0m[32m 1[0m[7m[32m9[0m[32m2.168.2.76[0m
|
||||
[1m[32m 6s889[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCaEFHq2HVQ5iGJQiD9[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[1m[32m 6s875[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCjinlH2fzDtvzI9637[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[32m 6s884[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCedw7H3ddE2yLiLoXc[0m[32m 1[0m[7m[32m9[0m[32m2.168.2.76[0m
|
||||
[32m 6s917[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCAUlC249svUfE6q0g3[0m[32m 1[0m[7m[32m9[0m[32m2.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCIJIDL1ULo4HpT24Gl[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[1m[32m 016[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCLsqp41RLUd83arUQb[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[32m 166[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCbCciH11995WKkobR1[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[32m 457[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mClcvKE1dqsEFQu46m9[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCaP2LpLGvsmX7yJO[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[1m[32m 043[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCNbPns4mOMGgjI8Ele[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[32m 557[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC185u7u9Q4qhJPhzl[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[32m 129[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCKzjfhsJ8vrn2rrfg[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[1m[32m 562[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCiIjAe1n5MnPOVpQ9f[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCGv2Tp4Ngt8MmKmVRd[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[32m 7s071[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC5DisEMFU77Wk9Kae[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCs5yEZ3ELZTeuTOsP4[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[1m[32m 4s667[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCu4gIx1BDNtGOl7Ht2[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[1m[32m 1s288[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCRgW2I2zo3SInm6iT8[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCWJhMU2cTLEnseTmCb[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[32m 042[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCejI402rKGtdBXij4f[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mC2KnU34GcVV6amo8va[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mC5vx4911iSMAJuShFd[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCbUCgw1DrIGcXzONB7[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[32m 502[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC96j2X1DixgLTj2Oi8[0m[32m 192[0m[7m[32m.[0m[32m168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCYYyja3FFNEnftw3K6[0m[1m[32m 192[0m[1m[7m[32m.[0m[1m[32m168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m█[0m[1m[33m [0m[1m[32m [0m[1m[32mCBHHuR1xFnm5C5CQBc[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCD1jfU3p9abEm77mzf[0m[32m 192[0m[7m[32m.[0m[32m168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC0K9DaoPFkfnzwlZa[0m[32m 192[0m[7m[32m.[0m[32m168.2.76[0m
|
||||
[1m[32m 616[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCbQAWi3GX2bCmX5L56[0m[1m[32m 192.[0m[1m[7m[32m1[0m[1m[32m68.2.76[0m
|
||||
[1m[32m 298[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCd8s2R3OGDgkhnvSu9[0m[1m[32m 192.[0m[1m[7m[32m1[0m[1m[32m68.2.76[0m
|
||||
[32m 205[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCBeaXe4Iyj1gXd2Iq[0m[32m 192.[0m[7m[32m1[0m[32m68.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCmWpSw3VtjiAceBCwf[0m[32m 192.[0m[7m[32m1[0m[32m68.2.76[0m
|
||||
[1m[32m 1m12s201[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCbNCgO1MzloHRNeY4f[0m[1m[32m 192.[0m[1m[7m[32m168.2.76[0m
|
||||
[1m[32m 315[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCX1GjC4vn52UY1uDv6[0m[1m[32m 192.[0m[1m[7m[32m1[0m[1m[32m68.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCaPClb1Bf0RrRGtyWi[0m[32m 192.[0m[7m[32m1[0m[32m68.2.76[0m
|
||||
[32m 35s642[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCibfNy1QQW4ImDWRq5[0m[32m 192.[0m[7m[32m168.2[0m[32m.76[0m
|
||||
[1m[32m 1m11s547[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCTRXSR3blXJE5ZE7Ij[0m[1m[32m 192.[0m[1m[7m[32m168.2.76[0m
|
||||
[1m[32m 1m11s536[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCnGze54kQWWpKqrrZ4[0m[1m[32m 192.[0m[1m[7m[32m168.2.76[0m
|
||||
[32m 12s337[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC3TZMB4CrUwYfkGJy1[0m[32m 192.[0m[7m[32m16[0m[32m8.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCK957ERTz8lBycly4[0m[32m 192.[0m[7m[32m1[0m[32m68.2.76[0m
|
||||
[1m[32m 1s309[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCO5QKYQkcSdxQFA35[0m[1m[32m 192.1[0m[1m[7m[32m6[0m[1m[32m8.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCurHpb1TGZOktTRNP1[0m[1m[32m 192.1[0m[1m[7m[32m6[0m[1m[32m8.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCuUKOQ1R3CqKBgeTdf[0m[32m 192.16[0m[7m[32m8[0m[32m.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC3xkHgJnzZszVSTpi[0m[32m 192.16[0m[7m[32m8[0m[32m.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCMrjgF2XLmRh9C9TR4[0m[1m[32m 192.16[0m[1m[7m[32m8[0m[1m[32m.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mC2vQ8sVgyADHjtEda[0m[1m[32m 192.168.[0m[1m[7m[32m2[0m[1m[32m.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCD69521bDXIAb4IkW[0m[32m 192.168.[0m[7m[32m2[0m[32m.76[0m
|
||||
[32m 6s648[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCC3vUI3gFB04zLvWRa[0m[32m 192.168.[0m[7m[32m2[0m[32m.76[0m
|
||||
[1m[32m 2s666[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mC7Krri4g9tZfHniGXh[0m[1m[32m 192.168.[0m[1m[7m[32m2[0m[1m[32m.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCmxyBl2c8XAMTuHEk4[0m[1m[32m 192.168.2[0m[1m[7m[32m.[0m[1m[32m76[0m
|
||||
[32m 499[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCSvs6v26bQqFylkk6l[0m[32m 192.168.2[0m[7m[32m.[0m[32m76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC4pHul1H3OeWYz7o7i[0m[32m 192.168.2[0m[7m[32m.[0m[32m76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mC7Lcvr4vsTf6eYpBva[0m[1m[32m 192.168.2[0m[1m[7m[32m.[0m[1m[32m76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCV8faD4L1sLL5kDwN9[0m[1m[32m 192.168.2[0m[1m[7m[32m.[0m[1m[32m76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCxyAKs10ppnHFP6O8i[0m[32m 192.168.2[0m[7m[32m.[0m[32m76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC6MrHk2C7rLuJqhjsg[0m[32m 192.168.2[0m[7m[32m.[0m[32m76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCvfUrT2DgYXXoZw9Ah[0m[1m[32m 192.168.2[0m[1m[7m[32m.[0m[1m[32m76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCBX0254QJoklXNbvv2[0m[1m[32m 192.168.2[0m[1m[7m[32m.[0m[1m[32m76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC6Ym6jvMgikT0xTTc[0m[32m [0m[32m192.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCRNn9f1zKNlzHSM5pa[0m[32m [0m[32m192.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCJLgi92kpp2gLgGTE5[0m[1m[32m [0m[1m[32m192.168.2.76[0m
|
@ -0,0 +1,70 @@
|
||||
2011-11-03T00:19:26.452 2011-11-03T00:21:13.204
|
||||
2011-11-03T00:17:00.000 2011-11-03T00:22:00.000
|
||||
[1m[4m[35m Duration [0m[4m|[0m[4m [0m[1m[4m[31m✘[0m[4m[33m▲[0m[4m [0m[4m|[0m[1m[4m[35m Operation[0m
|
||||
[32m 844[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCwFs1P2UcUdlSxD2La[0m[32m [0m[7m[32m1[0m[32m92.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCoX7zA3OJKGUOSCBY2[0m[32m [0m[7m[32m1[0m[32m92.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCdrfXZ1NOFPEawF218[0m[1m[32m [0m[1m[7m[32m1[0m[1m[32m92.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCJwUi9bdB9c1lLW44[0m[1m[32m [0m[1m[7m[32m1[0m[1m[32m92.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCJxSUgkInyKSHiju1[0m[32m [0m[7m[32m1[0m[32m92.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCT0JIh479jXIGt0Po1[0m[32m [0m[7m[32m1[0m[32m92.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mC6Q4Vm14ZJIlZhsXqk[0m[1m[32m [0m[1m[7m[32m1[0m[1m[32m92.168.2.76[0m
|
||||
[1m[32m 1s070[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCtgxRAqDLvrRUQdqe[0m[1m[32m [0m[1m[7m[32m1[0m[1m[32m92.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCdysLK1XpcrXOpVDuh[0m[32m [0m[7m[32m1[0m[32m92.168.2.76[0m
|
||||
[32m 200[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC6nSoj1Qco9PGyslz6[0m[32m [0m[7m[32m1[0m[32m92.168.2.76[0m
|
||||
[1m[32m 23s044[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCN5hnY3x51j6Hr1v4[0m[1m[32m [0m[1m[7m[32m192[0m[1m[32m.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCdZUPH2DKOE7zzCLE3[0m[1m[32m [0m[1m[7m[32m1[0m[1m[32m92.168.2.76[0m
|
||||
[32m 32s388[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCmWpC33jXuKpXNLcie[0m[32m [0m[7m[32m192.[0m[32m168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCsBgiE1WmGP4Yo749h[0m[32m 1[0m[7m[32m9[0m[32m2.168.2.76[0m
|
||||
[1m[32m 657[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCYfHyC28tAhkLYkXB7[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCtANmVrHYMtkWqPE5[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[32m 647[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCSTH8n1O1nv0ztxNQd[0m[32m 1[0m[7m[32m9[0m[32m2.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC4uDKU5tpeRU9Su19[0m[32m 1[0m[7m[32m9[0m[32m2.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCEh6Ka2HInkNSH01L2[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[1m[32m 4s840[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCjPGiy13ncXKxU765j[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[32m 6s895[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCPoz7NUpXISemlNSd[0m[32m 1[0m[7m[32m9[0m[32m2.168.2.76[0m
|
||||
[32m 6s837[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCt6ixh35y9AEr7J7o9[0m[32m 1[0m[7m[32m9[0m[32m2.168.2.76[0m
|
||||
[1m[32m 6s889[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCaEFHq2HVQ5iGJQiD9[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[1m[32m 6s875[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCjinlH2fzDtvzI9637[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[32m 6s884[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCedw7H3ddE2yLiLoXc[0m[32m 1[0m[7m[32m9[0m[32m2.168.2.76[0m
|
||||
[32m 6s917[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCAUlC249svUfE6q0g3[0m[32m 1[0m[7m[32m9[0m[32m2.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCIJIDL1ULo4HpT24Gl[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[1m[32m 016[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCLsqp41RLUd83arUQb[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[32m 166[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCbCciH11995WKkobR1[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[32m 457[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mClcvKE1dqsEFQu46m9[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCaP2LpLGvsmX7yJO[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[1m[32m 043[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCNbPns4mOMGgjI8Ele[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[32m 557[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC185u7u9Q4qhJPhzl[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[32m 129[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCKzjfhsJ8vrn2rrfg[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[1m[32m 562[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCiIjAe1n5MnPOVpQ9f[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCGv2Tp4Ngt8MmKmVRd[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[32m 7s071[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC5DisEMFU77Wk9Kae[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCs5yEZ3ELZTeuTOsP4[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[1m[32m 4s667[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCu4gIx1BDNtGOl7Ht2[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[1m[32m 1s288[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCRgW2I2zo3SInm6iT8[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCWJhMU2cTLEnseTmCb[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[32m 042[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCejI402rKGtdBXij4f[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mC2KnU34GcVV6amo8va[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mC5vx4911iSMAJuShFd[0m[1m[32m 19[0m[1m[7m[32m2[0m[1m[32m.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCbUCgw1DrIGcXzONB7[0m[32m 19[0m[7m[32m2[0m[32m.168.2.76[0m
|
||||
[32m 502[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC96j2X1DixgLTj2Oi8[0m[32m 192[0m[7m[32m.[0m[32m168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCYYyja3FFNEnftw3K6[0m[1m[32m 192[0m[1m[7m[32m.[0m[1m[32m168.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m█[0m[1m[33m [0m[1m[32m [0m[1m[32mCBHHuR1xFnm5C5CQBc[0m[1m[32m 1[0m[1m[7m[32m9[0m[1m[32m2.168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCD1jfU3p9abEm77mzf[0m[32m 192[0m[7m[32m.[0m[32m168.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC0K9DaoPFkfnzwlZa[0m[32m 192[0m[7m[32m.[0m[32m168.2.76[0m
|
||||
[1m[32m 616[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCbQAWi3GX2bCmX5L56[0m[1m[32m 192.[0m[1m[7m[32m1[0m[1m[32m68.2.76[0m
|
||||
[1m[32m 298[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCd8s2R3OGDgkhnvSu9[0m[1m[32m 192.[0m[1m[7m[32m1[0m[1m[32m68.2.76[0m
|
||||
[32m 205[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCBeaXe4Iyj1gXd2Iq[0m[32m 192.[0m[7m[32m1[0m[32m68.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCmWpSw3VtjiAceBCwf[0m[32m 192.[0m[7m[32m1[0m[32m68.2.76[0m
|
||||
[1m[32m 1m12s201[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCbNCgO1MzloHRNeY4f[0m[1m[32m 192.[0m[1m[7m[32m168.2.76[0m
|
||||
[1m[32m 315[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCX1GjC4vn52UY1uDv6[0m[1m[32m 192.[0m[1m[7m[32m1[0m[1m[32m68.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCaPClb1Bf0RrRGtyWi[0m[32m 192.[0m[7m[32m1[0m[32m68.2.76[0m
|
||||
[32m 35s642[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCibfNy1QQW4ImDWRq5[0m[32m 192.[0m[7m[32m168.2[0m[32m.76[0m
|
||||
[1m[32m 1m11s547[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCTRXSR3blXJE5ZE7Ij[0m[1m[32m 192.[0m[1m[7m[32m168.2.76[0m
|
||||
[1m[32m 1m11s536[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCnGze54kQWWpKqrrZ4[0m[1m[32m 192.[0m[1m[7m[32m168.2.76[0m
|
||||
[32m 12s337[0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC3TZMB4CrUwYfkGJy1[0m[32m 192.[0m[7m[32m16[0m[32m8.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCK957ERTz8lBycly4[0m[32m 192.[0m[7m[32m1[0m[32m68.2.76[0m
|
||||
[1m[32m 1s309[0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCO5QKYQkcSdxQFA35[0m[1m[32m 192.1[0m[1m[7m[32m6[0m[1m[32m8.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCurHpb1TGZOktTRNP1[0m[1m[32m 192.1[0m[1m[7m[32m6[0m[1m[32m8.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mCuUKOQ1R3CqKBgeTdf[0m[32m 192.16[0m[7m[32m8[0m[32m.2.76[0m
|
||||
[32m [0m[32m [0m[1m[31m [0m[33m [0m[32m [0m[32mC3xkHgJnzZszVSTpi[0m[32m 192.16[0m[7m[32m8[0m[32m.2.76[0m
|
||||
[1m[32m [0m[1m[32m [0m[1m[31m [0m[1m[33m [0m[1m[32m [0m[1m[32mCMrjgF2XLmRh9C9TR4[0m[1m[32m 192.16[0m[1m[7m[32m8[0m[1m[32m.2.76[0m
|
@ -21,3 +21,23 @@ run_cap_test ${lnav_test} -n \
|
||||
-c ':switch-to-view gantt' \
|
||||
-c ':filter-out CdysLK1XpcrXOpVDuh' \
|
||||
${test_dir}/logfile_bro_http.log.0
|
||||
|
||||
run_cap_test ${lnav_test} -n \
|
||||
-c ':switch-to-view gantt' \
|
||||
-c ':hide-file *' \
|
||||
${test_dir}/logfile_bro_http.log.0
|
||||
|
||||
run_cap_test ${lnav_test} -n \
|
||||
-c ':switch-to-view gantt' \
|
||||
-c ':close *' \
|
||||
${test_dir}/logfile_bro_http.log.0
|
||||
|
||||
run_cap_test ${lnav_test} -n \
|
||||
-c ':switch-to-view gantt' \
|
||||
-c ':hide-lines-before 2011-11-03 00:19:37' \
|
||||
${test_dir}/logfile_bro_http.log.0
|
||||
|
||||
run_cap_test ${lnav_test} -n \
|
||||
-c ':switch-to-view gantt' \
|
||||
-c ':hide-lines-after 2011-11-03 00:20:30' \
|
||||
${test_dir}/logfile_bro_http.log.0
|
||||
|
Loading…
Reference in New Issue
Block a user