Load Balancer ManagerにアクセスするPerl Module
mod_proxy_balancerのLoad Balancer ManagerにアクセスするPerl Moduleなんかも作っていたりするので、簡略版を載せてみる。
my $manager = BalancerManager->new(
manager => 'http://proxy/lbman',
balancer => 'test', # balancer://testの設定
);
$manager->enable('http://foo:8000'); #balancermanagerに登録してあるuri
$manager->disable('http://foo:8000');
enable/disableの戻り値は画面のまんまで、Ok or Dis or Err。
該当しない場合は、「-」になる。
↓Moduleのコード
package BalancerManager;
use strict;
use warnings;
use base qw/Class::Data::Accessor/;
use LWP::UserAgent;
use HTML::TableExtract;
__PACKAGE__->mk_classaccessors( qw/manager ua balancer/ );
sub new {
my $class = shift;
my $self = {
ua => LWP::UserAgent->new,
@_,
};
bless $self, $class;
}
sub enable {
my $self = shift;
my $host = shift;
$self->_run( $host, 'Enable' );
}
sub disable {
my $self = shift;
my $host = shift;
$self->_run( $host, 'Disable' );
}
sub _run {
my $self = shift;
my ( $host, $method ) = @_;
my $manager = URI->new( $self->manager );
$manager->query_form(
dw => $method,
b => $self->balancer,
w => $host,
);
my $response = $self->ua->get($manager);
die $response->status_line unless $response->is_sucess;
my $report = $self->html_parser( $response->content );
return $report->{$host} || '-';
}
sub html_parser {
my ( $self, $html ) = @_;
my %report;
my $balancer = $self->balancer;
if ( $html =~ m!<h3>.*?balancer://$balancer</a></h3>(.*?)<hr />!s ) {
$html = $1;
}
my $te = HTML::TableExtract->new( headers => ['Worker URL','Route','RouteRedir','Factor','Status'] );
$te->parse($html);
my $table = $te->first_table_found;
foreach my $row ( $table->rows ) {
my $url = $row->[0];
my $status = $row->[4];
$url =~ s!<[^>]+?>!!gi;
$report{$url} = $status;
}
return \%report;
}
1;