[log_format] don't rely on the opid being in the displayed message itself

Related to #1212
pull/1235/head
Tim Stack 5 months ago
parent 22a5781e88
commit 6736a8db81

@ -93,6 +93,7 @@ all_logs_vtab::extract(logfile* lf,
values.lvv_values.emplace_back(this->alv_msg_meta, std::move(str));
values.lvv_values.emplace_back(this->alv_schema_meta,
dp.dp_schema_id.to_string());
values.lvv_opid_value = std::move(sub_values.lvv_opid_value);
}
bool

@ -40,7 +40,6 @@ string_attr_type<void> SA_PREFORMATTED("preformatted");
string_attr_type<std::string> SA_INVALID("invalid");
string_attr_type<std::string> SA_ERROR("error");
string_attr_type<int64_t> SA_LEVEL("level");
string_attr_type<string_fragment> SA_ORIGIN("origin");
string_attr_type<int64_t> SA_ORIGIN_OFFSET("origin-offset");
string_attr_type<role_t> VC_ROLE("role");

@ -227,7 +227,6 @@ extern string_attr_type<void> SA_PREFORMATTED;
extern string_attr_type<std::string> SA_INVALID;
extern string_attr_type<std::string> SA_ERROR;
extern string_attr_type<int64_t> SA_LEVEL;
extern string_attr_type<string_fragment> SA_ORIGIN;
extern string_attr_type<int64_t> SA_ORIGIN_OFFSET;
extern string_attr_type<role_t> VC_ROLE;

@ -847,14 +847,11 @@ gantt_source::text_selection_changed(textview_curses& tc)
continue;
}
const auto& sa = msg_line.get_attrs();
auto opid_opt = get_string_attr(sa, logline::L_OPID);
if (!opid_opt) {
const auto& lvv = msg_line.get_values();
if (!lvv.lvv_opid_value) {
continue;
}
auto opid_range = opid_opt.value().saw_string_attr->sa_range;
auto opid_sf = msg_line.to_string(opid_range);
auto opid_sf = lvv.lvv_opid_value.value();
if (opid_sf == row.or_name) {
std::vector<attr_line_t> rows_al(1);

@ -644,9 +644,9 @@ handle_paging_key(int ch)
auto& start_line = start_helper.move_to_msg_start();
start_helper.annotate();
struct line_range opid_range = find_string_attr_range(
start_helper.lh_string_attrs, &logline::L_OPID);
if (!opid_range.is_valid()) {
const auto& opid_opt
= start_helper.lh_line_values.lvv_opid_value;
if (!opid_opt) {
alerter::singleton().chime(
"Log message does not contain an opid");
lnav_data.ld_rl_view->set_attr_value(
@ -680,19 +680,10 @@ handle_paging_key(int ch)
continue;
}
next_helper.annotate();
struct line_range opid_next_range
= find_string_attr_range(
next_helper.lh_string_attrs, &logline::L_OPID);
const char* start_opid
= start_helper.lh_line_values.lvv_sbr.get_data_at(
opid_range.lr_start);
const char* next_opid
= next_helper.lh_line_values.lvv_sbr.get_data_at(
opid_next_range.lr_start);
if (opid_range.length() != opid_next_range.length()
|| memcmp(
start_opid, next_opid, opid_range.length())
!= 0)
const auto& next_opid_opt
= next_helper.lh_line_values.lvv_opid_value;
if (next_opid_opt
&& opid_opt.value() != next_opid_opt.value())
{
continue;
}
@ -703,14 +694,12 @@ handle_paging_key(int ch)
lnav_data.ld_rl_view->set_value("");
tc->set_selection(next_helper.lh_current_line);
} else {
const auto opid_str
= start_helper.to_string(opid_range);
lnav_data.ld_rl_view->set_attr_value(
lnav::console::user_message::error(
attr_line_t(
"No more messages found with opid: ")
.append(lnav::roles::symbol(opid_str)))
.append(
lnav::roles::symbol(opid_opt.value())))
.to_attr_line());
alerter::singleton().chime(
"no more messages found with opid");

@ -231,15 +231,11 @@ eval_with(logfile& lf, logfile::iterator ll)
continue;
}
if (strcmp(name, ":log_opid") == 0) {
auto opid_attr_opt = get_string_attr(sa, logline::L_OPID);
if (opid_attr_opt) {
const auto& sar
= opid_attr_opt.value().saw_string_attr->sa_range;
if (values.lvv_opid_value) {
sqlite3_bind_text(stmt,
lpc + 1,
values.lvv_sbr.get_data_at(sar.lr_start),
sar.length(),
values.lvv_opid_value->c_str(),
values.lvv_opid_value->length(),
SQLITE_STATIC);
} else {
sqlite3_bind_null(stmt, lpc + 1);

@ -1134,6 +1134,8 @@ external_log_format::scan(logfile& lf,
}
if (jlu.jlu_opid_frag) {
this->jlf_line_values.lvv_opid_value
= jlu.jlu_opid_frag->to_string();
auto opid_iter = sbc.sbc_opids.los_opid_ranges.find(
jlu.jlu_opid_frag.value());
if (opid_iter == sbc.sbc_opids.los_opid_ranges.end()) {
@ -1177,6 +1179,8 @@ external_log_format::scan(logfile& lf,
auto& otr = opid_iter->second;
this->update_op_description(*this->lf_opid_description_def,
otr.otr_description);
} else {
this->jlf_line_values.lvv_opid_value = nonstd::nullopt;
}
jlu.jlu_sub_line_count += this->jlf_line_format_init_count;
@ -1645,6 +1649,7 @@ external_log_format::annotate(uint64_t line_number,
if (opid_cap && !opid_cap->empty()) {
sa.emplace_back(to_line_range(opid_cap.value()),
logline::L_OPID.value());
values.lvv_opid_value = opid_cap->to_string();
}
}
@ -1902,6 +1907,10 @@ rewrite_json_field(yajlpp_parse_context* ypc,
json_log_userdata* jlu = (json_log_userdata*) ypc->ypc_userdata;
const intern_string_t field_name = ypc->get_path();
if (jlu->jlu_format->elf_opid_field == field_name) {
auto frag = string_fragment::from_bytes(str, len);
jlu->jlu_format->jlf_line_values.lvv_opid_value = frag.to_string();
}
if (jlu->jlu_format->lf_timestamp_field == field_name) {
char time_buf[64];
@ -2070,13 +2079,16 @@ external_log_format::get_subline(const logline& ll,
struct line_range lr;
memset(used_values, 0, sizeof(used_values));
for (lv_iter = this->jlf_line_values.lvv_values.begin();
lv_iter != this->jlf_line_values.lvv_values.end();
++lv_iter)
{
lv_iter->lv_meta.lvm_format = this;
}
if (jlu.jlu_opid_frag) {
this->jlf_line_values.lvv_opid_value
= jlu.jlu_opid_frag->to_string();
}
int sub_offset = 1 + this->jlf_line_format_init_count;
for (const auto& jfe : this->jlf_line_format) {

@ -272,10 +272,12 @@ struct logline_value_vector {
{
this->lvv_values.clear();
this->lvv_sbr.disown();
this->lvv_opid_value = nonstd::nullopt;
}
shared_buffer_ref lvv_sbr;
std::vector<logline_value> lvv_values;
nonstd::optional<std::string> lvv_opid_value;
};
struct logline_value_stats {

@ -842,16 +842,9 @@ vt_column(sqlite3_vtab_cursor* cur, sqlite3_context* ctx, int col)
vt->vi->extract(lf, line_number, vc->line_values);
}
auto opid_opt = get_string_attr(vt->vi->vi_attrs,
logline::L_OPID);
if (opid_opt) {
auto opid_range
= opid_opt.value().saw_string_attr->sa_range;
to_sqlite(
ctx,
vc->line_values.lvv_sbr.to_string_fragment(
opid_range.lr_start, opid_range.length()));
if (vc->line_values.lvv_opid_value) {
to_sqlite(ctx,
vc->line_values.lvv_opid_value.value());
} else {
sqlite3_result_null(ctx);
}

@ -1735,14 +1735,11 @@ logfile_sub_source::eval_sql_filter(sqlite3_stmt* stmt,
}
if (strcmp(name, ":log_opid") == 0) {
auto opid_attr_opt = get_string_attr(sa, logline::L_OPID);
if (opid_attr_opt) {
const auto& sar
= opid_attr_opt.value().saw_string_attr->sa_range;
if (values.lvv_opid_value) {
sqlite3_bind_text(stmt,
lpc + 1,
sbr.get_data_at(sar.lr_start),
sar.length(),
values.lvv_opid_value->c_str(),
values.lvv_opid_value->length(),
SQLITE_STATIC);
} else {
sqlite3_bind_null(stmt, lpc + 1);

Loading…
Cancel
Save