diff options
| author | Dan Engelbrecht <[email protected]> | 2026-03-12 14:31:54 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2026-03-12 14:31:54 +0100 |
| commit | 2036af91a1b98779a7634cb7c9356f055ecdb8ed (patch) | |
| tree | 49651280238463d11ccbed4c4ae18a8eb6b16e83 | |
| parent | fix OidcToken casing (#826) (diff) | |
| download | zen-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.md | 1 | ||||
| -rw-r--r-- | src/zen/progressbar.cpp | 21 |
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); } |