]> git.proxmox.com Git - pmg-api.git/blob - PMG/CLI/pmgdb.pm
PMG/CLI/pmgdb.pm: generate default locale
[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 },
77 returns => { type => 'null'},
78 code => sub {
79 my ($param) = @_;
80
81 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
82 my $ruledb = PMG::RuleDB->new($dbh);
83
84 my $rules = $ruledb->load_rules();
85
86 foreach my $rule (@$rules) {
87 print_rule($ruledb, $rule);
88 }
89
90 $ruledb->close();
91
92 return undef;
93 }});
94
95
96 __PACKAGE__->register_method ({
97 name => 'delete',
98 path => 'delete',
99 method => 'DELETE',
100 description => "Delete PMG rule database.",
101 parameters => {
102 additionalProperties => 0,
103 },
104 returns => { type => 'null'},
105 code => sub {
106 my ($param) = @_;
107
108 my $list = PMG::DBTools::database_list();
109
110 my $dbname = "Proxmox_ruledb";
111
112 die "Database '$dbname' does not exist\n" if !$list->{$dbname};
113
114 syslog('info', "delete rule database");
115
116 PMG::DBTools::delete_ruledb($dbname);
117
118 return undef;
119 }});
120
121 __PACKAGE__->register_method ({
122 name => 'init',
123 path => 'init',
124 method => 'POST',
125 description => "Initialize/Upgrade the PMG rule database.",
126 parameters => {
127 additionalProperties => 0,
128 properties => {
129 force => {
130 type => 'boolean',
131 description => "Delete existing database.",
132 optional => 1,
133 default => 0,
134 },
135 statistics => {
136 type => 'boolean',
137 description => "Reset and update statistic database.",
138 optional => 1,
139 default => 0,
140 },
141 }
142 },
143 returns => { type => 'null'},
144 code => sub {
145 my ($param) = @_;
146
147 PMG::Utils::cond_add_default_locale();
148
149 my $list = PMG::DBTools::database_list();
150
151 my $dbname = "Proxmox_ruledb";
152
153 if (!$list->{$dbname} || $param->{force}) {
154
155 if ($list->{$dbname}) {
156 print "Destroy existing rule database\n";
157 PMG::DBTools::delete_ruledb($dbname);
158 }
159
160 print "Initialize rule database\n";
161
162 my $dbh = PMG::DBTools::create_ruledb ($dbname);
163 my $ruledb = PMG::RuleDB->new($dbh);
164 PMG::DBTools::init_ruledb($ruledb);
165
166 $dbh->disconnect();
167
168 } else {
169
170 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
171 my $ruledb = PMG::RuleDB->new($dbh);
172
173 print "Analyzing/Upgrading existing Databases...";
174 PMG::DBTools::upgradedb ($ruledb);
175 print "done\n";
176
177 # reset and update statistic databases
178 if ($param->{statistics}) {
179 print "Generating Proxmox Statistic Databases... ";
180 PMG::Statistic::clear_stats($dbh);
181 my $cinfo = PVE::INotify::read_file("cluster.conf");
182 PMG::Statistic::update_stats($dbh, $cinfo);
183 print "done\n";
184 }
185
186 $dbh->disconnect();
187 }
188
189 return undef;
190 }});
191
192
193 __PACKAGE__->register_method ({
194 name => 'update',
195 path => 'update',
196 method => 'POST',
197 description => "Update the PMG statistic database.",
198 parameters => {
199 additionalProperties => 0,
200 },
201 returns => { type => 'null'},
202 code => sub {
203 my ($param) = @_;
204
205 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
206 print "Updateing Proxmox Statistic Databases... ";
207 my $cinfo = PVE::INotify::read_file("cluster.conf");
208 PMG::Statistic::update_stats($dbh, $cinfo);
209 print "done\n";
210 $dbh->disconnect();
211
212 return undef;
213 }});
214
215 our $cmddef = {
216 'dump' => [ __PACKAGE__, 'dump', []],
217 delete => [ __PACKAGE__, 'delete', []],
218 init => [ __PACKAGE__, 'init', []],
219 reset => [ 'PMG::API2::RuleDB', 'reset_ruledb', []],
220 update => [ __PACKAGE__, 'update', []],
221 };
222
223 1;