summaryrefslogtreecommitdiffstats
path: root/src/log_data_helper.cc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-07 04:48:35 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-07 04:48:35 +0000
commit207df6fc406e81bfeebdff7f404bd242ff3f099f (patch)
treea1a796b056909dd0a04ffec163db9363a8757808 /src/log_data_helper.cc
parentReleasing progress-linux version 0.11.2-1~progress7.99u1. (diff)
downloadlnav-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.cc36
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;
}