use PVE::INotify;
use PVE::Exception qw(raise_param_exc);
use PVE::RESTHandler;
-use PVE::RESTEnvironment;
+use PMG::RESTEnvironment;
use PVE::JSONSchema qw(get_standard_option);
+use PMG::Utils;
+
use base qw(PVE::RESTHandler);
my $service_name_list = [
+ 'clamav-daemon',
+ 'clamav-freshclam',
'pmgproxy',
'pmgdaemon',
- 'sshd',
- 'syslog',
- 'cron',
+ 'pmgpolicy',
+ 'pmg-smtp-filter',
+ 'pmgtunnel',
+ 'pmgmirror',
+ 'ssh',
+ 'rsyslog',
'postfix',
+ 'postgres',
'systemd-timesyncd',
+ 'pmg-hourly',
+ 'pmg-daily',
];
-my $get_full_service_state = sub {
- my ($service) = @_;
-
- my $res;
-
- my $parser = sub {
- my $line = shift;
- if ($line =~ m/^([^=\s]+)=(.*)$/) {
- $res->{$1} = $2;
- }
- };
-
- PVE::Tools::run_command(['systemctl', 'show', $service], outfunc => $parser);
-
- return $res;
-};
-
my $static_service_list;
sub get_service_list {
my $list = {};
foreach my $name (@$service_name_list) {
my $ss;
- eval { $ss = &$get_full_service_state($name); };
+ eval { $ss = PMG::Utils::get_full_service_state($name); };
warn $@ if $@;
next if !$ss;
next if !defined($ss->{Description});
enum => $service_name_list,
};
-my $service_cmd = sub {
- my ($service, $cmd) = @_;
-
- my $initd_cmd;
-
- die "unknown service command '$cmd'\n"
- if $cmd !~ m/^(start|stop|restart|reload)$/;
-
- if ($service eq 'pmgdaemon' || $service eq 'pmgproxy') {
- if ($cmd eq 'restart') {
- # OK
- } else {
- die "invalid service cmd '$service $cmd': ERROR";
- }
- }
-
- PVE::Tools::run_command(['systemctl', $cmd, $service]);
-};
-
my $service_state = sub {
my ($service) = @_;
my $ss;
- eval { $ss = &$get_full_service_state($service); };
+ eval { $ss = PMG::Utils::get_full_service_state($service); };
if (my $err = $@) {
return 'unknown';
}
- return $ss->{SubState} if $ss->{SubState};
+ my $state = $ss->{SubState} // 'unknown';
+
+ $state = $ss->{Result}
+ if $state eq 'dead' && $ss->{Type} && $ss->{Type} eq 'oneshot' &&
+ $ss->{Result};
- return 'unknown';
+ return $state;
};
__PACKAGE__->register_method ({
service => $id,
name => $service_list->{$id}->{name},
desc => $service_list->{$id}->{desc},
- state => &$service_state($id),
+ state => $service_state->($id),
};
}
code => sub {
my ($param) = @_;
- my $restenv = PVE::RESTEnvironment::get();
+ my $restenv = PMG::RESTEnvironment->get();
my $user = $restenv->get_user();
syslog('info', "starting service $param->{service}: $upid\n");
- &$service_cmd($param->{service}, 'start');
+ PMG::Utils::service_cmd($param->{service}, 'start');
};
code => sub {
my ($param) = @_;
- my $restenv = PVE::RESTEnvironment::get();
+ my $restenv = PMG::RESTEnvironment->get();
my $user = $restenv->get_user();
syslog('info', "stoping service $param->{service}: $upid\n");
- &$service_cmd($param->{service}, 'stop');
+ PMG::Utils::service_cmd($param->{service}, 'stop');
};
code => sub {
my ($param) = @_;
- my $restenv = PVE::RESTEnvironment::get();
+ my $restenv = PMG::RESTEnvironment->get();
my $user = $restenv->get_user();
syslog('info', "re-starting service $param->{service}: $upid\n");
- &$service_cmd($param->{service}, 'restart');
+ PMG::Utils::service_cmd($param->{service}, 'restart');
};
code => sub {
my ($param) = @_;
- my $restenv = PVE::RESTEnvironment::get();
+ my $restenv = PMG::RESTEnvironment->get();
my $user = $restenv->get_user();
syslog('info', "reloading service $param->{service}: $upid\n");
- &$service_cmd($param->{service}, 'reload');
+ PMG::Utils::service_cmd($param->{service}, 'reload');
};