aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2026-03-12 14:31:54 +0100
committerGitHub Enterprise <[email protected]>2026-03-12 14:31:54 +0100
commit2036af91a1b98779a7634cb7c9356f055ecdb8ed (patch)
tree49651280238463d11ccbed4c4ae18a8eb6b16e83
parentfix OidcToken casing (#826) (diff)
downloadzen-2036af91a1b98779a7634cb7c9356f055ecdb8ed.tar.xz
zen-2036af91a1b98779a7634cb7c9356f055ecdb8ed.zip
show ETA in plain and log output style (#829)
* show ETA in plain and log output style
-rw-r--r--CHANGELOG.md1
-rw-r--r--src/zen/progressbar.cpp21
2 files changed, 12 insertions, 10 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9824b2b51..f40f32c5f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -35,6 +35,7 @@
default will be WARN no matter what you pass on the command line.
- Improvement: Output more information about auth options for `zen` command
- Improvement: Better progress reporting during oplog import
+- Improvement: ETA estimate is now shown during oplog and builds operations when using `--plain-progress` and `--log-progress`
- Bugfix: `--plain-progress` style progress bar should now show elapsed time correctly
- Bugfix: Time spent indexing local and remote state during `zen builds download` now show the correct time
- Bugfix: ObjectStore failed to correctly parse urls with sub folder paths causing 404 to be returned
diff --git a/src/zen/progressbar.cpp b/src/zen/progressbar.cpp
index 961375c0b..6581cd116 100644
--- a/src/zen/progressbar.cpp
+++ b/src/zen/progressbar.cpp
@@ -193,10 +193,17 @@ ProgressBar::UpdateState(const State& NewState, bool DoLinebreak)
const size_t PercentDone =
NewState.TotalCount > 0u ? gsl::narrow<uint8_t>((100 * (NewState.TotalCount - NewState.RemainingCount)) / NewState.TotalCount) : 0u;
+ uint64_t Completed = NewState.TotalCount - NewState.RemainingCount;
+ uint64_t ETAElapsedMS = ElapsedTimeMS - m_PausedMS;
+ uint64_t ETAMS = ((m_State.TotalCount == NewState.TotalCount) && (NewState.Status == State::EStatus::Running)) && (PercentDone > 5)
+ ? (ETAElapsedMS * NewState.RemainingCount) / Completed
+ : 0;
+ const std::string ETAString = (ETAMS > 0) ? fmt::format(" ETA {}", NiceTimeSpanMs(ETAMS)) : "";
+
if (m_Mode == Mode::Plain)
{
const std::string Details = (!NewState.Details.empty()) ? fmt::format(": {}", NewState.Details) : "";
- const std::string Output = fmt::format("{} {}% ({}){}\n", Task, PercentDone, NiceTimeSpanMs(ElapsedTimeMS), Details);
+ const std::string Output = fmt::format("{} {}% {}{}{}\n", Task, PercentDone, NiceTimeSpanMs(ElapsedTimeMS), ETAString, Details);
OutputToConsoleRaw(Output);
m_State = NewState;
}
@@ -204,12 +211,7 @@ ProgressBar::UpdateState(const State& NewState, bool DoLinebreak)
{
size_t ProgressBarSize = 20;
- size_t ProgressBarCount = (ProgressBarSize * PercentDone) / 100;
- uint64_t Completed = NewState.TotalCount - NewState.RemainingCount;
- uint64_t ETAElapsedMS = ElapsedTimeMS -= m_PausedMS;
- uint64_t ETAMS = ((m_State.TotalCount == NewState.TotalCount) && (NewState.Status == State::EStatus::Running)) && (PercentDone > 5)
- ? (ETAElapsedMS * NewState.RemainingCount) / Completed
- : 0;
+ size_t ProgressBarCount = (ProgressBarSize * PercentDone) / 100;
uint32_t ConsoleColumns = TuiConsoleColumns(1024);
@@ -220,8 +222,6 @@ ProgressBar::UpdateState(const State& NewState, bool DoLinebreak)
const std::string ElapsedString = fmt::format(": {}", NiceTimeSpanMs(ElapsedTimeMS));
- const std::string ETAString = (ETAMS > 0) ? fmt::format(" ETA {}", NiceTimeSpanMs(ETAMS)) : "";
-
const std::string DetailsString = (!NewState.Details.empty()) ? fmt::format(". {}", NewState.Details) : "";
ExtendableStringBuilder<256> OutputBuilder;
@@ -299,7 +299,8 @@ ProgressBar::UpdateState(const State& NewState, bool DoLinebreak)
Char = '\'';
}
}
- const std::string Message = fmt::format("@progress \"{} ({}){}\"\n", NewState.Task, NiceTimeSpanMs(ElapsedTimeMS), Details);
+ const std::string Message =
+ fmt::format("@progress \"{} {}{}{}\"\n", NewState.Task, NiceTimeSpanMs(ElapsedTimeMS), ETAString, Details);
OutputToConsoleRaw(Message);
}