Beekeeper
view release on metacpan or search on metacpan
lib/Beekeeper/Service/Supervisor.pm view on Meta::CPAN
package Beekeeper::Service::Supervisor;
use strict;
use warnings;
our $VERSION = '0.10';
use Beekeeper::Client;
# Show errors from perspective of caller
$Carp::Internal{(__PACKAGE__)}++;
sub restart_pool {
my ($class, %args) = @_;
my $client = Beekeeper::Client->instance;
my $guard = $client->__use_authorization_token('BKPR_ADMIN');
$client->send_notification(
method => '_bkpr.supervisor.restart_pool',
params => \%args,
);
}
sub restart_workers {
my ($class, %args) = @_;
my $client = Beekeeper::Client->instance;
my $guard = $client->__use_authorization_token('BKPR_ADMIN');
$client->send_notification(
method => '_bkpr.supervisor.restart_workers',
params => \%args,
);
}
sub get_workers_status {
my ($class, %args) = @_;
my $client = Beekeeper::Client->instance;
my $guard = $client->__use_authorization_token('BKPR_ADMIN');
my $timeout = delete $args{'timeout'};
my $resp = $client->call_remote(
method => '_bkpr.supervisor.get_workers_status',
params => \%args,
timeout => $timeout,
);
return $resp->result;
}
sub get_workers_status_async {
my ($class, %args) = @_;
my $on_success = delete $args{'on_success'};
my $on_error = delete $args{'on_error'};
unless ($on_error) {
my ($file, $line) = (caller)[1,2];
$on_error = sub { die $_[0]->message . " at $file line $line\n"; };
}
my $client = Beekeeper::Client->instance;
my $guard = $client->__use_authorization_token('BKPR_ADMIN');
my $timeout = delete $args{'timeout'};
$client->call_remote_async(
method => '_bkpr.supervisor.get_workers_status',
params => \%args,
timeout => $timeout,
on_success => $on_success,
on_error => $on_error,
);
}
sub get_services_status {
my ($class, %args) = @_;
my $client = Beekeeper::Client->instance;
my $guard = $client->__use_authorization_token('BKPR_ADMIN');
my $timeout = delete $args{'timeout'};
my $resp = $client->call_remote(
method => '_bkpr.supervisor.get_services_status',
params => \%args,
timeout => $timeout,
);
return $resp->result;
}
sub get_services_status_async {
my ($class, %args) = @_;
my $on_success = delete $args{'on_success'};
my $on_error = delete $args{'on_error'};
unless ($on_error) {
my ($file, $line) = (caller)[1,2];
$on_error = sub { die $_[0]->message . " at $file line $line\n"; };
}
my $client = Beekeeper::Client->instance;
my $guard = $client->__use_authorization_token('BKPR_ADMIN');
my $timeout = delete $args{'timeout'};
$client->call_remote_async(
method => '_bkpr.supervisor.get_services_status',
params => \%args,
timeout => $timeout,
on_success => $on_success,
on_error => $on_error,
);
}
1;
__END__
=pod
=encoding utf8
=head1 NAME
Beekeeper::Service::Supervisor - Worker pool supervisor
=head1 VERSION
Version 0.09
=head1 SYNOPSIS
my $status = Beekeeper::Service::Supervisor->get_services_status(
host => '.*',
pool => '.*',
pool => '.*',
);
print "$_: $status->{$_}->{load}\n" foreach keys %$status;
Beekeeper::Service::Supervisor->get_services_status(
on_success => sub {
my ($status) = @_;
print "$_: $status->{$_}->{load}\n" foreach keys %$status;
},
on_error => sub {
my ($error) = @_;
die $error->message;
},
);
=head1 DESCRIPTION
A Supervisor worker is created automatically in every worker pool.
It keeps a shared table of the performance metrics of every worker connected to
every broker, and routinely measures the CPU and memory usage of local workers.
( run in 4.091 seconds using v1.01-cache-2.11-cpan-c221a9de4ec )