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();