pub struct Task { /* private fields */ }
Expand description
A task is a specific tracked operation. It has:
- A Name
- A unique ID
- A creation time
- The current progress of the task (in “elements”), the ‘counter’.
- An (optional) maximum number of elements.
- A time the task was “started”
- The estimated amount of time the task has remaining
- A time the task has “ended”
- A list of any “Child Tasks” that this task can spawn.
Implementations§
Source§impl Task
impl Task
Sourcepub fn new(id: u64, name: String, max_elements: u64) -> Task
pub fn new(id: u64, name: String, max_elements: u64) -> Task
Creates a new finite, named task with the specified ID.
Examples found in repository?
8pub fn main() -> Result<(), std::io::Error> {
9 let elements = 1000;
10
11 let prog = ConsoleProgressPrinter::new_update_rate(Duration::from_millis(100));
12 let task = Task::new(0, "Test Task".to_string(), u64::MAX);
13 prog.track_task_progress(&task);
14 task.mark_started();
15 for i in 0..elements {
16 task.mark_one_completed();
17
18 let status = format!("Phase {}", i / 100);
19 task.set_current_status(Some(status));
20
21 std::thread::sleep(std::time::Duration::from_millis(5));
22 }
23
24 Ok(())
25}
Sourcepub fn new_infinite(id: u64, name: String) -> Task
pub fn new_infinite(id: u64, name: String) -> Task
Creates a new infinite, named task with a specific ID.
Sourcepub fn new_infinite_named(name: String) -> Task
pub fn new_infinite_named(name: String) -> Task
Creates a new infinite, named task with a random ID
Examples found in repository?
15pub fn main() -> Result<(), Error> {
16 let mut rand = Random::default();
17
18 let cons = ConsoleProgressPrinter::new_update_rate(Duration::from_millis(100));
19 let task = Task::new_infinite_named("Writer".to_string());
20 cons.track_task_progress(&task);
21 task.mark_started();
22
23 let out = OpenOptions::new()
24 .write(true)
25 .truncate(true)
26 .create(true)
27 .open("test")?;
28 let out = BufWriter::new(out);
29 let mut out = WriterTask::new(out, task);
30
31 let gb = 1_000_000_000 / 8;
32 for _i in 0..gb {
33 out.write_be_u64(rand.next_u64())?;
34 }
35
36 Ok(())
37}
Sourcepub fn new_named(name: String, max_elements: u64) -> Task
pub fn new_named(name: String, max_elements: u64) -> Task
Creates a new finite, named task with a random ID.
Sourcepub fn current_progress_count(&self) -> u64
pub fn current_progress_count(&self) -> u64
Returns the number of elements completed in the range 0..=max_elements
Sourcepub fn set_current_progress_count(&self, current_progress: u64)
pub fn set_current_progress_count(&self, current_progress: u64)
Updates the current progress counter to be the specified value
Sourcepub fn max_elements(&self) -> u64
pub fn max_elements(&self) -> u64
Returns the maximum number of elements of this task
pub fn set_max_elements(&self, max_elements: u64)
Sourcepub fn current_progress_frac(&self) -> f64
pub fn current_progress_frac(&self) -> f64
Returns the current progress as a fraction in the range 0..=1
Sourcepub fn get_created(&self) -> UnixTimestamp
pub fn get_created(&self) -> UnixTimestamp
Returns the time this task was created
Sourcepub fn get_started(&self) -> Option<&UnixTimestamp>
pub fn get_started(&self) -> Option<&UnixTimestamp>
Returns the time at which this task started, or None
if the task hasn’t started yet.
Sourcepub fn mark_one_completed(&self)
pub fn mark_one_completed(&self)
Increments the ‘completed’ counter.
Examples found in repository?
8pub fn main() -> Result<(), std::io::Error> {
9 let elements = 1000;
10
11 let prog = ConsoleProgressPrinter::new_update_rate(Duration::from_millis(100));
12 let task = Task::new(0, "Test Task".to_string(), u64::MAX);
13 prog.track_task_progress(&task);
14 task.mark_started();
15 for i in 0..elements {
16 task.mark_one_completed();
17
18 let status = format!("Phase {}", i / 100);
19 task.set_current_status(Some(status));
20
21 std::thread::sleep(std::time::Duration::from_millis(5));
22 }
23
24 Ok(())
25}
Sourcepub fn mark_all_completed(&self)
pub fn mark_all_completed(&self)
Mark this task complete. Does not affect sub-tasks.
Sourcepub fn mark_some_completed(&self, completed: u64)
pub fn mark_some_completed(&self, completed: u64)
Mark some some portion of this task as completed.
pub fn get_remaining_time(&self) -> Duration
Sourcepub fn mark_started(&self)
pub fn mark_started(&self)
Marks this task as started. If the task has already started, does nothing.
Examples found in repository?
8pub fn main() -> Result<(), std::io::Error> {
9 let elements = 1000;
10
11 let prog = ConsoleProgressPrinter::new_update_rate(Duration::from_millis(100));
12 let task = Task::new(0, "Test Task".to_string(), u64::MAX);
13 prog.track_task_progress(&task);
14 task.mark_started();
15 for i in 0..elements {
16 task.mark_one_completed();
17
18 let status = format!("Phase {}", i / 100);
19 task.set_current_status(Some(status));
20
21 std::thread::sleep(std::time::Duration::from_millis(5));
22 }
23
24 Ok(())
25}
More examples
15pub fn main() -> Result<(), Error> {
16 let mut rand = Random::default();
17
18 let cons = ConsoleProgressPrinter::new_update_rate(Duration::from_millis(100));
19 let task = Task::new_infinite_named("Writer".to_string());
20 cons.track_task_progress(&task);
21 task.mark_started();
22
23 let out = OpenOptions::new()
24 .write(true)
25 .truncate(true)
26 .create(true)
27 .open("test")?;
28 let out = BufWriter::new(out);
29 let mut out = WriterTask::new(out, task);
30
31 let gb = 1_000_000_000 / 8;
32 for _i in 0..gb {
33 out.write_be_u64(rand.next_u64())?;
34 }
35
36 Ok(())
37}
Sourcepub fn get_ended(&self) -> Option<&UnixTimestamp>
pub fn get_ended(&self) -> Option<&UnixTimestamp>
Returns the time at which this task ended, or None if the task hasn’t ended yet.
Sourcepub fn mark_ended(&self)
pub fn mark_ended(&self)
Marks this task as ended. If this task has already ended, does nothing.
Sourcepub fn num_children(&self) -> usize
pub fn num_children(&self) -> usize
Returns the number of child tasks this task has
Sourcepub fn each_child<F: FnMut(&Task)>(&self, func: F)
pub fn each_child<F: FnMut(&Task)>(&self, func: F)
Iterates over each child task, providing a reference of the child task to the input function
pub fn clean_completed_children(&self) -> Vec<Task>
Sourcepub fn new_child_task(&self, id: u64, name: String, max_elements: u64) -> Task
pub fn new_child_task(&self, id: u64, name: String, max_elements: u64) -> Task
Creates a new child task of this task
Sourcepub fn push_new_child_task(&self, task: Task)
pub fn push_new_child_task(&self, task: Task)
Appends this task as a tracked child task.
Sourcepub fn is_complete(&self) -> bool
pub fn is_complete(&self) -> bool
Returns true if this task is complete.
Sourcepub fn cancel(&self)
pub fn cancel(&self)
Marks this task as “Cancelled”. Users of this task may opt to ignore this flag, it’s really more like a suggestion.
Sourcepub fn is_cancelled(&self) -> bool
pub fn is_cancelled(&self) -> bool
Returns true if this task has been marked ‘cancelled’. Cancelling a task is a one-way operation.
Sourcepub fn current_status(&self) -> Option<Arc<String>>
pub fn current_status(&self) -> Option<Arc<String>>
Gets a copy of the current status
Sourcepub fn set_current_status<T: AsRef<str>>(&self, status: Option<T>)
pub fn set_current_status<T: AsRef<str>>(&self, status: Option<T>)
Sets the optional current status of this task
Examples found in repository?
8pub fn main() -> Result<(), std::io::Error> {
9 let elements = 1000;
10
11 let prog = ConsoleProgressPrinter::new_update_rate(Duration::from_millis(100));
12 let task = Task::new(0, "Test Task".to_string(), u64::MAX);
13 prog.track_task_progress(&task);
14 task.mark_started();
15 for i in 0..elements {
16 task.mark_one_completed();
17
18 let status = format!("Phase {}", i / 100);
19 task.set_current_status(Some(status));
20
21 std::thread::sleep(std::time::Duration::from_millis(5));
22 }
23
24 Ok(())
25}