src/api2/node/tasks.rs: new filter "store" to filter tasks for one store

This commit is contained in:
Dietmar Maurer 2019-12-11 12:53:34 +01:00
parent d3dbe52f37
commit 567d3e00fb
2 changed files with 27 additions and 1 deletions

View File

@ -126,6 +126,8 @@ fn list_tasks(
let errors = param["errors"].as_bool().unwrap_or(false);
let running = param["running"].as_bool().unwrap_or(false);
let store = param["store"].as_str();
let userfilter = param["userfilter"].as_str();
let list = server::read_task_list()?;
@ -150,6 +152,23 @@ fn list_tasks(
if !info.upid.username.contains(username) { continue; }
}
if let Some(store) = store {
// Note: useful to select all tasks spawned by proxmox-backup-client
let worker_id = match &info.upid.worker_id {
Some(w) => w,
None => continue, // skip
};
if info.upid.worker_type == "backup" || info.upid.worker_type == "restore" {
let prefix = format!("{}_", store);
if !worker_id.starts_with(&prefix) { continue; }
} else if info.upid.worker_type == "prune" || info.upid.worker_type == "garbage_collection" {
if worker_id != store { continue; }
} else {
continue; // skip
}
}
if let Some(ref state) = info.state {
if running { continue; }
if errors && state.1 == "OK" {
@ -261,6 +280,7 @@ pub const ROUTER: Router = Router::new()
.default(50)
.schema()
),
("store", true, &StringSchema::new("Only lists tasks for datastore name.").schema()),
("running", true, &BooleanSchema::new("Only list running tasks.").schema()),
("errors", true, &BooleanSchema::new("Only list erroneous tasks.").schema()),
("userfilter", true, &StringSchema::new("Only list tasks from this user.").schema()),

View File

@ -1980,7 +1980,13 @@ fn task_list(param: Value) -> Result<Value, Error> {
let limit = param["limit"].as_u64().unwrap_or(50) as usize;
let args = json!({ "running": true, "start": 0, "limit": limit, "userfilter": repo.user()});
let args = json!({
"running": true,
"start": 0,
"limit": limit,
"userfilter": repo.user(),
"store": repo.store(),
});
let result = client.get("api2/json/nodes/localhost/tasks", Some(args)).await?;
let data = &result["data"];