mirror of https://github.com/tstack/lnav.git
[errors] try to improve some errors
This commit is contained in:
parent
a3b9314ff7
commit
906494ebfa
|
@ -533,11 +533,11 @@ operator|(nonstd::optional<T> in,
|
|||
template<typename T, typename F>
|
||||
auto
|
||||
operator|(const T& in, const lnav::itertools::details::mapper<F>& mapper)
|
||||
-> std::vector<
|
||||
decltype(mapper.m_func(std::declval<typename T::value_type>()))>
|
||||
-> std::vector<std::remove_const_t<std::remove_reference_t<
|
||||
decltype(mapper.m_func(std::declval<typename T::value_type>()))>>>
|
||||
{
|
||||
using return_type = std::vector<decltype(mapper.m_func(
|
||||
std::declval<typename T::value_type>()))>;
|
||||
using return_type = std::vector<std::remove_const_t<std::remove_reference_t<
|
||||
decltype(mapper.m_func(std::declval<typename T::value_type>()))>>>;
|
||||
return_type retval;
|
||||
|
||||
retval.reserve(in.size());
|
||||
|
@ -569,11 +569,34 @@ template<typename T, typename F>
|
|||
auto
|
||||
operator|(const std::vector<T>& in,
|
||||
const lnav::itertools::details::mapper<F>& mapper)
|
||||
-> std::vector<typename std::remove_const_t<decltype((*(*in.begin())
|
||||
.*mapper.m_func)())>>
|
||||
-> std::vector<typename std::remove_const_t<std::remove_reference_t<
|
||||
decltype((*(std::declval<T>()).*mapper.m_func)())>>>
|
||||
{
|
||||
using return_type = std::vector<typename std::remove_const_t<decltype((
|
||||
*(*in.begin()).*mapper.m_func)())>>;
|
||||
using return_type
|
||||
= std::vector<typename std::remove_const_t<std::remove_reference_t<
|
||||
decltype((*(std::declval<T>()).*mapper.m_func)())>>>;
|
||||
return_type retval;
|
||||
|
||||
retval.reserve(in.size());
|
||||
std::transform(
|
||||
in.begin(),
|
||||
in.end(),
|
||||
std::back_inserter(retval),
|
||||
[&mapper](const auto& elem) { return ((*elem).*mapper.m_func)(); });
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
template<typename T, typename F>
|
||||
auto
|
||||
operator|(const std::set<T>& in,
|
||||
const lnav::itertools::details::mapper<F>& mapper)
|
||||
-> std::vector<typename std::remove_const_t<std::remove_reference_t<
|
||||
decltype((*(std::declval<T>()).*mapper.m_func)())>>>
|
||||
{
|
||||
using return_type
|
||||
= std::vector<typename std::remove_const_t<std::remove_reference_t<
|
||||
decltype((*(std::declval<T>()).*mapper.m_func)())>>>;
|
||||
return_type retval;
|
||||
|
||||
retval.reserve(in.size());
|
||||
|
|
|
@ -422,8 +422,11 @@ filter_sub_source::rl_change(readline_curses* rc)
|
|||
const char* errptr;
|
||||
int eoff;
|
||||
|
||||
if ((code = pcre_compile(
|
||||
new_value.c_str(), PCRE_CASELESS, &errptr, &eoff, nullptr))
|
||||
if ((code = pcre_compile(new_value.c_str(),
|
||||
PCRE_CASELESS | PCRE_UTF8,
|
||||
&errptr,
|
||||
&eoff,
|
||||
nullptr))
|
||||
== nullptr)
|
||||
{
|
||||
lnav_data.ld_filter_help_status_source.fss_error.set_value(
|
||||
|
@ -508,7 +511,7 @@ filter_sub_source::rl_perform(readline_curses* rc)
|
|||
int eoff;
|
||||
|
||||
if ((code = pcre_compile(new_value.c_str(),
|
||||
PCRE_CASELESS,
|
||||
PCRE_CASELESS | PCRE_UTF8,
|
||||
&errptr,
|
||||
&eoff,
|
||||
nullptr))
|
||||
|
|
|
@ -346,8 +346,7 @@ handle_paging_key(int ch)
|
|||
execute_command(
|
||||
ec,
|
||||
"zoom-to "
|
||||
+ std::string(
|
||||
lnav_zoom_strings[lnav_data.ld_zoom_level - 1]));
|
||||
+ lnav_zoom_strings[lnav_data.ld_zoom_level - 1]);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -358,8 +357,7 @@ handle_paging_key(int ch)
|
|||
execute_command(
|
||||
ec,
|
||||
"zoom-to "
|
||||
+ std::string(
|
||||
lnav_zoom_strings[lnav_data.ld_zoom_level + 1]));
|
||||
+ lnav_zoom_strings[lnav_data.ld_zoom_level + 1]);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -554,13 +554,13 @@
|
|||
|
||||
.. _goto:
|
||||
|
||||
:goto *line#|N%|date*
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
:goto *line#|N%|timestamp*
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Go to the given location in the top view
|
||||
|
||||
**Parameters**
|
||||
* **line#|N%|date\*** --- A line number, percent into the file, or a timestamp
|
||||
* **line#|N%|timestamp\*** --- A line number, percent into the file, or a timestamp
|
||||
|
||||
**Examples**
|
||||
To go to line 22:
|
||||
|
|
|
@ -184,7 +184,7 @@ const int ZOOM_LEVELS[] = {
|
|||
|
||||
const ssize_t ZOOM_COUNT = sizeof(ZOOM_LEVELS) / sizeof(int);
|
||||
|
||||
const char* lnav_zoom_strings[] = {
|
||||
const std::vector<std::string> lnav_zoom_strings = {
|
||||
"1-second",
|
||||
"30-second",
|
||||
"1-minute",
|
||||
|
@ -195,11 +195,9 @@ const char* lnav_zoom_strings[] = {
|
|||
"8-hour",
|
||||
"1-day",
|
||||
"1-week",
|
||||
|
||||
nullptr,
|
||||
};
|
||||
|
||||
static std::vector<std::string> DEFAULT_DB_KEY_NAMES = {
|
||||
static const std::vector<std::string> DEFAULT_DB_KEY_NAMES = {
|
||||
"match_index",
|
||||
"capture_index",
|
||||
"capture_count",
|
||||
|
|
|
@ -87,7 +87,7 @@ typedef enum {
|
|||
LNF_SECURE_MODE = (1L << LNB_SECURE_MODE),
|
||||
} lnav_flags_t;
|
||||
|
||||
extern const char* lnav_zoom_strings[];
|
||||
extern const std::vector<std::string> lnav_zoom_strings;
|
||||
|
||||
/** The status bars. */
|
||||
typedef enum {
|
||||
|
|
|
@ -47,6 +47,7 @@
|
|||
#include "base/humanize.network.hh"
|
||||
#include "base/injector.hh"
|
||||
#include "base/isc.hh"
|
||||
#include "base/itertools.hh"
|
||||
#include "base/paths.hh"
|
||||
#include "base/string_util.hh"
|
||||
#include "bound_tags.hh"
|
||||
|
@ -66,6 +67,7 @@
|
|||
#include "papertrail_proc.hh"
|
||||
#include "readline_callbacks.hh"
|
||||
#include "readline_curses.hh"
|
||||
#include "readline_highlighters.hh"
|
||||
#include "readline_possibilities.hh"
|
||||
#include "relative_time.hh"
|
||||
#include "service_tags.hh"
|
||||
|
@ -79,6 +81,8 @@
|
|||
#include "yajlpp/json_op.hh"
|
||||
#include "yajlpp/yajlpp.hh"
|
||||
|
||||
using namespace lnav::roles::literals;
|
||||
|
||||
static std::string
|
||||
remaining_args(const std::string& cmdline,
|
||||
const std::vector<std::string>& args,
|
||||
|
@ -102,6 +106,29 @@ remaining_args(const std::string& cmdline,
|
|||
return cmdline.substr(index_in_cmdline);
|
||||
}
|
||||
|
||||
static string_fragment
|
||||
remaining_args_frag(const std::string& cmdline,
|
||||
const std::vector<std::string>& args,
|
||||
size_t index = 1)
|
||||
{
|
||||
size_t start_pos = 0;
|
||||
|
||||
require(index > 0);
|
||||
|
||||
if (index >= args.size()) {
|
||||
return string_fragment{};
|
||||
}
|
||||
for (size_t lpc = 0; lpc < index; lpc++) {
|
||||
start_pos += args[lpc].length();
|
||||
}
|
||||
|
||||
size_t index_in_cmdline = cmdline.find(args[index], start_pos);
|
||||
|
||||
require(index_in_cmdline != std::string::npos);
|
||||
|
||||
return string_fragment{cmdline.c_str(), static_cast<int>(index_in_cmdline)};
|
||||
}
|
||||
|
||||
static nonstd::optional<std::string>
|
||||
find_arg(std::vector<std::string>& args, const std::string& flag)
|
||||
{
|
||||
|
@ -581,8 +608,16 @@ com_mark_expr(exec_context& ec,
|
|||
#endif
|
||||
if (retcode != SQLITE_OK) {
|
||||
const char* errmsg = sqlite3_errmsg(lnav_data.ld_db);
|
||||
auto expr_al = attr_line_t(expr).with_attr_for_all(
|
||||
VC_ROLE.value(role_t::VCR_QUOTED_CODE));
|
||||
readline_sqlite_highlighter(expr_al, -1);
|
||||
auto um
|
||||
= lnav::console::user_message::error(
|
||||
attr_line_t("invalid mark expression: ").append(expr_al))
|
||||
.with_reason(errmsg)
|
||||
.with_snippets(ec.ec_source);
|
||||
|
||||
return ec.make_error("{}", errmsg);
|
||||
return Err(um);
|
||||
}
|
||||
|
||||
auto& lss = lnav_data.ld_log_source;
|
||||
|
@ -662,8 +697,18 @@ com_goto_mark(exec_context& ec,
|
|||
for (size_t lpc = 1; lpc < args.size(); lpc++) {
|
||||
auto bt_opt = bookmark_type_t::find_type(args[lpc]);
|
||||
if (!bt_opt) {
|
||||
return ec.make_error("unknown bookmark type: {}",
|
||||
args[lpc]);
|
||||
auto um
|
||||
= lnav::console::user_message::error(
|
||||
attr_line_t("unknown bookmark type: ")
|
||||
.append(args[lpc]))
|
||||
.with_snippets(ec.ec_source)
|
||||
.with_help(
|
||||
attr_line_t("available types: ")
|
||||
.join(bookmark_type_t::get_all_types()
|
||||
| lnav::itertools::map(
|
||||
&bookmark_type_t::get_name),
|
||||
", "));
|
||||
return Err(um);
|
||||
}
|
||||
mark_types.insert(bt_opt.value());
|
||||
}
|
||||
|
@ -689,7 +734,12 @@ com_goto_mark(exec_context& ec,
|
|||
}
|
||||
|
||||
if (!new_top) {
|
||||
return ec.make_error("no more bookmarks after here");
|
||||
return ec.make_error(
|
||||
"no more {} bookmarks after here",
|
||||
fmt::join(mark_types
|
||||
| lnav::itertools::map(
|
||||
&bookmark_type_t::get_name),
|
||||
", "));
|
||||
}
|
||||
} else {
|
||||
for (const auto& bt : mark_types) {
|
||||
|
@ -1568,17 +1618,27 @@ com_highlight(exec_context& ec,
|
|||
auto_mem<pcre> code;
|
||||
int eoff;
|
||||
|
||||
args[1] = remaining_args(cmdline, args);
|
||||
auto re_frag = remaining_args_frag(cmdline, args);
|
||||
args[1] = re_frag.to_string();
|
||||
if (hm.find({highlight_source_t::INTERACTIVE, args[1]}) != hm.end()) {
|
||||
return ec.make_error("highlight already exists -- {}", args[1]);
|
||||
} else if ((code = pcre_compile(args[1].c_str(),
|
||||
PCRE_CASELESS,
|
||||
PCRE_CASELESS | PCRE_UTF8,
|
||||
&errptr,
|
||||
&eoff,
|
||||
nullptr))
|
||||
== nullptr)
|
||||
{
|
||||
return ec.make_error("{}", errptr);
|
||||
auto um = lnav::console::user_message::error(
|
||||
"invalid regular expression")
|
||||
.with_reason(errptr)
|
||||
.with_snippets(ec.ec_source);
|
||||
um.um_snippets.back()
|
||||
.s_content.append("\n")
|
||||
.append(re_frag.sf_begin + eoff, ' ')
|
||||
.append("^ "_comment)
|
||||
.append(lnav::roles::comment(errptr));
|
||||
return Err(um);
|
||||
} else {
|
||||
highlighter hl(code.release());
|
||||
attr_t hl_attrs = view_colors::singleton().attrs_for_ident(args[1]);
|
||||
|
@ -1693,7 +1753,8 @@ com_filter(exec_context& ec,
|
|||
auto_mem<pcre> code;
|
||||
int eoff;
|
||||
|
||||
args[1] = remaining_args(cmdline, args);
|
||||
auto re_frag = remaining_args_frag(cmdline, args);
|
||||
args[1] = re_frag.to_string();
|
||||
if (fs.get_filter(args[1]) != NULL) {
|
||||
return com_enable_filter(ec, cmdline, args);
|
||||
} else if (fs.full()) {
|
||||
|
@ -1701,13 +1762,22 @@ com_filter(exec_context& ec,
|
|||
"filter limit reached, try combining "
|
||||
"filters with a pipe symbol (e.g. foo|bar)");
|
||||
} else if ((code = pcre_compile(args[1].c_str(),
|
||||
PCRE_CASELESS,
|
||||
PCRE_CASELESS | PCRE_UTF8,
|
||||
&errptr,
|
||||
&eoff,
|
||||
nullptr))
|
||||
== NULL)
|
||||
{
|
||||
return ec.make_error("{}", errptr);
|
||||
auto um = lnav::console::user_message::error(
|
||||
"invalid regular expression")
|
||||
.with_reason(errptr)
|
||||
.with_snippets(ec.ec_source);
|
||||
um.um_snippets.back()
|
||||
.s_content.append("\n")
|
||||
.append(re_frag.sf_begin + eoff, ' ')
|
||||
.append("^ "_comment)
|
||||
.append(lnav::roles::comment(errptr));
|
||||
return Err(um);
|
||||
} else if (ec.ec_dry_run) {
|
||||
if (args[0] == "filter-in" && !fs.empty()) {
|
||||
lnav_data.ld_preview_status_source.get_description().set_value(
|
||||
|
@ -1900,8 +1970,16 @@ com_filter_expr(exec_context& ec,
|
|||
#endif
|
||||
if (retcode != SQLITE_OK) {
|
||||
const char* errmsg = sqlite3_errmsg(lnav_data.ld_db);
|
||||
auto expr_al = attr_line_t(expr).with_attr_for_all(
|
||||
VC_ROLE.value(role_t::VCR_QUOTED_CODE));
|
||||
readline_sqlite_highlighter(expr_al, -1);
|
||||
auto um = lnav::console::user_message::error(
|
||||
attr_line_t("invalid filter expression: ")
|
||||
.append(expr_al))
|
||||
.with_reason(errmsg)
|
||||
.with_snippets(ec.ec_source);
|
||||
|
||||
return ec.make_error("{}", errmsg);
|
||||
return Err(um);
|
||||
}
|
||||
|
||||
if (ec.ec_dry_run) {
|
||||
|
@ -2105,10 +2183,12 @@ com_create_search_table(exec_context& ec,
|
|||
|
||||
if (args.empty()) {
|
||||
} else if (args.size() >= 2) {
|
||||
string_fragment regex_frag;
|
||||
std::string regex;
|
||||
|
||||
if (args.size() >= 3) {
|
||||
regex = remaining_args(cmdline, args, 2);
|
||||
regex_frag = remaining_args_frag(cmdline, args, 2);
|
||||
regex = regex_frag.to_string();
|
||||
} else {
|
||||
regex = lnav_data.ld_views[LNV_LOG].get_current_search();
|
||||
}
|
||||
|
@ -2117,7 +2197,19 @@ com_create_search_table(exec_context& ec,
|
|||
= pcrepp::from_str(regex, log_search_table::pattern_options());
|
||||
|
||||
if (re_res.isErr()) {
|
||||
return ec.make_error("{}", re_res.unwrapErr().ce_msg);
|
||||
auto re_err = re_res.unwrapErr();
|
||||
auto um = lnav::console::user_message::error(
|
||||
"invalid regular expression")
|
||||
.with_reason(re_err.ce_msg)
|
||||
.with_snippets(ec.ec_source);
|
||||
if (args.size() >= 3) {
|
||||
um.um_snippets.back()
|
||||
.s_content.append("\n")
|
||||
.append(regex_frag.sf_begin + re_err.ce_offset, ' ')
|
||||
.append("^ "_comment)
|
||||
.append(lnav::roles::comment(re_err.ce_msg));
|
||||
}
|
||||
return Err(um);
|
||||
}
|
||||
|
||||
auto re = re_res.unwrap();
|
||||
|
@ -2305,8 +2397,7 @@ com_open(exec_context& ec, std::string cmdline, std::vector<std::string>& args)
|
|||
std::vector<std::pair<std::string, int>> files_to_front;
|
||||
std::vector<std::string> closed_files;
|
||||
|
||||
for (size_t lpc = 0; lpc < split_args.size(); lpc++) {
|
||||
std::string fn = split_args[lpc];
|
||||
for (auto fn : split_args) {
|
||||
int top = 0;
|
||||
|
||||
if (startswith(fn, "pt:")) {
|
||||
|
@ -2332,14 +2423,14 @@ com_open(exec_context& ec, std::string cmdline, std::vector<std::string>& args)
|
|||
auto lf = *file_iter;
|
||||
|
||||
if (lf->get_filename() == fn) {
|
||||
if (lf->get_format() != NULL) {
|
||||
if (lf->get_format() != nullptr) {
|
||||
retval = "info: log file already loaded";
|
||||
break;
|
||||
} else {
|
||||
files_to_front.emplace_back(fn, top);
|
||||
retval = "";
|
||||
break;
|
||||
}
|
||||
|
||||
files_to_front.emplace_back(fn, top);
|
||||
retval = "";
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (file_iter == lnav_data.ld_active_files.fc_files.end()) {
|
||||
|
@ -2371,8 +2462,15 @@ com_open(exec_context& ec, std::string cmdline, std::vector<std::string>& args)
|
|||
fc.fc_file_names.emplace(fn, logfile_open_options());
|
||||
retval = "info: watching -- " + fn;
|
||||
} else {
|
||||
return ec.make_error(
|
||||
"cannot stat file: {} -- {}", fn, strerror(errno));
|
||||
auto um = lnav::console::user_message::error(
|
||||
attr_line_t("cannot open file: ")
|
||||
.append(lnav::roles::file(fn)))
|
||||
.with_errno_reason()
|
||||
.with_snippets(ec.ec_source)
|
||||
.with_help(
|
||||
"make sure the file exists and is "
|
||||
"accessible");
|
||||
return Err(um);
|
||||
}
|
||||
} else if (is_dev_null(st)) {
|
||||
return ec.make_error("cannot open /dev/null");
|
||||
|
@ -2380,8 +2478,12 @@ com_open(exec_context& ec, std::string cmdline, std::vector<std::string>& args)
|
|||
auto_fd fifo_fd;
|
||||
|
||||
if ((fifo_fd = open(fn.c_str(), O_RDONLY)) == -1) {
|
||||
return ec.make_error(
|
||||
"cannot open FIFO: {} -- {}", fn, strerror(errno));
|
||||
auto um = lnav::console::user_message::error(
|
||||
attr_line_t("cannot open FIFO: ")
|
||||
.append(lnav::roles::file(fn)))
|
||||
.with_errno_reason()
|
||||
.with_snippets(ec.ec_source);
|
||||
return Err(um);
|
||||
} else if (ec.ec_dry_run) {
|
||||
retval = "";
|
||||
} else {
|
||||
|
@ -2406,7 +2508,15 @@ com_open(exec_context& ec, std::string cmdline, std::vector<std::string>& args)
|
|||
lnav_data.ld_pipers.push_back(fifo_piper);
|
||||
}
|
||||
} else if ((abspath = realpath(fn.c_str(), nullptr)) == nullptr) {
|
||||
return ec.make_error("cannot find file -- {}", fn);
|
||||
auto um = lnav::console::user_message::error(
|
||||
attr_line_t("cannot open file: ")
|
||||
.append(lnav::roles::file(fn)))
|
||||
.with_errno_reason()
|
||||
.with_snippets(ec.ec_source)
|
||||
.with_help(
|
||||
"make sure the file exists and is "
|
||||
"accessible");
|
||||
return Err(um);
|
||||
} else if (S_ISDIR(st.st_mode)) {
|
||||
std::string dir_wild(abspath.in());
|
||||
|
||||
|
@ -2417,11 +2527,25 @@ com_open(exec_context& ec, std::string cmdline, std::vector<std::string>& args)
|
|||
logfile_open_options());
|
||||
retval = "info: watching -- " + dir_wild;
|
||||
} else if (!S_ISREG(st.st_mode)) {
|
||||
return ec.make_error("not a regular file or directory -- {}",
|
||||
fn);
|
||||
auto um = lnav::console::user_message::error(
|
||||
attr_line_t("cannot open file: ")
|
||||
.append(lnav::roles::file(fn)))
|
||||
.with_reason("not a regular file or directory")
|
||||
.with_snippets(ec.ec_source)
|
||||
.with_help(
|
||||
"only regular files, directories, and FIFOs "
|
||||
"can be opened");
|
||||
return Err(um);
|
||||
} else if (access(fn.c_str(), R_OK) == -1) {
|
||||
return ec.make_error(
|
||||
"cannot read file {} -- {}", fn, strerror(errno));
|
||||
auto um = lnav::console::user_message::error(
|
||||
attr_line_t("cannot read file: ")
|
||||
.append(lnav::roles::file(fn)))
|
||||
.with_errno_reason()
|
||||
.with_snippets(ec.ec_source)
|
||||
.with_help(
|
||||
"make sure the file exists and is "
|
||||
"accessible");
|
||||
return Err(um);
|
||||
} else {
|
||||
fn = abspath.in();
|
||||
fc.fc_file_names.emplace(fn, logfile_open_options());
|
||||
|
@ -3491,8 +3615,9 @@ com_zoom_to(exec_context& ec,
|
|||
} else if (args.size() > 1) {
|
||||
bool found = false;
|
||||
|
||||
for (int lpc = 0; lnav_zoom_strings[lpc] && !found; lpc++) {
|
||||
if (strcasecmp(args[1].c_str(), lnav_zoom_strings[lpc]) == 0) {
|
||||
for (int lpc = 0; lpc < lnav_zoom_strings.size() && !found; lpc++) {
|
||||
if (strcasecmp(args[1].c_str(), lnav_zoom_strings[lpc].c_str())
|
||||
== 0) {
|
||||
spectrogram_source& ss = lnav_data.ld_spectro_source;
|
||||
struct timeval old_time;
|
||||
|
||||
|
@ -3539,7 +3664,13 @@ com_zoom_to(exec_context& ec,
|
|||
}
|
||||
|
||||
if (!found) {
|
||||
return ec.make_error("invalid zoom level -- {}", args[1]);
|
||||
auto um = lnav::console::user_message::error(
|
||||
attr_line_t("invalid zoom level: ")
|
||||
.append(lnav::roles::symbol(args[1])))
|
||||
.with_snippets(ec.ec_source)
|
||||
.with_help(attr_line_t("available levels: ")
|
||||
.join(lnav_zoom_strings, ", "));
|
||||
return Err(um);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3626,7 +3757,7 @@ com_toggle_field(exec_context& ec,
|
|||
} else if (args.size() < 2) {
|
||||
return ec.make_error("Expecting a log message field name");
|
||||
} else {
|
||||
textview_curses* tc = *lnav_data.ld_view_stack.top();
|
||||
auto* tc = *lnav_data.ld_view_stack.top();
|
||||
|
||||
if (tc != &lnav_data.ld_views[LNV_LOG]) {
|
||||
retval = "error: hiding fields only works in the log view";
|
||||
|
@ -3718,15 +3849,16 @@ com_hide_line(exec_context& ec,
|
|||
sql_strftime(max_time_str, sizeof(max_time_str), max_time);
|
||||
}
|
||||
if (have_min_time && have_max_time) {
|
||||
retval = "info: hiding lines before "
|
||||
+ std::string(min_time_str) + " and after "
|
||||
+ std::string(max_time_str);
|
||||
retval
|
||||
= fmt::format("info: hiding lines before {} and after {}",
|
||||
min_time_str,
|
||||
max_time_str);
|
||||
} else if (have_min_time) {
|
||||
retval
|
||||
= "info: hiding lines before " + std::string(min_time_str);
|
||||
= fmt::format("info: hiding lines before {}", min_time_str);
|
||||
} else if (have_max_time) {
|
||||
retval
|
||||
= "info: hiding lines after " + std::string(max_time_str);
|
||||
= fmt::format("info: hiding lines after {}", max_time_str);
|
||||
} else {
|
||||
retval
|
||||
= "info: no lines hidden by time, pass an absolute or "
|
||||
|
@ -4987,7 +5119,7 @@ readline_context::command_t STD_COMMANDS[] = {
|
|||
help_text(":goto")
|
||||
.with_summary("Go to the given location in the top view")
|
||||
.with_parameter(
|
||||
help_text("line#|N%|date",
|
||||
help_text("line#|N%|timestamp",
|
||||
"A line number, percent into the file, or a timestamp"))
|
||||
.with_examples(
|
||||
{{"To go to line 22", "22"},
|
||||
|
|
|
@ -2265,7 +2265,7 @@ external_log_format::build(std::vector<lnav::console::user_message>& errors)
|
|||
|
||||
if (hd.hd_pattern != nullptr) {
|
||||
pcre* code = pcre_compile(hd.hd_pattern->get_pattern().c_str(),
|
||||
PCRE_CASELESS,
|
||||
PCRE_CASELESS | PCRE_UTF8,
|
||||
&errptr,
|
||||
&eoff,
|
||||
nullptr);
|
||||
|
|
|
@ -178,6 +178,7 @@ log_vtab_impl::get_foreign_keys(std::vector<std::string>& keys_inout) const
|
|||
keys_inout.emplace_back("min(log_line)");
|
||||
keys_inout.emplace_back("log_mark");
|
||||
keys_inout.emplace_back("log_time_msecs");
|
||||
keys_inout.emplace_back("log_top_line()");
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
|
||||
const bookmark_type_t logfile_sub_source::BM_ERRORS("error");
|
||||
const bookmark_type_t logfile_sub_source::BM_WARNINGS("warning");
|
||||
const bookmark_type_t logfile_sub_source::BM_FILES("");
|
||||
const bookmark_type_t logfile_sub_source::BM_FILES("file");
|
||||
|
||||
static int
|
||||
pretty_sql_callback(exec_context& ec, sqlite3_stmt* stmt)
|
||||
|
|
|
@ -40,7 +40,8 @@ xpcre_compile(const char* pattern, int options = 0)
|
|||
pcre* retval;
|
||||
int eoff;
|
||||
|
||||
if ((retval = pcre_compile(pattern, options, &errptr, &eoff, nullptr))
|
||||
if ((retval
|
||||
= pcre_compile(pattern, options | PCRE_UTF8, &errptr, &eoff, nullptr))
|
||||
== nullptr)
|
||||
{
|
||||
fprintf(stderr, "internal error: failed to compile -- %s\n", pattern);
|
||||
|
|
|
@ -179,7 +179,7 @@ textview_curses::reload_config(error_reporter& reporter)
|
|||
int eoff;
|
||||
|
||||
if ((code = pcre_compile(hl_pair.second.hc_regex.c_str(),
|
||||
0,
|
||||
PCRE_CASELESS | PCRE_UTF8,
|
||||
&errptr,
|
||||
&eoff,
|
||||
nullptr))
|
||||
|
@ -570,8 +570,11 @@ textview_curses::execute_search(const std::string& regex_orig)
|
|||
log_debug("start search for: '%s'", regex.c_str());
|
||||
|
||||
if (regex.empty()) {
|
||||
} else if ((code = pcre_compile(
|
||||
regex.c_str(), PCRE_CASELESS, &errptr, &eoff, nullptr))
|
||||
} else if ((code = pcre_compile(regex.c_str(),
|
||||
PCRE_CASELESS | PCRE_UTF8,
|
||||
&errptr,
|
||||
&eoff,
|
||||
nullptr))
|
||||
== nullptr)
|
||||
{
|
||||
auto errmsg = std::string(errptr);
|
||||
|
@ -579,8 +582,11 @@ textview_curses::execute_search(const std::string& regex_orig)
|
|||
regex = pcrepp::quote(regex);
|
||||
|
||||
log_info("invalid search regex, using quoted: %s", regex.c_str());
|
||||
if ((code = pcre_compile(
|
||||
regex.c_str(), PCRE_CASELESS, &errptr, &eoff, nullptr))
|
||||
if ((code = pcre_compile(regex.c_str(),
|
||||
PCRE_CASELESS | PCRE_UTF8,
|
||||
&errptr,
|
||||
&eoff,
|
||||
nullptr))
|
||||
== nullptr)
|
||||
{
|
||||
log_error("Unable to compile quoted regex: %s", regex.c_str());
|
||||
|
|
|
@ -109,7 +109,8 @@ struct from_sqlite<std::pair<std::string, auto_mem<pcre>>> {
|
|||
throw sqlite_func_error("Expecting a non-empty pattern value");
|
||||
}
|
||||
|
||||
code = pcre_compile(pattern, PCRE_CASELESS, &errptr, &eoff, nullptr);
|
||||
code = pcre_compile(
|
||||
pattern, PCRE_CASELESS | PCRE_UTF8, &errptr, &eoff, nullptr);
|
||||
|
||||
if (code == nullptr) {
|
||||
throw sqlite_func_error(
|
||||
|
|
|
@ -362,6 +362,128 @@ EXPECTED_FILES = \
|
|||
$(srcdir)/%reldir%/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.out \
|
||||
$(srcdir)/%reldir%/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.err \
|
||||
$(srcdir)/%reldir%/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_02def66745b063518473df862987747909f56ccc.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_02def66745b063518473df862987747909f56ccc.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_1fb2a7366f0f271643e0ee30d76e03b643ff7dce.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_1fb2a7366f0f271643e0ee30d76e03b643ff7dce.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_28e23f4e98b1acd6478e39844fd9306b444550c3.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_28e23f4e98b1acd6478e39844fd9306b444550c3.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_3f6b92e7948d40b9d2df06112f30ce899bb0d7f5.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_3f6b92e7948d40b9d2df06112f30ce899bb0d7f5.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_5801770f3e0ecc1d62c7a97116d6da1981bbc7bd.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_5801770f3e0ecc1d62c7a97116d6da1981bbc7bd.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_662b5f9b17aa69a8e3aa9a18acb30d9acf6e2837.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_662b5f9b17aa69a8e3aa9a18acb30d9acf6e2837.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_6ad9d0adf85c36363f6b24f49950dcdc13dd34ab.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_6ad9d0adf85c36363f6b24f49950dcdc13dd34ab.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_6edb0c8d5323d1b962d90dd6ecdd7eee9008d7b5.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_6edb0c8d5323d1b962d90dd6ecdd7eee9008d7b5.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_764ea85863d4f0ea3b7cb40850ac7c8fde682d57.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_764ea85863d4f0ea3b7cb40850ac7c8fde682d57.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_81ffd4ed3f62228494a966512791202cea7e3b57.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_81ffd4ed3f62228494a966512791202cea7e3b57.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_87f53d441e22c1d27c27eaa6003c83da1207c063.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_87f53d441e22c1d27c27eaa6003c83da1207c063.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_977cdf5d396522194d6b9e945169ff8073b4296b.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_977cdf5d396522194d6b9e945169ff8073b4296b.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_9a5be90921256e90428c77753eca5ea0d31bd910.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_9a5be90921256e90428c77753eca5ea0d31bd910.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_9ceccab07fbf7130bffe3c201c710719e4a3e9af.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_9ceccab07fbf7130bffe3c201c710719e4a3e9af.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_9e1d05b821822ee40e13fadb24ec558f4bfcff10.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_9e1d05b821822ee40e13fadb24ec558f4bfcff10.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_ade121f29bedea0d1a54452cc994b2302ad9dabb.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_ade121f29bedea0d1a54452cc994b2302ad9dabb.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_b2694e4fbecdd128798af25ee0d069e7e35fb499.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_b2694e4fbecdd128798af25ee0d069e7e35fb499.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_c73dec2706fc0b9a124f5da3a83f40d8d3255beb.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_c73dec2706fc0b9a124f5da3a83f40d8d3255beb.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_e036fabdc6c15f65a374b95c9922212670d494ee.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_e036fabdc6c15f65a374b95c9922212670d494ee.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_ec4623bd63ff353f50db44da1231e46a1a4f1824.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_ec4623bd63ff353f50db44da1231e46a1a4f1824.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_f7476c76ea51cf479a6a79b037e0cb59871b629c.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_f7476c76ea51cf479a6a79b037e0cb59871b629c.out \
|
||||
$(srcdir)/%reldir%/test_sql.sh_f8340cb4c62aabd839ea09235b6ebe41b2bb48f4.err \
|
||||
$(srcdir)/%reldir%/test_sql.sh_f8340cb4c62aabd839ea09235b6ebe41b2bb48f4.out \
|
||||
$(srcdir)/%reldir%/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.err \
|
||||
$(srcdir)/%reldir%/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.out \
|
||||
$(srcdir)/%reldir%/test_sql_anno.sh_0a37c43350ddd7a2d0d75695be32fac083ad04a4.err \
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
[31m✘ error[0m: unrecognized token: "#"
|
||||
[31m✘ error[0m: invalid filter expression: [37m[40m:[0m[37m[40msc_bytes[0m[37m[40m # [0m[37m[40mff[0m
|
||||
[31mreason[0m: unrecognized token: "#"
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m:[0m[1m[36m[40mfilter-expr[0m[37m[40m :[0m[37m[40msc_bytes[0m[37m[40m # [0m[37m[40mff[0m[37m[40m [0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mfilter-expr[0m[4m [0m[4mexpr[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Set the filter expression
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
[31m✘ error[0m: cannot stat file: /non-existent -- No such file or directory
|
||||
[31m✘ error[0m: cannot open file: [1m/non-existent[0m
|
||||
[31mreason[0m: No such file or directory
|
||||
[36m --> [0m[1mcommand-option[0m:2
|
||||
[36m | [0m[37m[40m:[0m[1m[36m[40mopen[0m[37m[40m /non-existent [0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mopen[0m[4m [0m[4mpath[0m[4m1[0m[4m [[0m[4m...[0m[4m [0m[4mpath[0m[4mN[0m[4m][0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Open the given file(s) in lnav. Opening files on machines
|
||||
accessible via SSH can be done using the syntax:
|
||||
[user@]host:/path/to/logs
|
||||
[36m =[0m [36mhelp[0m: make sure the file exists and is accessible
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
[31m✘ error[0m: unknown bookmark type: foobar
|
||||
[36m --> [0m[1mcommand-option[0m:2
|
||||
[36m | [0m[37m[40m:[0m[1m[36m[40mnext-mark[0m[37m[40m foobar [0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mnext-mark[0m[4m [0m[4mtype[0m[4m1[0m[4m [[0m[4m...[0m[4m [0m[4mtype[0m[4mN[0m[4m][0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Move to the next bookmark of the given type in the current view
|
||||
[36m =[0m [36mhelp[0m: available types: error, warning, file, user, user-expr, search, meta
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
[31m✘ error[0m: invalid zoom level -- bad
|
||||
[31m✘ error[0m: invalid zoom level: [1mbad[0m
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m:[0m[1m[36m[40mzoom-to[0m[37m[40m bad [0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mzoom-to[0m[4m [0m[4mzoom-level[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Zoom the histogram view to the given level
|
||||
[36m =[0m [36mhelp[0m: available levels: 1-second, 30-second, 1-minute, 5-minute, 15-minute, 1-hour, 4-hour, 8-hour, 1-day, 1-week
|
||||
|
|
|
@ -1005,12 +1005,12 @@ lnav@googlegroups.com[1] support@lnav.org[2]
|
|||
|
||||
|
||||
|
||||
[4m:[0m[1m[4mgoto[0m[4m [0m[4mline#|N%|date[0m
|
||||
[4m:[0m[1m[4mgoto[0m[4m [0m[4mline#|N%|timestamp[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Go to the given location in the top view
|
||||
[4mParameter[0m
|
||||
[4mline#|N%|date[0m A line number, percent into the
|
||||
file, or a timestamp
|
||||
[4mline#|N%|timestamp[0m A line number, percent
|
||||
into the file, or a timestamp
|
||||
[4mSee Also[0m
|
||||
[1m:next-location[0m, [1m:next-mark[0m, [1m:prev-location[0m, [1m:prev-mark[0m, [1m:relative-goto[0m
|
||||
[4mExamples[0m
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
[31mreason[0m: expecting line number/percentage, timestamp, or relative time
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m:[0m[1m[36m[40mgoto[0m[37m[40m invalid [0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mgoto[0m[4m [0m[4mline#|N%|date[0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mgoto[0m[4m [0m[4mline#|N%|timestamp[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Go to the given location in the top view
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
[31m✘ error[0m: near "lik": syntax error
|
||||
[31m✘ error[0m: invalid mark expression: [37m[40m:[0m[37m[40mlog_procname[0m[37m[40m [0m[37m[40mlik[0m
|
||||
[31mreason[0m: near "lik": syntax error
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m:[0m[1m[36m[40mmark-expr[0m[37m[40m :[0m[37m[40mlog_procname[0m[37m[40m [0m[37m[40mlik[0m[37m[40m [0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mmark-expr[0m[4m [0m[4mexpr[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Set the bookmark expression
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
[31m✘ error[0m: no such table: nonexistent_table
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mselect[0m[37m[40m [0m[1m[37m[40m*[0m[37m[40m [0m[1m[36m[40mfrom[0m[37m[40m [0m[37m[40mnonexistent_table[0m[37m[40m [0m
|
|
@ -0,0 +1,3 @@
|
|||
[31m✘ error[0m: the stop parameter is required
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40m*[0m[37m[40m [0m[1m[36m[40mFROM[0m[37m[40m [0m[1m[37m[40mgenerate_series[0m[37m[40m(1) [0m
|
|
@ -0,0 +1,2 @@
|
|||
[1mlog_line [0m[1mlog_part [0m[1m log_time [0m[1m[7mlog_idle_msecs [0m[1mlog_level [0m[1mlog_mark [0m[1mlog_comment [0m[1mlog_tags [0m[1mlog_filters [0m[1m c_ip [0m[1m[7mcs_bytes [0m[1mcs_method [0m[1mcs_uri_query [0m[1m cs_uri_stem [0m[1mcs_username [0m[1m[7mcs_vars [0m[1mcs_version [0m[1ms_app [0m[1ms_core [0m[1ms_pid [0m[1ms_req [0m[1m[7ms_runtime [0m[1m[7ms_switches [0m[1ms_worker_reqs [0m[1m[7msc_bytes [0m[1m[7msc_header_bytes [0m[1m[7msc_headers [0m[1msc_status [0m
|
||||
[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1m[7mNULL[0m[1m[7m>[0m[1m[7m [0m[1m[7m2016-03-13 22:49:12.000[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1m[7mNULL[0m[1m[7m>[0m[1m[7m [0m[1m[7m <[0m[1m[7mNULL[0m[1m[7m>[0m[1m[7m [0m[1m[7m <[0m[1m[7mNULL[0m[1m[7m>[0m[1m[7m [0m[1m[7m127.0.0.1[0m[1m[7m [0m[1m[7m 696[0m[1m[7m [0m[1m[7mPOST [0m[1m[7m [0m[1m[7m <[0m[1m[7mNULL[0m[1m[7m>[0m[1m[7m [0m[1m[7m/update_metrics[0m[1m[7m [0m[1m[7m [0m[1m[7m [0m[1m[7m [0m[1m[7m 38[0m[1m[7m [0m[1m[7mH[0m[1m[7mTTP/1.1 [0m[1m[7m [0m[1m[7m0 [0m[1m[7m [0m[1m[7m [0m[1m[7m3 [0m[1m[7m [0m[1m[7m88185[0m[1m[7m [0m[1m[7m 1[0m[1m[7m [0m[1m[7m 0.129[0m[1m[7m [0m[1m[7m 1[0m[1m[7m [0m[1m[7m 1[0m[1m[7m [0m[1m[7m 47[0m[1m[7m [0m[1m[7m 378[0m[1m[7m [0m[1m[7m 9[0m[1m[7m [0m[1m[7m [0m[1m[7m [0m[1m 200 [0m
|
|
@ -0,0 +1,3 @@
|
|||
[1mid [0m[1mfirst_name [0m[1mlast_name [0m[1m[7mage [0m
|
||||
[1m[7m [0m[1m0[0m[1m [0m[1mPhil [0m[1m [0m[1mMyman [0m[1m [0m[1m 30 [0m
|
||||
[7m 1[0m[7m [0m[7mLem [0m[7m [0m[7mHewitt [0m[7m [0m[7m 35[0m
|
|
@ -0,0 +1,2 @@
|
|||
[1mlog_msg_instance [0m[1m col_0 [0m
|
||||
[1m 1[0m[1m [0m[1meth0.IPv4 [0m
|
|
@ -0,0 +1,5 @@
|
|||
[31m✘ error[0m: invalid regular expression
|
||||
[31mreason[0m: missing )
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m:[0m[1m[36m[40mcreate-search-table[0m[37m[40m search_test1 bad[0m[1m[32m[40m([0m[37m[40m [0m
|
||||
[36m | [0m[37m[40m [0m[32m[40m^ [0m[32m[40mmissing )[0m
|
|
@ -0,0 +1,6 @@
|
|||
[31m✘ error[0m: no 'log_time' column found or not in ascending order, unable to create spectrogram
|
||||
[36m --> [0m[1mcommand-option[0m:2
|
||||
[36m | [0m[37m[40m:[0m[1m[36m[40mspectrogram[0m[37m[40m sc_bytes [0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mspectrogram[0m[4m [0m[4mfield-name[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Visualize the given message field using a spectrogram
|
|
@ -0,0 +1,3 @@
|
|||
[31m✘ error[0m: Only the top view in the stack can be deleted
|
||||
[36m --> [0m[1mcommand-option[0m:2
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mDELETE[0m[37m[40m [0m[1m[36m[40mFROM[0m[37m[40m [0m[37m[40mlnav_view_stack[0m[37m[40m [0m[1m[36m[40mWHERE[0m[37m[40m [0m[37m[40mname[0m[37m[40m [0m[1m[37m[40m=[0m[37m[40m [0m[37m[40m'log'[0m
|
|
@ -0,0 +1,3 @@
|
|||
[31m✘ error[0m: not authorized
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mattach[0m[37m[40m [0m[1m[36m[40mdatabase[0m[37m[40m [0m[37m[40m'/tmp/memdb'[0m[37m[40m [0m[1m[36m[40mas[0m[37m[40m [0m[37m[40m'db'[0m[37m[40m [0m
|
|
@ -0,0 +1,3 @@
|
|||
[31m✘ error[0m: oops!
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mraise_error[0m[37m[40m([0m[37m[40m'oops!'[0m[37m[40m) [0m
|
|
@ -0,0 +1,3 @@
|
|||
[31m✘ error[0m: not authorized
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mattach[0m[37m[40m [0m[1m[36m[40mdatabase[0m[37m[40m [0m[37m[40m'simple-db.db'[0m[37m[40m [0m[1m[36m[40mas[0m[37m[40m [0m[37m[40m'db'[0m[37m[40m [0m
|
|
@ -0,0 +1,3 @@
|
|||
[1mid [0m[1mfirst_name [0m[1mlast_name [0m[1m[7mage [0m
|
||||
[1m[7m [0m[1m0[0m[1m [0m[1mPhil [0m[1m [0m[1mMyman [0m[1m [0m[1m 30 [0m
|
||||
[7m 1[0m[7m [0m[7mLem [0m[7m [0m[7mHewitt [0m[7m [0m[7m 35[0m
|
|
@ -0,0 +1,2 @@
|
|||
[1m replicate('foobar', 120) [0m
|
||||
foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar⋯oobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar
|
|
@ -0,0 +1,3 @@
|
|||
[31m✘ error[0m: not authorized
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mattach[0m[37m[40m [0m[1m[36m[40mdatabase[0m[37m[40m [0m[37m[40m':memdb:'[0m[37m[40m [0m[1m[36m[40mas[0m[37m[40m [0m[37m[40m'db'[0m[37m[40m [0m
|
|
@ -0,0 +1,3 @@
|
|||
[1mlog_line [0m[1mlog_msg_instance [0m[1m col_0 [0m
|
||||
[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1meth0.IPv4 [0m
|
||||
7 1 eth0.IPv4
|
|
@ -0,0 +1,6 @@
|
|||
[31m✘ error[0m: unknown column -- sc_byes
|
||||
[36m --> [0m[1mcommand-option[0m:2
|
||||
[36m | [0m[37m[40m:[0m[1m[36m[40mspectrogram[0m[37m[40m sc_byes [0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mspectrogram[0m[4m [0m[4mfield-name[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Visualize the given message field using a spectrogram
|
|
@ -0,0 +1,3 @@
|
|||
[31m✘ error[0m: A non-empty name and value must be provided when inserting an environment variable
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mINSERT[0m[37m[40m [0m[1m[36m[40mINTO[0m[37m[40m [0m[1m[37m[40menviron[0m[1m[37m[40m [0m[37m[40m([0m[37m[40mname[0m[37m[40m) [0m[1m[36m[40mVALUES[0m[37m[40m ([0m[1m[36m[40mnull[0m[37m[40m)[0m
|
|
@ -0,0 +1 @@
|
|||
[33m2014-10-08 16:56:38,344:[0m[33mWARN[0m[33m:foo bar baz[0m
|
|
@ -0,0 +1,3 @@
|
|||
[31m✘ error[0m: An environment variable with the name 'SQL_ENV_VALUE' already exists
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mINSERT[0m[37m[40m [0m[1m[36m[40mINTO[0m[37m[40m [0m[1m[37m[40menviron[0m[1m[37m[40m [0m[37m[40m([0m[37m[40mname[0m[37m[40m, [0m[37m[40mvalue[0m[37m[40m) [0m[1m[36m[40mVALUES[0m[37m[40m ([0m[37m[40m"SQL_ENV_VALUE"[0m[37m[40m, [0m[37m[40m"bar"[0m[37m[40m)[0m
|
|
@ -0,0 +1,3 @@
|
|||
[31m✘ error[0m: Environment variable names cannot contain an equals sign (=)
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mINSERT[0m[37m[40m [0m[1m[36m[40mINTO[0m[37m[40m [0m[1m[37m[40menviron[0m[1m[37m[40m [0m[37m[40m([0m[37m[40mname[0m[37m[40m, [0m[37m[40mvalue[0m[37m[40m) [0m[1m[36m[40mVALUES[0m[37m[40m ([0m[37m[40m"foo=bar"[0m[37m[40m, [0m[37m[40m"bar"[0m[37m[40m)[0m
|
|
@ -0,0 +1,2 @@
|
|||
[1mlog_top_line() [0m
|
||||
<NULL>
|
|
@ -0,0 +1,6 @@
|
|||
[31m✘ error[0m: column is not numeric -- c_ip
|
||||
[36m --> [0m[1mcommand-option[0m:2
|
||||
[36m | [0m[37m[40m:[0m[1m[36m[40mspectrogram[0m[37m[40m c_ip [0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mspectrogram[0m[4m [0m[4mfield-name[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Visualize the given message field using a spectrogram
|
|
@ -0,0 +1,6 @@
|
|||
[31m✘ error[0m: no data was redirected to lnav's standard-input
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m|rename-stdin foo [0m
|
||||
[36m --> [0m[1m../test/.lnav/formats/default/rename-stdin.lnav[0m:7
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mraise_error[0m[37m[40m([0m[37m[40m'no data was redirected to lnav''s standard-input'[0m[37m[40m) [0m
|
||||
[36m | [0m[37m[40m [0m[1m[36m[40mWHERE[0m[37m[40m ([0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mcount[0m[37m[40m(1) [0m[1m[36m[40mFROM[0m[37m[40m [0m[37m[40mlnav_file[0m[37m[40m [0m[1m[36m[40mWHERE[0m[37m[40m [0m[37m[40mfilepath[0m[1m[37m[40m=[0m[37m[40m'stdin'[0m[37m[40m) [0m[1m[37m[40m=[0m[37m[40m 0[0m
|
|
@ -0,0 +1,3 @@
|
|||
[31m✘ error[0m: A non-empty name and value must be provided when inserting an environment variable
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mINSERT[0m[37m[40m [0m[1m[36m[40mINTO[0m[37m[40m [0m[1m[37m[40menviron[0m[1m[37m[40m [0m[37m[40m([0m[37m[40mname[0m[37m[40m, [0m[37m[40mvalue[0m[37m[40m) [0m[1m[36m[40mVALUES[0m[37m[40m ([0m[1m[36m[40mnull[0m[37m[40m, [0m[1m[36m[40mnull[0m[37m[40m)[0m
|
|
@ -0,0 +1,2 @@
|
|||
[1mfilepath [0m
|
||||
foo
|
|
@ -0,0 +1 @@
|
|||
[31m10.112.81.15[0m[31m - [0m[31m-[0m[31m [[0m[31m15/Feb/2013:06:00:31 +0000[0m[31m] "-" 400 0 "[0m[31m-[0m[31m" "[0m[31m-[0m[31m"[0m
|
|
@ -0,0 +1,6 @@
|
|||
[31m✘ error[0m: unable to read script file: nonexistent-file -- No such file or directory
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40m.read[0m[37m[40m [0m[37m[40mnonexistent[0m[1m[37m[40m-[0m[37m[40mfile[0m[37m[40m [0m
|
||||
[36m =[0m [36mhelp[0m: [4m;[0m[1m[4m.read[0m[4m [0m[4mpath[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Execute the SQLite statements in the given file
|
|
@ -0,0 +1,6 @@
|
|||
[31m✘ error[0m: unknown search table -- search_test1
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m:[0m[1m[36m[40mdelete-search-table[0m[37m[40m search_test1 [0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mdelete-search-table[0m[4m [0m[4mtable-name[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Create an SQL table based on a regex search
|
|
@ -0,0 +1,2 @@
|
|||
[1msearch [0m
|
||||
warn
|
|
@ -0,0 +1,2 @@
|
|||
[1mlog_top_datetime() [0m
|
||||
<NULL>
|
|
@ -0,0 +1,3 @@
|
|||
[31m✘ error[0m: Expecting a non-empty pattern value
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mINSERT[0m[37m[40m [0m[1m[36m[40mINTO[0m[37m[40m [0m[37m[40mlnav_view_filters[0m[37m[40m [0m[1m[36m[40mVALUES[0m[37m[40m ([0m[37m[40m'log'[0m[37m[40m, 0, 1, [0m[37m[40m'out'[0m[37m[40m, [0m[37m[40m'regex'[0m[37m[40m, [0m[37m[40m''[0m[37m[40m)[0m
|
|
@ -0,0 +1,5 @@
|
|||
[31m✘ error[0m: expecting the new name for stdin as the first argument
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m|rename-stdin [0m
|
||||
[36m --> [0m[1m../test/.lnav/formats/default/rename-stdin.lnav[0m:6
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mraise_error[0m[37m[40m([0m[37m[40m'expecting the new name for stdin as the first argument'[0m[37m[40m) [0m[1m[36m[40mWHERE[0m[37m[40m $1 [0m[1m[36m[40mIS[0m[37m[40m [0m[1m[36m[40mNULL[0m
|
|
@ -0,0 +1,2 @@
|
|||
[31m192.168.202.254[0m[31m - [0m[31m-[0m[31m [[0m[31m20/Jul/2009:22:59:29 +0000[0m[31m] "[0m[31mGET[0m[31m [0m[31m/vmw/vSphere/default/vmkboot.gz[0m[31m [0m[31mHTTP/1.0[0m[31m" 404 46210 "[0m[31m-[0m[31m" "[0m[31mgPXE/0.9.7[0m[31m"[0m
|
||||
192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
|
|
@ -0,0 +1,4 @@
|
|||
192.168.202.254 - - [20/Jul/2009:23:00:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
|
||||
[31m192.168.202.254[0m[31m - [0m[31m-[0m[31m [[0m[31m20/Jul/2009:23:00:29 +0000[0m[31m] "[0m[31mGET[0m[31m [0m[31m/vmw/vSphere/default/vmkboot.gz[0m[31m [0m[31mHTTP/1.0[0m[31m" 404 46210 "[0m[31m-[0m[31m" "[0m[31mgPXE/0.9.7[0m[31m"[0m
|
||||
192.168.202.254 - - [20/Jul/2009:23:00:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
|
||||
[31m10.112.81.15[0m[31m - [0m[31m-[0m[31m [[0m[31m15/Feb/2013:06:01:31 +0000[0m[31m] "-" 400 0 "[0m[31m-[0m[31m" "[0m[31m-[0m[31m"[0m
|
|
@ -0,0 +1,3 @@
|
|||
[31m✘ error[0m: Expecting an lnav view name for column number 0
|
||||
[36m --> [0m[1mcommand-option[0m:1
|
||||
[36m | [0m[37m[40m;[0m[1m[36m[40mINSERT[0m[37m[40m [0m[1m[36m[40mINTO[0m[37m[40m [0m[37m[40mlnav_view_filters[0m[37m[40m [0m[1m[36m[40mVALUES[0m[37m[40m ([0m[37m[40m'bad'[0m[37m[40m, 0, 1, [0m[37m[40m'out'[0m[37m[40m, [0m[37m[40m'regex'[0m[37m[40m, [0m[37m[40m'abc'[0m[37m[40m)[0m
|
|
@ -0,0 +1,4 @@
|
|||
[1m log_time [0m
|
||||
2009-07-20 22:59:26.000
|
||||
2009-07-20 22:59:29.000
|
||||
2009-07-20 22:59:29.000
|
|
@ -0,0 +1,2 @@
|
|||
[31m192.168.202.254[0m[31m - [0m[31m-[0m[31m [[0m[31m20/Jul/2009:22:59:29 +0000[0m[31m] "[0m[31mGET[0m[31m [0m[31m/vmw/vSphere/default/vmkboot.gz[0m[31m [0m[31mHTTP/1.0[0m[31m" 404 46210 "[0m[31m-[0m[31m" "[0m[31mgPXE/0.9.7[0m[31m"[0m
|
||||
192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
|
|
@ -0,0 +1,6 @@
|
|||
[31m✘ error[0m: unknown search table -- search_test1
|
||||
[36m --> [0m[1mcommand-option[0m:2
|
||||
[36m | [0m[37m[40m:[0m[1m[36m[40mdelete-search-table[0m[37m[40m search_test1 [0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mdelete-search-table[0m[4m [0m[4mtable-name[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Create an SQL table based on a regex search
|
|
@ -0,0 +1,2 @@
|
|||
192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
|
||||
192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
|
|
@ -0,0 +1,6 @@
|
|||
[31m✘ error[0m: no 'log_time' column found or not in ascending order, unable to create spectrogram
|
||||
[36m --> [0m[1mcommand-option[0m:2
|
||||
[36m | [0m[37m[40m:[0m[1m[36m[40mspectrogram[0m[37m[40m sc_bytes [0m
|
||||
[36m =[0m [36mhelp[0m: [4m:[0m[1m[4mspectrogram[0m[4m [0m[4mfield-name[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Visualize the given message field using a spectrogram
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue