work on bars more
This commit is contained in:
@@ -5,7 +5,7 @@ use owo_colors::{OwoColorize, Style};
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
action::{Action, ActionType, BuildStepId, ResultFields, StartFields},
|
action::{Action, ActionType, BuildStepId, ResultFields, StartFields},
|
||||||
download_display::{StyledString, style_bar},
|
download_display::{DOWNLOAD_STYLE, EXTRACT_STYLE, StyledString, style_bar},
|
||||||
estimator::Estimator,
|
estimator::Estimator,
|
||||||
handlers::{Handler, fetch::FetchHandler},
|
handlers::{Handler, fetch::FetchHandler},
|
||||||
multibar::{BarSegment, MultiBar},
|
multibar::{BarSegment, MultiBar},
|
||||||
@@ -50,6 +50,8 @@ impl Handler for CopyPathsHandler {
|
|||||||
pub struct SubstitutionStatusHandler {
|
pub struct SubstitutionStatusHandler {
|
||||||
id: BuildStepId,
|
id: BuildStepId,
|
||||||
progress: ProgressBar,
|
progress: ProgressBar,
|
||||||
|
download_estimator: Estimator,
|
||||||
|
extract_estimator: Estimator,
|
||||||
state_copy: HashMap<BuildStepId, [u64; 2]>,
|
state_copy: HashMap<BuildStepId, [u64; 2]>,
|
||||||
state_transfer: HashMap<BuildStepId, [u64; 2]>,
|
state_transfer: HashMap<BuildStepId, [u64; 2]>,
|
||||||
state_self: [u64; 2],
|
state_self: [u64; 2],
|
||||||
@@ -62,6 +64,8 @@ impl SubstitutionStatusHandler {
|
|||||||
let mut new = Self {
|
let mut new = Self {
|
||||||
id: *id,
|
id: *id,
|
||||||
progress,
|
progress,
|
||||||
|
download_estimator: Estimator::new(Instant::now()),
|
||||||
|
extract_estimator: Estimator::new(Instant::now()),
|
||||||
state_copy: HashMap::new(),
|
state_copy: HashMap::new(),
|
||||||
state_transfer: HashMap::new(),
|
state_transfer: HashMap::new(),
|
||||||
state_self: [0, 0],
|
state_self: [0, 0],
|
||||||
@@ -93,6 +97,7 @@ impl SubstitutionStatusHandler {
|
|||||||
}
|
}
|
||||||
let dl_percent = ((self.get_done() as f64 / self.max_transfer as f64) * 100.0) as u64;
|
let dl_percent = ((self.get_done() as f64 / self.max_transfer as f64) * 100.0) as u64;
|
||||||
let ex_percent = ((self.get_unpacked() as f64 / self.max_copy as f64) * 100.0) as u64;
|
let ex_percent = ((self.get_unpacked() as f64 / self.max_copy as f64) * 100.0) as u64;
|
||||||
|
let expected = ((self.get_running() as f64 / self.get_done() as f64) * 100.0) as u64;
|
||||||
let min = dl_percent.min(ex_percent);
|
let min = dl_percent.min(ex_percent);
|
||||||
let dl = dl_percent.saturating_sub(min);
|
let dl = dl_percent.saturating_sub(min);
|
||||||
let mbar = MultiBar([
|
let mbar = MultiBar([
|
||||||
@@ -100,13 +105,34 @@ impl SubstitutionStatusHandler {
|
|||||||
BarSegment::Dynamic(&DOWNLOAD_CHAR, dl),
|
BarSegment::Dynamic(&DOWNLOAD_CHAR, dl),
|
||||||
BarSegment::Dynamic(" ", 100 - min - dl),
|
BarSegment::Dynamic(" ", 100 - min - dl),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
let work_per_sec = if self.get_done() < self.max_transfer {
|
||||||
|
StyledString::new(
|
||||||
|
Cow::Owned(format!(
|
||||||
|
"{}",
|
||||||
|
HumanBytes(self.download_estimator.steps_per_second(Instant::now()) as u64)
|
||||||
|
)),
|
||||||
|
DOWNLOAD_STYLE,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
StyledString::new(
|
||||||
|
Cow::Owned(format!(
|
||||||
|
"{}",
|
||||||
|
HumanBytes(self.extract_estimator.steps_per_second(Instant::now()) as u64)
|
||||||
|
)),
|
||||||
|
EXTRACT_STYLE,
|
||||||
|
)
|
||||||
|
};
|
||||||
let msg = style_bar(
|
let msg = style_bar(
|
||||||
StyledString::new(Cow::Owned("Downloading".to_string()), Style::new()),
|
StyledString::new(Cow::Owned("Downloading".to_string()), Style::new()),
|
||||||
StyledString::new(
|
StyledString::new(
|
||||||
Cow::Owned(format!("{}/{}", self.state_self[0], self.state_self[1])),
|
Cow::Owned(format!(
|
||||||
|
"{}/{} {}",
|
||||||
|
self.state_self[0], self.state_self[1], expected
|
||||||
|
)),
|
||||||
Style::new().purple(),
|
Style::new().purple(),
|
||||||
),
|
),
|
||||||
StyledString::new(Cow::Owned(format!("awa")), Style::new().yellow()),
|
work_per_sec,
|
||||||
self.get_done() as usize,
|
self.get_done() as usize,
|
||||||
self.get_unpacked() as usize,
|
self.get_unpacked() as usize,
|
||||||
mbar,
|
mbar,
|
||||||
@@ -176,11 +202,16 @@ impl Handler for SubstitutionStatusHandler {
|
|||||||
}
|
}
|
||||||
if let Some(copy) = self.state_copy.get_mut(id) {
|
if let Some(copy) = self.state_copy.get_mut(id) {
|
||||||
*copy = [*done, *expected];
|
*copy = [*done, *expected];
|
||||||
|
self.extract_estimator
|
||||||
|
.record(self.get_unpacked(), Instant::now());
|
||||||
self.draw_bar(state.term_width);
|
self.draw_bar(state.term_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(transfer) = self.state_transfer.get_mut(id) {
|
if let Some(transfer) = self.state_transfer.get_mut(id) {
|
||||||
*transfer = [*done, *expected];
|
*transfer = [*done, *expected];
|
||||||
|
|
||||||
|
self.download_estimator
|
||||||
|
.record(self.get_done(), Instant::now());
|
||||||
self.draw_bar(state.term_width);
|
self.draw_bar(state.term_width);
|
||||||
}
|
}
|
||||||
Ok(true)
|
Ok(true)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ fn main() -> Result<(), color_eyre::Report> {
|
|||||||
|
|
||||||
for line in lines.lines() {
|
for line in lines.lines() {
|
||||||
let line = line.strip_prefix("@nix ").unwrap_or(line);
|
let line = line.strip_prefix("@nix ").unwrap_or(line);
|
||||||
sleep(Duration::from_nanos(500));
|
sleep(Duration::from_millis(1));
|
||||||
let action = action::Action::parse(line)?;
|
let action = action::Action::parse(line)?;
|
||||||
state.handle(&action)?;
|
state.handle(&action)?;
|
||||||
// match action {
|
// match action {
|
||||||
|
|||||||
Reference in New Issue
Block a user