]> git.proxmox.com Git - pmg-api.git/blame - PMG/CLI/pmgdb.pm
extend `pmgdb dump`
[pmg-api.git] / PMG / CLI / pmgdb.pm
CommitLineData
82782d70 1package PMG::CLI::pmgdb;
8b91b776
DM
2
3use strict;
4use warnings;
5use Data::Dumper;
6
7use PVE::SafeSyslog;
8use PVE::Tools qw(extract_param);
9use PVE::INotify;
595f5e50 10use PVE::CLIHandler;
8b91b776 11
75ce5866 12use PMG::Utils;
80a43e18 13use PMG::RESTEnvironment;
a355f100 14use PMG::DBTools;
595f5e50 15use PMG::RuleDB;
354ae1b2 16use PMG::Cluster;
9f67f5b3 17use PMG::ClusterConfig;
354ae1b2 18use PMG::Statistic;
a355f100 19
1c0bc64c
DM
20use PMG::API2::RuleDB;
21
8b91b776
DM
22use base qw(PVE::CLIHandler);
23
80a43e18
DM
24sub setup_environment {
25 PMG::RESTEnvironment->setup_default_cli_env();
26}
27
c881fe35
DM
28sub print_objects {
29 my ($ruledb, $og) = @_;
30
31 my $objects = $ruledb->load_group_objects ($og->{id});
32
33 foreach my $obj (@$objects) {
34 my $desc = $obj->short_desc ();
35 print " OBJECT $obj->{id}: $desc\n";
36 }
37}
38
39sub print_rule {
40 my ($ruledb, $rule) = @_;
41
0d161f4d
SI
42 my $direction = {
43 0 => 'in',
44 1 => 'out',
45 2 => 'in+out',
46 };
47 my $active = $rule->{active} ? 'active' : 'inactive';
48 my $dir = $direction->{$rule->{direction}};
49
50 print "Found RULE $rule->{id} (prio: $rule->{priority}, $dir, $active): $rule->{name}\n";
c881fe35
DM
51
52 my ($from, $to, $when, $what, $action) =
53 $ruledb->load_groups($rule);
54
55 foreach my $og (@$from) {
56 print " FOUND FROM GROUP $og->{id}: $og->{name}\n";
57 print_objects($ruledb, $og);
58 }
59 foreach my $og (@$to) {
60 print " FOUND TO GROUP $og->{id}: $og->{name}\n";
61 print_objects($ruledb, $og);
62 }
63 foreach my $og (@$when) {
64 print " FOUND WHEN GROUP $og->{id}: $og->{name}\n";
65 print_objects($ruledb, $og);
66 }
67 foreach my $og (@$what) {
68 print " FOUND WHAT GROUP $og->{id}: $og->{name}\n";
69 print_objects($ruledb, $og);
70 }
71 foreach my $og (@$action) {
72 print " FOUND ACTION GROUP $og->{id}: $og->{name}\n";
73 print_objects($ruledb, $og);
74 }
75}
8b91b776 76
8b91b776
DM
77__PACKAGE__->register_method ({
78 name => 'dump',
79 path => 'dump',
80 method => 'GET',
81 description => "Print the PMG rule database.",
82 parameters => {
83 additionalProperties => 0,
6d9a036f 84 properties => {},
8b91b776
DM
85 },
86 returns => { type => 'null'},
87 code => sub {
88 my ($param) = @_;
89
c881fe35
DM
90 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
91 my $ruledb = PMG::RuleDB->new($dbh);
92
c881fe35
DM
93 my $rules = $ruledb->load_rules();
94
95 foreach my $rule (@$rules) {
96 print_rule($ruledb, $rule);
97 }
98
99 $ruledb->close();
8b91b776
DM
100
101 return undef;
102 }});
103
104
105__PACKAGE__->register_method ({
106 name => 'delete',
107 path => 'delete',
108 method => 'DELETE',
109 description => "Delete PMG rule database.",
110 parameters => {
111 additionalProperties => 0,
6d9a036f 112 properties => {},
8b91b776
DM
113 },
114 returns => { type => 'null'},
115 code => sub {
116 my ($param) = @_;
117
f1bf78ff
DM
118 my $list = PMG::DBTools::database_list();
119
120 my $dbname = "Proxmox_ruledb";
121
122 die "Database '$dbname' does not exist\n" if !$list->{$dbname};
a355f100 123
8b91b776
DM
124 syslog('info', "delete rule database");
125
f1bf78ff 126 PMG::DBTools::delete_ruledb($dbname);
8b91b776
DM
127
128 return undef;
129 }});
130
8b91b776 131__PACKAGE__->register_method ({
dfcae855
DM
132 name => 'init',
133 path => 'init',
8b91b776 134 method => 'POST',
dfcae855 135 description => "Initialize/Upgrade the PMG rule database.",
8b91b776
DM
136 parameters => {
137 additionalProperties => 0,
138 properties => {
f1bf78ff 139 force => {
8b91b776 140 type => 'boolean',
f1bf78ff 141 description => "Delete existing database.",
8b91b776
DM
142 optional => 1,
143 default => 0,
144 },
145 statistics => {
146 type => 'boolean',
dfcae855 147 description => "Reset and update statistic database.",
8b91b776 148 optional => 1,
dfcae855 149 default => 0,
8b91b776
DM
150 },
151 }
152 },
153 returns => { type => 'null'},
154 code => sub {
155 my ($param) = @_;
156
75ce5866
DM
157 PMG::Utils::cond_add_default_locale();
158
f1bf78ff
DM
159 my $list = PMG::DBTools::database_list();
160
161 my $dbname = "Proxmox_ruledb";
162
163 if (!$list->{$dbname} || $param->{force}) {
8b91b776 164
f1bf78ff
DM
165 if ($list->{$dbname}) {
166 print "Destroy existing rule database\n";
167 PMG::DBTools::delete_ruledb($dbname);
168 }
169
170 print "Initialize rule database\n";
171
172 my $dbh = PMG::DBTools::create_ruledb ($dbname);
f4fe6fc4 173 my $ruledb = PMG::RuleDB->new($dbh);
0a580593 174 PMG::DBTools::init_ruledb($ruledb);
f1bf78ff
DM
175
176 $dbh->disconnect();
177
178 } else {
179
180 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
e7c865af 181 my $ruledb = PMG::RuleDB->new($dbh);
f1bf78ff 182
0a580593 183 print "Analyzing/Upgrading existing Databases...";
f4fe6fc4 184 PMG::DBTools::upgradedb ($ruledb);
0a580593 185 print "done\n";
f1bf78ff
DM
186
187 # reset and update statistic databases
188 if ($param->{statistics}) {
189 print "Generating Proxmox Statistic Databases... ";
354ae1b2
DM
190 PMG::Statistic::clear_stats($dbh);
191 my $cinfo = PVE::INotify::read_file("cluster.conf");
192 PMG::Statistic::update_stats($dbh, $cinfo);
f1bf78ff
DM
193 print "done\n";
194 }
195
196 $dbh->disconnect();
197 }
a355f100 198
8b91b776
DM
199 return undef;
200 }});
201
202
354ae1b2
DM
203__PACKAGE__->register_method ({
204 name => 'update',
205 path => 'update',
206 method => 'POST',
207 description => "Update the PMG statistic database.",
208 parameters => {
209 additionalProperties => 0,
6d9a036f 210 properties => {},
354ae1b2
DM
211 },
212 returns => { type => 'null'},
213 code => sub {
214 my ($param) = @_;
215
216 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
217 print "Updateing Proxmox Statistic Databases... ";
218 my $cinfo = PVE::INotify::read_file("cluster.conf");
219 PMG::Statistic::update_stats($dbh, $cinfo);
220 print "done\n";
221 $dbh->disconnect();
222
223 return undef;
224 }});
225
8b91b776
DM
226our $cmddef = {
227 'dump' => [ __PACKAGE__, 'dump', []],
228 delete => [ __PACKAGE__, 'delete', []],
dfcae855 229 init => [ __PACKAGE__, 'init', []],
1c0bc64c 230 reset => [ 'PMG::API2::RuleDB', 'reset_ruledb', []],
354ae1b2 231 update => [ __PACKAGE__, 'update', []],
8b91b776
DM
232};
233
2341;