aboutsummaryrefslogtreecommitdiffstats
path: root/lib/AdminPanel/Module
diff options
context:
space:
mode:
authorAngelo Naselli <anaselli@linux.it>2014-12-27 14:58:52 +0100
committerAngelo Naselli <anaselli@linux.it>2014-12-27 14:58:52 +0100
commit05520bea360068deff24f037455bc4d70ef74760 (patch)
tree5bb110696d5f652f4c0419bedae0df5ba225a7a0 /lib/AdminPanel/Module
parent75db461e216f40ef54d1ced574d05216e00cb06c (diff)
downloadcolin-keep-05520bea360068deff24f037455bc4d70ef74760.tar
colin-keep-05520bea360068deff24f037455bc4d70ef74760.tar.gz
colin-keep-05520bea360068deff24f037455bc4d70ef74760.tar.bz2
colin-keep-05520bea360068deff24f037455bc4d70ef74760.tar.xz
colin-keep-05520bea360068deff24f037455bc4d70ef74760.zip
Added a time to wait for new status of the unit
Diffstat (limited to 'lib/AdminPanel/Module')
-rw-r--r--lib/AdminPanel/Module/Services.pm54
1 files changed, 25 insertions, 29 deletions
diff --git a/lib/AdminPanel/Module/Services.pm b/lib/AdminPanel/Module/Services.pm
index bd0d5fb..168e275 100644
--- a/lib/AdminPanel/Module/Services.pm
+++ b/lib/AdminPanel/Module/Services.pm
@@ -58,6 +58,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
use Moose;
use English;
+use Time::HiRes qw(usleep);
use MDK::Common::String qw(formatAlaTeX);
use MDK::Common::DataStructure qw(member);
@@ -122,21 +123,6 @@ has 'on_services' => (
);
-has 'running_services' => (
- traits => ['Array'],
- is => 'rw',
- isa => 'ArrayRef[Str]',
- default => sub { [] },
- init_arg => undef,
- handles => {
- all_running_services => 'elements',
- add_running_service => 'push',
- map_running_service => 'map',
- running_service_count => 'count',
- sorted_running_services => 'sort',
- },
-);
-
has 'sh_gui' => (
is => 'rw',
init_arg => undef,
@@ -276,19 +262,23 @@ sub loadServices {
$self->_services(\@$l);
$self->on_services(\@$on_services);
- $self->_refreshRunningServices();
}
-sub _refreshRunningServices {
- my $self = shift;
-
- my @running;
- foreach ($self->all_services) {
+## _waitUnitStatus wait unit status is reached for
+## a while (10 secs max)
+sub _waitUnitStatus {
+ my ($self, $service, $running) = @_;
- my $serviceName = $_;
- push @running, $serviceName if $self->sh_services->is_service_running($serviceName);
+ for (my $i=0; $i < 100; $i++) {
+ $self->loadServices();
+ if ($running) {
+ last if $self->sh_services->is_service_running($service);
+ }
+ else {
+ last if !$self->sh_services->is_service_running($service);
+ }
+ usleep(100);
}
- $self->running_services(\@running);
}
## _serviceInfo sets service description accordingly to
@@ -345,6 +335,7 @@ sub _serviceStatus {
sub _fillServiceTable {
my ($self, $tbl) = @_;
+ $tbl->startMultipleChanges();
$tbl->deleteAllItems();
my $itemCollection = new yui::YItemCollection;
foreach (sort $self->all_services) {
@@ -364,6 +355,7 @@ sub _fillServiceTable {
$item->DISOWN();
}
$tbl->addItems($itemCollection);
+ $tbl->doneMultipleChanges();
}
## draw service panel and manage it (main dialog)
@@ -514,7 +506,7 @@ sub _servicePanel {
yui::YUI::app()->busyCursor();
$self->sh_services->set_service($item->label(), $item->checked());
# we can push/pop service, but this (slower) should return real situation
- $self->_refreshRunningServices();
+ $self->loadServices();
yui::YUI::app()->normalCursor();
}
}
@@ -523,9 +515,11 @@ sub _servicePanel {
$item = $serviceTbl->selectedItem();
if ($item) {
yui::YUI::app()->busyCursor();
- $self->sh_services->restart_or_start($item->label());
+ my $serviceName = $item->label();
+ $self->sh_services->restart_or_start($serviceName);
# we can push/pop service, but this (slower) should return real situation
- $self->_refreshRunningServices();
+ $self->_waitUnitStatus($serviceName, 1);
+# $self->loadServices();
$self->_serviceStatus($serviceTbl, $item);
yui::YUI::app()->normalCursor();
}
@@ -534,9 +528,11 @@ sub _servicePanel {
$item = $serviceTbl->selectedItem();
if ($item) {
yui::YUI::app()->busyCursor();
- $self->sh_services->stopService($item->label());
+ my $serviceName = $item->label();
+ $self->sh_services->stopService($serviceName);
# we can push/pop service, but this (slower) should return real situation
- $self->_refreshRunningServices();
+ $self->_waitUnitStatus($serviceName, 0);
+# $self->loadServices();
$self->_serviceStatus($serviceTbl, $item);
yui::YUI::app()->normalCursor();
}