[gantt] add breadcrumb with timestamp

pull/1161/merge
Tim Stack 10 months ago
parent 98699b318c
commit 52017079ff

@ -34,6 +34,7 @@
#include "base/humanize.hh"
#include "base/humanize.time.hh"
#include "base/math_util.hh"
#include "command_executor.hh"
#include "md4cpp.hh"
#include "sql_util.hh"
@ -629,3 +630,51 @@ gantt_source::get_filtered_count_for(size_t filter_index) const
{
return this->gs_filter_hits[filter_index];
}
static std::vector<breadcrumb::possibility>
timestamp_poss()
{
const static std::vector<breadcrumb::possibility> retval = {
breadcrumb::possibility{"-1 day"},
breadcrumb::possibility{"-1h"},
breadcrumb::possibility{"-30m"},
breadcrumb::possibility{"-15m"},
breadcrumb::possibility{"-5m"},
breadcrumb::possibility{"-1m"},
breadcrumb::possibility{"+1m"},
breadcrumb::possibility{"+5m"},
breadcrumb::possibility{"+15m"},
breadcrumb::possibility{"+30m"},
breadcrumb::possibility{"+1h"},
breadcrumb::possibility{"+1 day"},
};
return retval;
}
void
gantt_source::text_crumbs_for_line(int line,
std::vector<breadcrumb::crumb>& crumbs)
{
text_sub_source::text_crumbs_for_line(line, crumbs);
if (line >= this->gs_time_order.size()) {
return;
}
const auto& row = this->gs_time_order[line];
char ts[64];
sql_strftime(ts, sizeof(ts), row.or_value.otr_begin, 'T');
crumbs.emplace_back(
std::string(ts),
timestamp_poss,
[ec = this->gs_exec_context](const auto& ts) {
ec->execute(fmt::format(FMT_STRING(":goto {}"),
ts.template get<std::string>()));
});
crumbs.back().c_expected_input
= breadcrumb::crumb::expected_input_t::anything;
crumbs.back().c_search_placeholder = "(Enter an absolute or relative time)";
}

@ -67,6 +67,9 @@ public:
int get_filtered_count() const override;
int get_filtered_count_for(size_t filter_index) const override;
void text_crumbs_for_line(int line,
std::vector<breadcrumb::crumb>& crumbs) override;
nonstd::optional<vis_line_t> row_for_time(
struct timeval time_bucket) override;
nonstd::optional<struct timeval> time_for_row(vis_line_t row) override;
@ -114,6 +117,7 @@ public:
struct timeval gs_upper_bound {};
size_t gs_filtered_count{0};
std::array<size_t, logfile_filter_state::MAX_FILTERS> gs_filter_hits{};
exec_context* gs_exec_context;
};
class gantt_header_overlay : public list_overlay_source {

@ -2747,6 +2747,7 @@ SELECT tbl_name FROM sqlite_master WHERE sql LIKE 'CREATE VIRTUAL TABLE%'
lnav_data.ld_log_source,
lnav_data.ld_gantt_details_source,
lnav_data.ld_gantt_status_source);
gantt_view_source->gs_exec_context = &lnav_data.ld_exec_context;
auto gantt_header_source
= std::make_shared<gantt_header_overlay>(gantt_view_source);
lnav_data.ld_views[LNV_GANTT]

Loading…
Cancel
Save