GBrowse
view release on metacpan or search on metacpan
lib/Bio/Graphics/Browser2/Render/Slave/AWS_Balancer.pm view on Meta::CPAN
sub internal_ip {
my $self = shift;
return unless $self->running_as_instance;
return $self->{instance_metadata}->privateIpAddress;
}
sub master_security_group {
my $self = shift;
return unless $self->running_as_instance;
my $sg = ($self->{instance_metadata}->securityGroups)[0];
$sg =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
return $sg;
}
sub master_ip {
my $self = shift;
my $ip = $self->option('MASTER','external_ip');
$ip ||= $self->_get_external_ip;
return $ip;
}
# poll interval in seconds
sub master_poll {
my $self = shift;
my $pi = $self->option('MASTER','poll_interval');
return $pi * 60;
}
sub master_server_status_url {
my $self = shift;
return $self->option('MASTER','server_status_url')
|| 'http://localhost/server-status';
}
sub running_as_instance {
my $self = shift;
return -e '/var/lib/cloud/data/previous-instance-id'
&& head('http://169.254.169.254');
}
# update conf file with new snapshot images
sub update_data_snapshots {
my $self = shift;
my @snapshot_ids = @_;
my $timestamp = 'synchronized with local filesystem on '.localtime;
my $conf_file = $self->conf_file;
my ($user,$group) = (stat($conf_file))[4,5];
open my $in,'<',$conf_file or die "Couldn't open $conf_file: $!";
open my $out,'>',"$conf_file.new" or die "Couldn't open $conf_file: $!";
while (<$in>) {
chomp;
s/^(data_snapshots\s*=).*/$1 @snapshot_ids # $timestamp/;
print $out "$_\n";
}
close $in;
close $out;
rename "$conf_file","$conf_file.bak" or die "Can't rename $conf_file: $!";
rename "$conf_file.new","$conf_file" or die "Can't rename $conf_file.new: $!";
chown $user,$group,$conf_file;
}
#######################
# status
######################
# return true if slave is listening on at least one of the designated ports
sub ping_slave {
my $self = shift;
my $instance = shift;
my $ip = $self->running_as_instance?$instance->privateIpAddress:$instance->ipAddress;
my ($port) = $self->slave_ports;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(HEAD => "http://$ip:$port");
my $res = $ua->request($req);
return $res->code == 403;
}
# returns list of slave instances as VM::EC2::Instance objects
sub running_slaves {
my $self = shift;
$self->{running_slaves} ||= {};
return values %{$self->{running_slaves}};
}
sub add_slave {
my $self = shift;
my $instance = shift;
$self->{running_slaves}{$instance}=$instance;
}
sub remove_slave {
my $self = shift;
my $instance = shift;
delete $self->{running_slaves}{$instance};
}
# given an instance ID, returns the slave VM::EC2::Instance object
sub id2slave {
my $self = shift;
my $id = shift;
return $self->{running_slaves}{$id};
}
# spot requests - only tracks pending requests
sub pending_spot_requests {
my $self = shift;
$self->{pending_requests} ||= {};
return values %{$self->{pending_requests}};
}
sub add_spot_request {
my $self = shift;
my $sr = shift;
$self->{pending_requests}{$sr} = $sr;
}
sub remove_spot_request {
my $self = shift;
my $sr = shift;
( run in 0.336 second using v1.01-cache-2.11-cpan-71847e10f99 )