]> git.proxmox.com Git - pve-manager.git/blame - PVE/API2/Replication.pm
add vmid parameter to replication status
[pve-manager.git] / PVE / API2 / Replication.pm
CommitLineData
892821fd
DM
1package PVE::API2::Replication;
2
3use warnings;
4use strict;
5
6use PVE::JSONSchema qw(get_standard_option);
7use PVE::RPCEnvironment;
483f89dd 8use PVE::ProcFSTools;
892821fd
DM
9use PVE::ReplicationConfig;
10use PVE::Replication;
11
12use PVE::RESTHandler;
13
14use base qw(PVE::RESTHandler);
15
16__PACKAGE__->register_method ({
17 name => 'index',
18 path => '',
19 method => 'GET',
20 permissions => { user => 'all' },
21 description => "Directory index.",
22 parameters => {
23 additionalProperties => 0,
24 properties => {
25 node => get_standard_option('pve-node'),
26 },
27 },
28 returns => {
29 type => 'array',
30 items => {
31 type => "object",
32 properties => {},
33 },
34 links => [ { rel => 'child', href => "{name}" } ],
35 },
36 code => sub {
37 my ($param) = @_;
38
39 return [
40 { name => 'status' },
41 ];
42 }});
43
44
45__PACKAGE__->register_method ({
46 name => 'status',
47 path => 'status',
48 method => 'GET',
49 description => "List replication job status.",
50 permissions => {
51 description => "Requires the VM.Audit permission on /vms/<vmid>.",
52 user => 'all',
53 },
54 protected => 1,
55 proxyto => 'node',
56 parameters => {
57 additionalProperties => 0,
58 properties => {
59 node => get_standard_option('pve-node'),
c1b20fca
DC
60 vmid => get_standard_option('pve-vmid', {
61 optional => 1,
62 description => "Only list replication jobs for this vmid.",
63 }),
892821fd
DM
64 },
65 },
66 returns => {
67 type => 'array',
68 items => {
69 type => "object",
70 properties => {},
71 },
72 links => [ { rel => 'child', href => "{vmid}" } ],
73 },
74 code => sub {
75 my ($param) = @_;
76
77 my $rpcenv = PVE::RPCEnvironment::get();
78 my $authuser = $rpcenv->get_user();
79
80 my $jobs = PVE::Replication::job_status();
81
82 my $res = [];
83 foreach my $id (sort keys %$jobs) {
84 my $d = $jobs->{$id};
85 my $state = delete $d->{state};
86 my $vmid = $d->{guest};
c1b20fca 87 next if defined($param->{vmid}) && $vmid != $param->{vmid};
892821fd
DM
88 next if !$rpcenv->check($authuser, "/vms/$vmid", [ 'VM.Audit' ]);
89 $d->{id} = $id;
5c180db3 90 foreach my $k (qw(last_sync last_try fail_count error duration)) {
892821fd
DM
91 $d->{$k} = $state->{$k} if defined($state->{$k});
92 }
483f89dd
DM
93 if ($state->{pid} && $state->{ptime}) {
94 if (PVE::ProcFSTools::check_process_running($state->{pid}, $state->{ptime})) {
95 $d->{pid} = $state->{pid};
96 }
97 }
892821fd
DM
98 push @$res, $d;
99 }
100
101 return $res;
102 }});
103
1041;