]> git.proxmox.com Git - pmg-api.git/blame - PMG/CLI/pmgdb.pm
fix schema definition
[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
42 print "Found RULE $rule->{id}: $rule->{name}\n";
43
44 my ($from, $to, $when, $what, $action) =
45 $ruledb->load_groups($rule);
46
47 foreach my $og (@$from) {
48 print " FOUND FROM GROUP $og->{id}: $og->{name}\n";
49 print_objects($ruledb, $og);
50 }
51 foreach my $og (@$to) {
52 print " FOUND TO GROUP $og->{id}: $og->{name}\n";
53 print_objects($ruledb, $og);
54 }
55 foreach my $og (@$when) {
56 print " FOUND WHEN GROUP $og->{id}: $og->{name}\n";
57 print_objects($ruledb, $og);
58 }
59 foreach my $og (@$what) {
60 print " FOUND WHAT GROUP $og->{id}: $og->{name}\n";
61 print_objects($ruledb, $og);
62 }
63 foreach my $og (@$action) {
64 print " FOUND ACTION GROUP $og->{id}: $og->{name}\n";
65 print_objects($ruledb, $og);
66 }
67}
8b91b776 68
8b91b776
DM
69__PACKAGE__->register_method ({
70 name => 'dump',
71 path => 'dump',
72 method => 'GET',
73 description => "Print the PMG rule database.",
74 parameters => {
75 additionalProperties => 0,
6d9a036f 76 properties => {},
8b91b776
DM
77 },
78 returns => { type => 'null'},
79 code => sub {
80 my ($param) = @_;
81
c881fe35
DM
82 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
83 my $ruledb = PMG::RuleDB->new($dbh);
84
c881fe35
DM
85 my $rules = $ruledb->load_rules();
86
87 foreach my $rule (@$rules) {
88 print_rule($ruledb, $rule);
89 }
90
91 $ruledb->close();
8b91b776
DM
92
93 return undef;
94 }});
95
96
97__PACKAGE__->register_method ({
98 name => 'delete',
99 path => 'delete',
100 method => 'DELETE',
101 description => "Delete PMG rule database.",
102 parameters => {
103 additionalProperties => 0,
6d9a036f 104 properties => {},
8b91b776
DM
105 },
106 returns => { type => 'null'},
107 code => sub {
108 my ($param) = @_;
109
f1bf78ff
DM
110 my $list = PMG::DBTools::database_list();
111
112 my $dbname = "Proxmox_ruledb";
113
114 die "Database '$dbname' does not exist\n" if !$list->{$dbname};
a355f100 115
8b91b776
DM
116 syslog('info', "delete rule database");
117
f1bf78ff 118 PMG::DBTools::delete_ruledb($dbname);
8b91b776
DM
119
120 return undef;
121 }});
122
8b91b776 123__PACKAGE__->register_method ({
dfcae855
DM
124 name => 'init',
125 path => 'init',
8b91b776 126 method => 'POST',
dfcae855 127 description => "Initialize/Upgrade the PMG rule database.",
8b91b776
DM
128 parameters => {
129 additionalProperties => 0,
130 properties => {
f1bf78ff 131 force => {
8b91b776 132 type => 'boolean',
f1bf78ff 133 description => "Delete existing database.",
8b91b776
DM
134 optional => 1,
135 default => 0,
136 },
137 statistics => {
138 type => 'boolean',
dfcae855 139 description => "Reset and update statistic database.",
8b91b776 140 optional => 1,
dfcae855 141 default => 0,
8b91b776
DM
142 },
143 }
144 },
145 returns => { type => 'null'},
146 code => sub {
147 my ($param) = @_;
148
75ce5866
DM
149 PMG::Utils::cond_add_default_locale();
150
f1bf78ff
DM
151 my $list = PMG::DBTools::database_list();
152
153 my $dbname = "Proxmox_ruledb";
154
155 if (!$list->{$dbname} || $param->{force}) {
8b91b776 156
f1bf78ff
DM
157 if ($list->{$dbname}) {
158 print "Destroy existing rule database\n";
159 PMG::DBTools::delete_ruledb($dbname);
160 }
161
162 print "Initialize rule database\n";
163
164 my $dbh = PMG::DBTools::create_ruledb ($dbname);
f4fe6fc4 165 my $ruledb = PMG::RuleDB->new($dbh);
0a580593 166 PMG::DBTools::init_ruledb($ruledb);
f1bf78ff
DM
167
168 $dbh->disconnect();
169
170 } else {
171
172 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
e7c865af 173 my $ruledb = PMG::RuleDB->new($dbh);
f1bf78ff 174
0a580593 175 print "Analyzing/Upgrading existing Databases...";
f4fe6fc4 176 PMG::DBTools::upgradedb ($ruledb);
0a580593 177 print "done\n";
f1bf78ff
DM
178
179 # reset and update statistic databases
180 if ($param->{statistics}) {
181 print "Generating Proxmox Statistic Databases... ";
354ae1b2
DM
182 PMG::Statistic::clear_stats($dbh);
183 my $cinfo = PVE::INotify::read_file("cluster.conf");
184 PMG::Statistic::update_stats($dbh, $cinfo);
f1bf78ff
DM
185 print "done\n";
186 }
187
188 $dbh->disconnect();
189 }
a355f100 190
8b91b776
DM
191 return undef;
192 }});
193
194
354ae1b2
DM
195__PACKAGE__->register_method ({
196 name => 'update',
197 path => 'update',
198 method => 'POST',
199 description => "Update the PMG statistic database.",
200 parameters => {
201 additionalProperties => 0,
6d9a036f 202 properties => {},
354ae1b2
DM
203 },
204 returns => { type => 'null'},
205 code => sub {
206 my ($param) = @_;
207
208 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
209 print "Updateing Proxmox Statistic Databases... ";
210 my $cinfo = PVE::INotify::read_file("cluster.conf");
211 PMG::Statistic::update_stats($dbh, $cinfo);
212 print "done\n";
213 $dbh->disconnect();
214
215 return undef;
216 }});
217
8b91b776
DM
218our $cmddef = {
219 'dump' => [ __PACKAGE__, 'dump', []],
220 delete => [ __PACKAGE__, 'delete', []],
dfcae855 221 init => [ __PACKAGE__, 'init', []],
1c0bc64c 222 reset => [ 'PMG::API2::RuleDB', 'reset_ruledb', []],
354ae1b2 223 update => [ __PACKAGE__, 'update', []],
8b91b776
DM
224};
225
2261;