use PVE::SafeSyslog;
use PVE::Tools qw(extract_param);
use PVE::INotify;
+use PVE::CLIHandler;
+use PMG::Utils;
+use PMG::RESTEnvironment;
use PMG::DBTools;
+use PMG::RuleDB;
+use PMG::Cluster;
+use PMG::ClusterConfig;
+use PMG::Statistic;
+
+use PMG::API2::RuleDB;
use base qw(PVE::CLIHandler);
-my $nodename = PVE::INotify::nodename();
+sub setup_environment {
+ PMG::RESTEnvironment->setup_default_cli_env();
+}
+
+sub print_objects {
+ my ($ruledb, $og) = @_;
+
+ my $objects = $ruledb->load_group_objects ($og->{id});
+
+ foreach my $obj (@$objects) {
+ my $desc = $obj->short_desc ();
+ print " OBJECT $obj->{id}: $desc\n";
+ }
+}
+
+sub print_rule {
+ my ($ruledb, $rule) = @_;
+
+ print "Found RULE $rule->{id}: $rule->{name}\n";
+
+ my ($from, $to, $when, $what, $action) =
+ $ruledb->load_groups($rule);
+
+ foreach my $og (@$from) {
+ print " FOUND FROM GROUP $og->{id}: $og->{name}\n";
+ print_objects($ruledb, $og);
+ }
+ foreach my $og (@$to) {
+ print " FOUND TO GROUP $og->{id}: $og->{name}\n";
+ print_objects($ruledb, $og);
+ }
+ foreach my $og (@$when) {
+ print " FOUND WHEN GROUP $og->{id}: $og->{name}\n";
+ print_objects($ruledb, $og);
+ }
+ foreach my $og (@$what) {
+ print " FOUND WHAT GROUP $og->{id}: $og->{name}\n";
+ print_objects($ruledb, $og);
+ }
+ foreach my $og (@$action) {
+ print " FOUND ACTION GROUP $og->{id}: $og->{name}\n";
+ print_objects($ruledb, $og);
+ }
+}
__PACKAGE__->register_method ({
name => 'dump',
code => sub {
my ($param) = @_;
- print "DUMP\n";
+ my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
+ my $ruledb = PMG::RuleDB->new($dbh);
+
+ my $rules = $ruledb->load_rules();
+
+ foreach my $rule (@$rules) {
+ print_rule($ruledb, $rule);
+ }
+
+ $ruledb->close();
return undef;
}});
return undef;
}});
-
__PACKAGE__->register_method ({
- name => 'update',
- path => 'update',
+ name => 'init',
+ path => 'init',
method => 'POST',
- description => "Update or initialize PMG rule database.",
+ description => "Initialize/Upgrade the PMG rule database.",
parameters => {
additionalProperties => 0,
properties => {
},
statistics => {
type => 'boolean',
- description => "Update/initialize statistic database (this is done by default).",
+ description => "Reset and update statistic database.",
optional => 1,
- default => 1,
+ default => 0,
},
}
},
code => sub {
my ($param) = @_;
+ PMG::Utils::cond_add_default_locale();
+
my $list = PMG::DBTools::database_list();
my $dbname = "Proxmox_ruledb";
print "Initialize rule database\n";
my $dbh = PMG::DBTools::create_ruledb ($dbname);
- $ruledb = PMG::RuleDB->new($dbh);
+ my $ruledb = PMG::RuleDB->new($dbh);
PMG::DBTools::init_ruledb($ruledb);
$dbh->disconnect();
} else {
my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
- $ruledb = Proxmox::RuleDB->new($dbh);
+ my $ruledb = PMG::RuleDB->new($dbh);
print "Analyzing/Upgrading existing Databases...";
- #Proxmox::Utils::upgradedb ($ruledb);
+ PMG::DBTools::upgradedb ($ruledb);
print "done\n";
# reset and update statistic databases
if ($param->{statistics}) {
print "Generating Proxmox Statistic Databases... ";
- #Proxmox::Statistic::clear_stats($dbh);
- #Proxmox::Statistic::update_stats($dbh, $cinfo);
+ PMG::Statistic::clear_stats($dbh);
+ my $cinfo = PVE::INotify::read_file("cluster.conf");
+ PMG::Statistic::update_stats($dbh, $cinfo);
print "done\n";
}
}});
+__PACKAGE__->register_method ({
+ name => 'update',
+ path => 'update',
+ method => 'POST',
+ description => "Update the PMG statistic database.",
+ parameters => {
+ additionalProperties => 0,
+ },
+ returns => { type => 'null'},
+ code => sub {
+ my ($param) = @_;
+
+ my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
+ print "Updateing Proxmox Statistic Databases... ";
+ my $cinfo = PVE::INotify::read_file("cluster.conf");
+ PMG::Statistic::update_stats($dbh, $cinfo);
+ print "done\n";
+ $dbh->disconnect();
+
+ return undef;
+ }});
+
our $cmddef = {
'dump' => [ __PACKAGE__, 'dump', []],
delete => [ __PACKAGE__, 'delete', []],
+ init => [ __PACKAGE__, 'init', []],
+ reset => [ 'PMG::API2::RuleDB', 'reset_ruledb', []],
update => [ __PACKAGE__, 'update', []],
};