my $data = { id => "service:$sid", type => 'service', sid => $sid };
if ($ss) {
- my $req = $sc->{state} || 'ignore';
- my $cur = $ss->{state};
- my $state = $cur;
-
- # give fast feedback to the user
- if ($cur eq 'stopped') {
- if ($req eq 'started') {
- $state = 'starting';
- } elsif ($req eq 'disabled') {
- $state = 'disabled';
- }
- } elsif ($cur eq 'started') {
- if ($req eq 'stopped' || $req eq 'disabled') {
- $state = 'stopping';
- }
- $state = 'starting' if !$ss->{running};
- } elsif ($cur eq 'error') {
- if ($req eq 'disabled') {
- $state = 'clearing error flag';
- }
- }
-
$data->{node} = $ss->{node};
- $data->{status} = "$sid ($ss->{node}, $state)"; # backward compatibility
- $data->{state} = $state;
$data->{crm_state} = $ss->{state};
} else {
$data->{node} = $sc->{node};
- $data->{state} = 'queued';
- $data->{status} = "$sid ($sc->{node}, queued)"; # backward compatibility
}
+ $data->{state} = PVE::HA::Tools::get_verbose_service_state($ss, $sc);
+ $data->{status} = "$sid ($data->{node}, $data->{state})"; # backward compatibility
+
# also return common resource attributes
if (defined($sc)) {
$data->{request_state} = $sc->{state};
foreach my $sid (@services) {
my $sc = $self->{service_config}->{$sid};
my $ss = $service_status->{$sid};
+
my $sgui = $self->{service_gui}->{$sid};
next if !$sgui;
my $nl = $sgui->{node_label};
my $sl = $sgui->{status_label};
next if !$sl;
-
- my $text = ($ss && $ss->{state}) ? $ss->{state} : '-';
- $sl->set_text($text);
+
+ my $service_state = PVE::HA::Tools::get_verbose_service_state($ss, $sc);
+ $sl->set_text($service_state);
}
if (my $sv = $self->{gui}->{stat_view}) {
return $count;
}
+sub get_verbose_service_state {
+ my ($service_state, $service_conf) = @_;
+
+ # service not yet processed by manager
+ return 'queued' if !defined($service_state);
+ my $cur = $service_state->{state};
+
+ return 'ignore' if !defined($service_conf) || !defined($service_conf->{state});
+ my $req = $service_conf->{state};
+
+ # give fast feedback to the user
+ my $state = $cur;
+ if (!defined($cur)) {
+ $state = 'queued';
+ } elsif ($cur eq 'stopped') {
+ if ($req eq 'started') {
+ $state = 'starting';
+ } elsif ($req eq 'disabled') {
+ $state = 'disabled';
+ }
+ } elsif ($cur eq 'started') {
+ if ($req eq 'stopped' || $req eq 'disabled') {
+ $state = 'stopping';
+ }
+ $state = 'starting' if !$service_state->{running};
+ } elsif ($cur eq 'error') {
+ if ($req eq 'disabled') {
+ $state = 'clearing error flag';
+ }
+ }
+
+ return $state;
+}
+
sub upid_wait {
my ($upid, $haenv) = @_;