diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-07 04:48:35 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-07 04:48:35 +0000 |
commit | 207df6fc406e81bfeebdff7f404bd242ff3f099f (patch) | |
tree | a1a796b056909dd0a04ffec163db9363a8757808 /src/log_data_helper.cc | |
parent | Releasing progress-linux version 0.11.2-1~progress7.99u1. (diff) | |
download | lnav-207df6fc406e81bfeebdff7f404bd242ff3f099f.tar.xz lnav-207df6fc406e81bfeebdff7f404bd242ff3f099f.zip |
Merging upstream version 0.12.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/log_data_helper.cc')
-rw-r--r-- | src/log_data_helper.cc | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/src/log_data_helper.cc b/src/log_data_helper.cc index ade077a..2828883 100644 --- a/src/log_data_helper.cc +++ b/src/log_data_helper.cc @@ -41,6 +41,7 @@ log_data_helper::clear() this->ldh_parser.reset(); this->ldh_scanner.reset(); this->ldh_namer.reset(); + this->ldh_extra_json.clear(); this->ldh_json_pairs.clear(); this->ldh_xml_pairs.clear(); this->ldh_line_attrs.clear(); @@ -63,9 +64,11 @@ log_data_helper::parse_line(content_line_t line, bool allow_middle) } this->ldh_line = ll; if (!ll->is_message()) { + log_warning("failed to parse line %d", line); this->ldh_parser.reset(); this->ldh_scanner.reset(); this->ldh_namer.reset(); + this->ldh_extra_json.clear(); this->ldh_json_pairs.clear(); this->ldh_xml_pairs.clear(); this->ldh_line_attrs.clear(); @@ -95,6 +98,7 @@ log_data_helper::parse_line(content_line_t line, bool allow_middle) this->ldh_parser->parse(); this->ldh_namer = std::make_unique<column_namer>(column_namer::language::SQL); + this->ldh_extra_json.clear(); this->ldh_json_pairs.clear(); this->ldh_xml_pairs.clear(); @@ -104,8 +108,28 @@ log_data_helper::parse_line(content_line_t line, bool allow_middle) } for (auto& ldh_line_value : this->ldh_line_values.lvv_values) { + if (ldh_line_value.lv_meta.lvm_name == format->lf_timestamp_field) { + continue; + } + if (ldh_line_value.lv_meta.lvm_column + .is<logline_value_meta::external_column>()) + { + char buf[ldh_line_value.lv_meta.lvm_name.size() + 2]; + + auto rc = fmt::format_to( + buf, FMT_STRING("/{}"), ldh_line_value.lv_meta.lvm_name); + *rc = '\0'; + this->ldh_extra_json[intern_string::lookup(buf, -1)] + = ldh_line_value.to_string(); + continue; + } + switch (ldh_line_value.lv_meta.lvm_kind) { case value_kind_t::VALUE_JSON: { + if (!ldh_line_value.lv_meta.lvm_struct_name.empty()) { + continue; + } + json_ptr_walk jpw; if (jpw.parse(ldh_line_value.text_value(), @@ -200,15 +224,13 @@ log_data_helper::get_line_bounds(size_t& line_index_out, std::string log_data_helper::format_json_getter(const intern_string_t field, int index) { - auto_mem<char, sqlite3_free> qname; - auto_mem<char, sqlite3_free> jget; std::string retval; - qname = sql_quote_ident(field.get()); - jget = sqlite3_mprintf("jget(%s,%Q)", - qname.in(), - this->ldh_json_pairs[field][index].wt_ptr.c_str()); - retval = std::string(jget); + auto qname = sql_quote_ident(field.get()); + retval + = lnav::sql::mprintf("jget(%s,%Q)", + qname.in(), + this->ldh_json_pairs[field][index].wt_ptr.c_str()); return retval; } |