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 )