pub struct TaskMetrics {
pub pending: usize,
pub running: usize,
pub completed: usize,
pub failed: usize,
pub cancelled: usize,
pub total: usize,
}Fields§
§pending: usize§running: usize§completed: usize§failed: usize§cancelled: usize§total: usizeImplementations§
Source§impl TaskMetrics
impl TaskMetrics
Sourcepub fn success_rate(&self) -> f64
pub fn success_rate(&self) -> f64
Examples found in repository?
examples/custom_handler.rs (line 288)
169async fn main() -> Result<(), Box<dyn std::error::Error>> {
170 init();
171
172 let config = TaskFlowConfig::with_in_memory();
173 let taskflow = TaskFlow::new(config).await?;
174
175 taskflow.register_handler(Arc::new(MathTaskHandler)).await;
176 taskflow
177 .register_handler(Arc::new(DataProcessingHandler))
178 .await;
179
180 println!("TaskFlow with custom handlers started!");
181
182 let add_task = TaskDefinition::new("addition", "math_operation")
183 .with_payload("operation", serde_json::Value::String("add".to_string()))
184 .with_payload("a", serde_json::Value::Number(serde_json::Number::from(10)))
185 .with_payload("b", serde_json::Value::Number(serde_json::Number::from(5)));
186
187 let add_task_id = taskflow.submit_task(add_task).await?;
188 println!("Submitted addition task: {}", add_task_id);
189
190 let multiply_task = TaskDefinition::new("multiplication", "math_operation")
191 .with_payload(
192 "operation",
193 serde_json::Value::String("multiply".to_string()),
194 )
195 .with_payload("a", serde_json::Value::Number(serde_json::Number::from(7)))
196 .with_payload("b", serde_json::Value::Number(serde_json::Number::from(3)));
197
198 let multiply_task_id = taskflow.submit_task(multiply_task).await?;
199 println!("Submitted multiplication task: {}", multiply_task_id);
200
201 let data_array = vec![
202 serde_json::Value::Number(serde_json::Number::from(1)),
203 serde_json::Value::Number(serde_json::Number::from(2)),
204 serde_json::Value::Number(serde_json::Number::from(3)),
205 serde_json::Value::Number(serde_json::Number::from(4)),
206 serde_json::Value::Number(serde_json::Number::from(5)),
207 ];
208
209 let sum_task = TaskDefinition::new("sum_data", "data_processing")
210 .with_payload("operation", serde_json::Value::String("sum".to_string()))
211 .with_payload("data", serde_json::Value::Array(data_array.clone()));
212
213 let sum_task_id = taskflow.submit_task(sum_task).await?;
214 println!("Submitted sum task: {}", sum_task_id);
215
216 let avg_task = TaskDefinition::new("average_data", "data_processing")
217 .with_payload(
218 "operation",
219 serde_json::Value::String("average".to_string()),
220 )
221 .with_payload("data", serde_json::Value::Array(data_array))
222 .with_dependencies(vec![sum_task_id.clone()]);
223
224 let avg_task_id = taskflow.submit_task(avg_task).await?;
225 println!("Submitted average task (depends on sum): {}", avg_task_id);
226
227 let taskflow_clone = std::sync::Arc::new(taskflow);
228 let taskflow_for_execution = taskflow_clone.clone();
229
230 let execution_handle = tokio::spawn(async move {
231 if let Err(e) = taskflow_for_execution.start().await {
232 eprintln!("TaskFlow execution failed: {}", e);
233 }
234 });
235
236 tokio::time::sleep(std::time::Duration::from_secs(1)).await;
237
238 loop {
239 let metrics = taskflow_clone.get_task_metrics().await?;
240 println!(
241 "Task metrics: pending={}, running={}, completed={}, failed={}",
242 metrics.pending, metrics.running, metrics.completed, metrics.failed
243 );
244
245 if metrics.pending == 0 && metrics.running == 0 {
246 break;
247 }
248
249 tokio::time::sleep(std::time::Duration::from_secs(1)).await;
250 }
251
252 println!("\nAll tasks completed! Results:");
253
254 let tasks = taskflow_clone.list_tasks(None).await?;
255 for task in tasks {
256 println!(
257 "\nTask: {} ({})",
258 task.definition.name, task.definition.task_type
259 );
260 println!(" Status: {:?}", task.status);
261 if let Some(result) = &task.result {
262 if result.success {
263 println!(
264 " Result: {}",
265 result.output.as_ref().unwrap_or(&"No output".to_string())
266 );
267 println!(" Execution time: {}ms", result.execution_time_ms);
268 if !result.metadata.is_empty() {
269 println!(" Metadata: {:?}", result.metadata);
270 }
271 } else {
272 println!(
273 " Error: {}",
274 result
275 .error
276 .as_ref()
277 .unwrap_or(&"Unknown error".to_string())
278 );
279 }
280 }
281 }
282
283 let final_metrics = taskflow_clone.get_task_metrics().await?;
284 println!("\nFinal metrics:");
285 println!(" Total tasks: {}", final_metrics.total);
286 println!(
287 " Success rate: {:.1}%",
288 final_metrics.success_rate() * 100.0
289 );
290
291 taskflow_clone.shutdown().await?;
292 execution_handle.abort();
293
294 Ok(())
295}Trait Implementations§
Source§impl Clone for TaskMetrics
impl Clone for TaskMetrics
Source§fn clone(&self) -> TaskMetrics
fn clone(&self) -> TaskMetrics
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for TaskMetrics
impl RefUnwindSafe for TaskMetrics
impl Send for TaskMetrics
impl Sync for TaskMetrics
impl Unpin for TaskMetrics
impl UnwindSafe for TaskMetrics
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more