diff --git a/src/api2/node/tasks.rs b/src/api2/node/tasks.rs index 77472a0b..ffdfec81 100644 --- a/src/api2/node/tasks.rs +++ b/src/api2/node/tasks.rs @@ -323,21 +323,9 @@ pub fn list_tasks( let mut count = 0; - for info in list.iter() { + for info in list { if !list_all && info.upid.username != username { continue; } - let mut entry = TaskListItem { - upid: info.upid_str.clone(), - node: "localhost".to_string(), - pid: info.upid.pid as i64, - pstart: info.upid.pstart, - starttime: info.upid.starttime, - worker_type: info.upid.worker_type.clone(), - worker_id: info.upid.worker_id.clone(), - user: info.upid.username.clone(), - endtime: None, - status: None, - }; if let Some(username) = userfilter { if !info.upid.username.contains(username) { continue; } @@ -367,9 +355,6 @@ pub fn list_tasks( if errors && state.1 == "OK" { continue; } - - entry.endtime = Some(state.0); - entry.status = Some(state.1.clone()); } if (count as u64) < start { @@ -379,12 +364,12 @@ pub fn list_tasks( count += 1; } - if (result.len() as u64) < limit { result.push(entry); }; + if (result.len() as u64) < limit { result.push(info.into()); }; } rpcenv["total"] = Value::from(count); - Ok(result) + Ok(result.into()) } #[sortable] diff --git a/src/api2/types.rs b/src/api2/types.rs index bcf95e87..3f620db8 100644 --- a/src/api2/types.rs +++ b/src/api2/types.rs @@ -599,6 +599,27 @@ pub struct TaskListItem { pub status: Option, } +impl From for TaskListItem { + fn from(info: crate::server::TaskListInfo) -> Self { + let (endtime, status) = info + .state + .map_or_else(|| (None, None), |(a,b)| (Some(a), Some(b))); + + TaskListItem { + upid: info.upid_str, + node: "localhost".to_string(), + pid: info.upid.pid as i64, + pstart: info.upid.pstart, + starttime: info.upid.starttime, + worker_type: info.upid.worker_type, + worker_id: info.upid.worker_id, + user: info.upid.username, + endtime, + status, + } + } +} + #[api()] #[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "lowercase")]