From 9c183c2c22b68ed6f515be5c48b7bafd16136388 Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Wed, 27 Nov 2024 15:58:06 -0500 Subject: [PATCH] progress: put the progress table in the stats and status files Make the progress information more accessible, without having to enable full debug log and fish it out of the stream with grep. Also increase the progress log level to INFO. Signed-off-by: Zygo Blaxell --- src/bees-context.cc | 18 ++++++++++++++++++ src/bees-hash.cc | 2 ++ src/bees-roots.cc | 24 ++++++++++++++++++------ src/bees.h | 5 +++++ 4 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/bees-context.cc b/src/bees-context.cc index d4c533e..dd46c7c 100644 --- a/src/bees-context.cc +++ b/src/bees-context.cc @@ -98,6 +98,8 @@ BeesContext::dump_status() TaskMaster::print_queue(ofs); #endif + ofs << get_progress(); + ofs.close(); BEESNOTE("renaming status file '" << status_file << "'"); @@ -112,6 +114,20 @@ BeesContext::dump_status() } } +void +BeesContext::set_progress(const string &str) +{ + unique_lock lock(m_progress_mtx); + m_progress_str = str; +} + +string +BeesContext::get_progress() +{ + unique_lock lock(m_progress_mtx); + return m_progress_str; +} + void BeesContext::show_progress() { @@ -159,6 +175,8 @@ BeesContext::show_progress() BEESLOGINFO("\ttid " << t.first << ": " << t.second); } + // No need to log progress here, it is logged when set + lastStats = thisStats; } } diff --git a/src/bees-hash.cc b/src/bees-hash.cc index 0ec092a..60e60e7 100644 --- a/src/bees-hash.cc +++ b/src/bees-hash.cc @@ -356,6 +356,8 @@ BeesHashTable::prefetch_loop() auto avg_rates = thisStats / m_ctx->total_timer().age(); graph_blob << "\t" << avg_rates << "\n"; + graph_blob << m_ctx->get_progress(); + BEESLOGINFO(graph_blob.str()); catch_all([&]() { m_stats_file.write(graph_blob.str()); diff --git a/src/bees-roots.cc b/src/bees-roots.cc index 9d597ed..c2f0e3c 100644 --- a/src/bees-roots.cc +++ b/src/bees-roots.cc @@ -1069,10 +1069,6 @@ BeesScanModeExtent::next_transid(const CrawlMap &crawl_map_unused) }); BEESCOUNT(progress_ok); } - ostringstream oss; - eta.left("PROGRESS: "); - eta.mid(" "); - eta.right(""); eta.insert_row(0, vector { Table::Text("done"), Table::Text(pretty(fs_size)), @@ -1087,8 +1083,24 @@ BeesScanModeExtent::next_transid(const CrawlMap &crawl_map_unused) }); const auto dash_fill = Table::Fill('-'); eta.insert_row(1, vector(eta.cols().size(), dash_fill)); - oss << eta; - BEESLOGDEBUG(oss.str()); + eta.left(""); + eta.mid(" "); + eta.right(""); + + // One for publication through beesstats.txt and $BEESSTATUS + { + ostringstream progress_oss; + progress_oss << eta; + m_ctx->set_progress(progress_oss.str()); + } + + // One for the debug log + { + eta.left("PROGRESS: "); + ostringstream log_oss; + log_oss << eta; + BEESLOGINFO(log_oss.str()); + } } void diff --git a/src/bees.h b/src/bees.h index da68b66..870e2be 100644 --- a/src/bees.h +++ b/src/bees.h @@ -749,6 +749,9 @@ class BeesContext : public enable_shared_from_this { shared_ptr m_progress_thread; shared_ptr m_status_thread; + mutex m_progress_mtx; + string m_progress_str; + void set_root_fd(Fd fd); BeesResolveAddrResult resolve_addr_uncached(BeesAddress addr); @@ -784,6 +787,8 @@ public: void dump_status(); void show_progress(); + void set_progress(const string &str); + string get_progress(); void start(); void stop();