Consul
view release on metacpan or search on metacpan
lib/Consul.pm view on Meta::CPAN
sub _build_error_cb {
sub {
croak shift;
}
}
sub _api_exec {
my $resp_cb = $#_ % 2 == 1 && ref $_[$#_] eq 'CODE' ? pop @_ : sub { pop @_ };
my ($self, $path, $method, %args) = @_;
my @r;
my $cli_cb = delete $args{cb} || sub { @r = @_ };
my $error_cb = delete $args{error_cb} || $self->error_cb;
$self->request_cb->($self, $self->_prep_request($path, $method, %args, sub {
my ($resp) = @_;
my $valid_cb = $args{_valid_cb} || sub { int($resp->status/100) == 2 };
unless ($valid_cb->($resp->status)) {
my $content = $resp->content || "[no content]";
$error_cb->(sprintf("%s %s: %s", $resp->status, $resp->reason, $content));
return;
}
my ($data, $meta) = $self->_prep_response(@_);
$cli_cb->($resp_cb->($data), $meta);
}));
return wantarray ? @r : shift @r;
};
with qw(
Consul::API::ACL
Consul::API::Agent
Consul::API::Catalog
Consul::API::Event
Consul::API::Health
Consul::API::KV
Consul::API::Session
Consul::API::Status
);
use Consul::Check;
use Consul::Service;
use Consul::Session;
package
Consul::Request; # hide from PAUSE
use Moo;
use Types::Standard qw(Str CodeRef HashRef);
use Type::Utils qw(class_type);
has method => ( is => 'ro', isa => Str, required => 1 );
has url => ( is => 'ro', isa => Str, required => 1 );
has headers => ( is => 'ro', isa => class_type('Hash::MultiValue'), required => 1 );
has content => ( is => 'ro', isa => Str, required => 1 );
has callback => ( is => 'ro', isa => CodeRef, required => 1 );
has args => ( is => 'ro', isa => HashRef, required => 1 );
package
Consul::Response; # hide from PAUSE
use Moo;
use Types::Standard qw(Str Int);
use Type::Utils qw(class_type);
has status => ( is => 'ro', isa => Int, required => 1 );
has reason => ( is => 'ro', isa => Str, required => 1 );
has headers => ( is => 'ro', isa => class_type('Hash::MultiValue'), default => sub { Hash::MultiValue->new } );
has content => ( is => 'ro', isa => Str, default => sub { "" } );
has request => ( is => 'ro', isa => class_type('Consul::Request'), required => 1 );
package
Consul::Meta; # hide from PAUSE
use Moo;
use Types::Standard qw(Int Bool);
has index => ( is => 'ro', isa => Int, init_arg => 'x-consul-index', required => 1 );
has last_contact => ( is => 'ro', isa => Int, init_arg => 'x-consul-lastcontact' );
has known_leader => ( is => 'ro', isa => Bool, init_arg => 'x-consul-knownleader', coerce => sub { my $r = { true => 1, false => 0 }->{$_[0]}; defined $r ? $r : $_[0] } );
1;
=pod
=encoding UTF-8
=for markdown [](http://travis-ci.org/robn/Consul)
=head1 NAME
Consul - Client library for consul
=head1 SYNOPSIS
use Consul;
my $consul = Consul->new;
say $consul->status->leader;
# shortcut to single API
my $status = Consul->status;
say $status->leader;
=head1 DESCRIPTION
This is a client library for accessing and manipulating data in a Consul
cluster. It targets the Consul v1 HTTP API.
This module is quite low-level. You're expected to have a good understanding of
Consul and its API to understand the methods this module provides. See L</SEE ALSO>
for further reading.
=head1 WARNING
( run in 2.462 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )