Skip to content

Commit 88b6602

Browse files
committed
[overlay] fix actual time
1 parent 643ac52 commit 88b6602

7 files changed

Lines changed: 48 additions & 14 deletions

File tree

src/field_overlay_source.cc

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -193,27 +193,24 @@ field_overlay_source::build_field_lines(const listview_curses& lv,
193193
time_line.with_attr(
194194
string_attr(time_lr, VC_STYLE.value(text_attrs::with_bold())));
195195

196-
auto time_range = find_string_attr_range(
197-
this->fos_log_helper.ldh_line_attrs, &L_TIMESTAMP);
196+
auto ts_sf = this->fos_log_helper.ldh_line_values.lvv_time_value;
198197

199198
curr_tv = this->fos_log_helper.ldh_line->get_timeval();
200-
if (ll->is_time_skewed() && time_range.lr_end != -1) {
201-
const char* time_src
202-
= this->fos_log_helper.ldh_line_values.lvv_sbr.get_data()
203-
+ time_range.lr_start;
199+
if (ll->is_time_skewed() && ts_sf) {
204200
timeval actual_tv;
205201
date_time_scanner dts;
206202
exttm tm;
207203

208204
dts.set_base_time(format->lf_date_time.dts_base_time,
209205
format->lf_date_time.dts_base_tm.et_tm);
210206
dts.dts_zoned_to_local = format->lf_date_time.dts_zoned_to_local;
211-
if (format->lf_date_time.scan(time_src,
212-
time_range.length(),
207+
if (format->lf_date_time.scan(ts_sf->data(),
208+
ts_sf->length(),
213209
format->get_timestamp_formats(),
214210
&tm,
215211
actual_tv)
216-
|| dts.scan(time_src, time_range.length(), nullptr, &tm, actual_tv))
212+
|| dts.scan(
213+
ts_sf->data(), ts_sf->length(), nullptr, &tm, actual_tv))
217214
{
218215
sql_strftime(
219216
orig_timestamp, sizeof(orig_timestamp), actual_tv, 'T');
@@ -843,8 +840,8 @@ field_overlay_source::build_meta_line(const listview_curses& lv,
843840

844841
al.with_string(" \u2514");
845842
for (const auto& entry : line_meta.bm_tags) {
846-
al.append(1, ' ').append(entry.te_tag,
847-
VC_STYLE.value(vc.attrs_for_ident(entry.te_tag)));
843+
al.append(1, ' ').append(
844+
entry.te_tag, VC_STYLE.value(vc.attrs_for_ident(entry.te_tag)));
848845
}
849846

850847
al.insert(0, filename_width, ' ');

src/formats/cloudflare_log.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
"info": "hit",
1313
"warning": "miss"
1414
},
15+
"duration-field": "OriginResponseDurationMs",
16+
"duration-divisor": 1000,
1517
"line-format": [
1618
{
1719
"field": "ClientIP",
@@ -53,6 +55,7 @@
5355
}
5456
],
5557
"timestamp-field": "EdgeStartTimestamp",
58+
"timestamp-divisor": 1000000000,
5659
"opid": {
5760
"description": {
5861
"std": {

src/lnav.prompt.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ prompt::refresh_sql_expr_completions(textview_curses& tc)
267267
":log_src_file",
268268
":log_src_line",
269269
":log_thread_id",
270+
":log_duration",
270271
};
271272

272273
this->insert_sql_completion("log_line", sql_format_column_t{});

src/log.watch.cc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,17 @@ eval_with(logfile& lf, logfile::iterator ll)
256256
bind_to_sqlite(stmt, lpc + 1, values.lvv_thread_id_value);
257257
continue;
258258
}
259+
if (strcmp(name, ":log_duration") == 0) {
260+
if (values.lvv_duration_value) {
261+
bind_to_sqlite(
262+
stmt,
263+
lpc + 1,
264+
values.lvv_duration_value->count() / 1000000.0);
265+
} else {
266+
sqlite3_bind_null(stmt, lpc + 1);
267+
}
268+
continue;
269+
}
259270
if (strcmp(name, ":log_raw_text") == 0) {
260271
auto res = lf.read_raw_message(ll);
261272

src/log_format.cc

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,8 @@ logline_value_vector::clear()
713713
{
714714
this->lvv_values.clear();
715715
this->lvv_sbr.disown();
716+
this->lvv_time_value = std::nullopt;
717+
this->lvv_time_exttm = std::nullopt;
716718
this->lvv_opid_value = std::nullopt;
717719
this->lvv_opid_provenance = opid_provenance::none;
718720
this->lvv_thread_id_value = std::nullopt;
@@ -723,6 +725,8 @@ logline_value_vector::clear()
723725

724726
logline_value_vector::logline_value_vector(const logline_value_vector& other)
725727
: lvv_sbr(other.lvv_sbr.clone()), lvv_values(other.lvv_values),
728+
lvv_time_value(other.lvv_time_value),
729+
lvv_time_exttm(other.lvv_time_exttm),
726730
lvv_opid_value(other.lvv_opid_value),
727731
lvv_opid_provenance(other.lvv_opid_provenance),
728732
lvv_thread_id_value(
@@ -740,6 +744,8 @@ logline_value_vector::operator=(const logline_value_vector& other)
740744
{
741745
this->lvv_sbr = other.lvv_sbr.clone();
742746
this->lvv_values = other.lvv_values;
747+
this->lvv_time_value = other.lvv_time_value;
748+
this->lvv_time_exttm = other.lvv_time_exttm;
743749
this->lvv_opid_value = other.lvv_opid_value;
744750
this->lvv_opid_provenance = other.lvv_opid_provenance;
745751
this->lvv_thread_id_value
@@ -2407,6 +2413,7 @@ external_log_format::annotate(logfile* lf,
24072413
auto ts_cap = md[pat.p_timestamp_field_index];
24082414
if (ts_cap) {
24092415
sa.emplace_back(to_line_range(ts_cap.value()), L_TIMESTAMP.value());
2416+
values.lvv_time_value = ts_cap;
24102417
}
24112418

24122419
auto opid_cap = md[pat.p_opid_field_index];
@@ -2859,6 +2866,7 @@ rewrite_json_field(yajlpp_parse_context* ypc,
28592866
sql_strftime(
28602867
time_buf, sizeof(time_buf), jlu->jlu_line->get_timeval(), 'T');
28612868
}
2869+
jlu->jlu_format->jlf_line_values.lvv_time_value = frag;
28622870
jlu->jlu_format->jlf_line_values.lvv_values.emplace_back(
28632871
jlu->jlu_format->get_value_meta(field_name,
28642872
value_kind_t::VALUE_TEXT),
@@ -3025,7 +3033,7 @@ external_log_format::get_subline(const log_format_file_state& lffs,
30253033
} else {
30263034
std::vector<logline_value>::iterator lv_iter;
30273035
bool used_values[this->jlf_line_values.lvv_values.size()];
3028-
struct line_range lr;
3036+
line_range lr;
30293037

30303038
memset(used_values, 0, sizeof(used_values));
30313039
for (lv_iter = this->jlf_line_values.lvv_values.begin();
@@ -3034,6 +3042,9 @@ external_log_format::get_subline(const log_format_file_state& lffs,
30343042
{
30353043
lv_iter->lv_meta.lvm_format = this;
30363044
}
3045+
if (!this->jlf_line_values.lvv_time_value) {
3046+
this->jlf_line_values.lvv_time_exttm = jlu.jlu_exttm;
3047+
}
30373048

30383049
if (jlu.jlu_tid_number) {
30393050
char tid_buf[128];

src/log_format_fwd.hh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -712,6 +712,8 @@ struct logline_value_vector {
712712
ArenaAlloc::Alloc<char> lvv_allocator{8 * 1024};
713713
shared_buffer_ref lvv_sbr;
714714
std::vector<logline_value> lvv_values;
715+
std::optional<string_fragment> lvv_time_value;
716+
std::optional<exttm> lvv_time_exttm;
715717
std::optional<std::string> lvv_opid_value;
716718
opid_provenance lvv_opid_provenance{opid_provenance::none};
717719
std::optional<string_fragment> lvv_thread_id_value;

src/logfile_sub_source.cc

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2224,6 +2224,16 @@ logfile_sub_source::eval_sql_filter(sqlite3_stmt* stmt,
22242224
bind_to_sqlite(stmt, lpc + 1, values.lvv_thread_id_value);
22252225
continue;
22262226
}
2227+
if (strcmp(name, ":log_duration") == 0) {
2228+
if (values.lvv_duration_value) {
2229+
bind_to_sqlite(stmt,
2230+
lpc + 1,
2231+
values.lvv_duration_value->count() / 1000000.0);
2232+
} else {
2233+
sqlite3_bind_null(stmt, lpc + 1);
2234+
}
2235+
continue;
2236+
}
22272237
for (const auto& lv : values.lvv_values) {
22282238
if (lv.lv_meta.lvm_name != &name[1]) {
22292239
continue;
@@ -3245,8 +3255,7 @@ logfile_sub_source::clear_bookmark_metadata()
32453255
}
32463256
auto tag_iter = meta.bm_tags.begin();
32473257
while (tag_iter != meta.bm_tags.end()) {
3248-
if (tag_iter->te_source
3249-
== bookmark_metadata::meta_source::user)
3258+
if (tag_iter->te_source == bookmark_metadata::meta_source::user)
32503259
{
32513260
tag_iter = meta.bm_tags.erase(tag_iter);
32523261
} else {

0 commit comments

Comments
 (0)