]> git.proxmox.com Git - pmg-api.git/blob - PMG/CLI/pmgdb.pm
e3031a0de14482b36c5a97b07cc8044dd6d66c1b
[pmg-api.git] / PMG / CLI / pmgdb.pm
1 package PMG::CLI::pmgdb;
2
3 use strict;
4 use warnings;
5 use Data::Dumper;
6
7 use PVE::SafeSyslog;
8 use PVE::Tools qw(extract_param);
9 use PVE::INotify;
10 use PVE::CLIHandler;
11
12 use PMG::Utils;
13 use PMG::RESTEnvironment;
14 use PMG::DBTools;
15 use PMG::RuleDB;
16 use PMG::Cluster;
17 use PMG::ClusterConfig;
18 use PMG::Statistic;
19
20 use PMG::API2::RuleDB;
21
22 use base qw(PVE::CLIHandler);
23
24 sub setup_environment {
25 PMG::RESTEnvironment->setup_default_cli_env();
26 }
27
28 sub 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
39 sub 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 }
68
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,
76 properties => {},
77 },
78 returns => { type => 'null'},
79 code => sub {
80 my ($param) = @_;
81
82 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
83 my $ruledb = PMG::RuleDB->new($dbh);
84
85 my $rules = $ruledb->load_rules();
86
87 foreach my $rule (@$rules) {
88 print_rule($ruledb, $rule);
89 }
90
91 $ruledb->close();
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,
104 properties => {},
105 },
106 returns => { type => 'null'},
107 code => sub {
108 my ($param) = @_;
109
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};
115
116 syslog('info', "delete rule database");
117
118 PMG::DBTools::delete_ruledb($dbname);
119
120 return undef;
121 }});
122
123 __PACKAGE__->register_method ({
124 name => 'init',
125 path => 'init',
126 method => 'POST',
127 description => "Initialize/Upgrade the PMG rule database.",
128 parameters => {
129 additionalProperties => 0,
130 properties => {
131 force => {
132 type => 'boolean',
133 description => "Delete existing database.",
134 optional => 1,
135 default => 0,
136 },
137 statistics => {
138 type => 'boolean',
139 description => "Reset and update statistic database.",
140 optional => 1,
141 default => 0,
142 },
143 }
144 },
145 returns => { type => 'null'},
146 code => sub {
147 my ($param) = @_;
148
149 PMG::Utils::cond_add_default_locale();
150
151 my $list = PMG::DBTools::database_list();
152
153 my $dbname = "Proxmox_ruledb";
154
155 if (!$list->{$dbname} || $param->{force}) {
156
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);
165 my $ruledb = PMG::RuleDB->new($dbh);
166 PMG::DBTools::init_ruledb($ruledb);
167
168 $dbh->disconnect();
169
170 } else {
171
172 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
173 my $ruledb = PMG::RuleDB->new($dbh);
174
175 print "Analyzing/Upgrading existing Databases...";
176 PMG::DBTools::upgradedb ($ruledb);
177 print "done\n";
178
179 # reset and update statistic databases
180 if ($param->{statistics}) {
181 print "Generating Proxmox Statistic Databases... ";
182 PMG::Statistic::clear_stats($dbh);
183 my $cinfo = PVE::INotify::read_file("cluster.conf");
184 PMG::Statistic::update_stats($dbh, $cinfo);
185 print "done\n";
186 }
187
188 $dbh->disconnect();
189 }
190
191 return undef;
192 }});
193
194
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,
202 properties => {},
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
218 our $cmddef = {
219 'dump' => [ __PACKAGE__, 'dump', []],
220 delete => [ __PACKAGE__, 'delete', []],
221 init => [ __PACKAGE__, 'init', []],
222 reset => [ 'PMG::API2::RuleDB', 'reset_ruledb', []],
223 update => [ __PACKAGE__, 'update', []],
224 };
225
226 1;