2 use serde_json
::{json, Value}
;
4 use proxmox
::api
::{api, cli::*}
;
6 use pbs_tools
::percent_encoding
::percent_encode_component
;
7 use pbs_client
::display_task_log
;
9 use proxmox_backup
::tools
;
11 use proxmox_backup
::api2
::types
::UPID_SCHEMA
;
15 extract_repository_from_value
,
24 schema
: REPO_URL_SCHEMA
,
28 description
: "The maximal number of tasks to list.",
36 schema
: OUTPUT_FORMAT
,
41 description
: "Also list stopped tasks.",
47 /// List running server tasks for this repo user
48 async
fn task_list(param
: Value
) -> Result
<Value
, Error
> {
50 let output_format
= get_output_format(¶m
);
52 let repo
= extract_repository_from_value(¶m
)?
;
53 let client
= connect(&repo
)?
;
55 let limit
= param
["limit"].as_u64().unwrap_or(50) as usize;
56 let running
= !param
["all"].as_bool().unwrap_or(false);
62 "userfilter": repo
.auth_id(),
63 "store": repo
.store(),
66 let mut result
= client
.get("api2/json/nodes/localhost/tasks", Some(args
)).await?
;
67 let mut data
= result
["data"].take();
69 let return_type
= &proxmox_backup
::api2
::node
::tasks
::API_METHOD_LIST_TASKS
.returns
;
71 use pbs_tools
::format
::{render_epoch, render_task_status}
;
72 let options
= default_table_format_options()
73 .column(ColumnConfig
::new("starttime").right_align(false).renderer(render_epoch
))
74 .column(ColumnConfig
::new("endtime").right_align(false).renderer(render_epoch
))
75 .column(ColumnConfig
::new("upid"))
76 .column(ColumnConfig
::new("status").renderer(render_task_status
));
78 format_and_print_result_full(&mut data
, return_type
, &output_format
, &options
);
87 schema
: REPO_URL_SCHEMA
,
96 /// Display the task log.
97 async
fn task_log(param
: Value
) -> Result
<Value
, Error
> {
99 let repo
= extract_repository_from_value(¶m
)?
;
100 let upid
= tools
::required_string_param(¶m
, "upid")?
;
102 let mut client
= connect(&repo
)?
;
104 display_task_log(&mut client
, upid
, true).await?
;
113 schema
: REPO_URL_SCHEMA
,
122 /// Try to stop a specific task.
123 async
fn task_stop(param
: Value
) -> Result
<Value
, Error
> {
125 let repo
= extract_repository_from_value(¶m
)?
;
126 let upid_str
= tools
::required_string_param(¶m
, "upid")?
;
128 let mut client
= connect(&repo
)?
;
130 let path
= format
!("api2/json/nodes/localhost/tasks/{}", percent_encode_component(upid_str
));
131 let _
= client
.delete(&path
, None
).await?
;
136 pub fn task_mgmt_cli() -> CliCommandMap
{
138 let task_list_cmd_def
= CliCommand
::new(&API_METHOD_TASK_LIST
)
139 .completion_cb("repository", complete_repository
);
141 let task_log_cmd_def
= CliCommand
::new(&API_METHOD_TASK_LOG
)
142 .arg_param(&["upid"]);
144 let task_stop_cmd_def
= CliCommand
::new(&API_METHOD_TASK_STOP
)
145 .arg_param(&["upid"]);
148 .insert("log", task_log_cmd_def
)
149 .insert("list", task_list_cmd_def
)
150 .insert("stop", task_stop_cmd_def
)