Etcd

 view release on metacpan or  search on metacpan

lib/Etcd.pm  view on Meta::CPAN

=back

=head2 server_version

    my $version = $etcd->server_version;

Queries and returns the server version as a string.

=head1 ENDPOINTS

Individual API endpoints are implemented in separate modules. See the documentation for the following modules for more information:

=over 4

=item *

L<Etcd::Keys> - Key space API

=item *

L<Etcd::Stats> - Stats API

lib/Etcd/Keys.pm  view on Meta::CPAN

use Etcd::Response;
use Try::Tiny;
use Scalar::Util qw(blessed);
use Carp qw(croak);

use Moo::Role;
use Types::Standard qw(Str);

requires qw(version_prefix api_exec);

has _keys_endpoint => ( is => 'lazy', isa => Str );
sub _build__keys_endpoint {
    shift->version_prefix . '/keys';
}

sub set {
    my ($self, $key, $value, %args) = @_;
    croak 'usage: $etcd->set($key, $value, [%args])' if grep { !defined } ($key, $value);
    Etcd::Response->new_from_http($self->api_exec($self->_keys_endpoint.$key, 'PUT', %args, value => $value));
}

sub get {
    my ($self, $key, %args) = @_;
    croak 'usage: $etcd->get($key, [%args])' if !defined $key;
    Etcd::Response->new_from_http($self->api_exec($self->_keys_endpoint.$key, 'GET', %args));
}

sub delete {
    my ($self, $key, %args) = @_;
    croak 'usage: $etcd->delete($key, [%args])' if !defined $key;
    Etcd::Response->new_from_http($self->api_exec($self->_keys_endpoint.$key, 'DELETE', %args));
}

sub compare_and_swap {
    my ($self, $key, $value, $prev_value, %args) = @_;
    croak 'usage: $etcd->compare_and_swap($key, $value, $prev_value, [%args])' if grep { !defined } ($key, $value, $prev_value);
    $self->set($key, $value, %args, prevValue => $prev_value);
}

sub compare_and_delete {
    my ($self, $key, $prev_value, %args) = @_;

lib/Etcd/Keys.pm  view on Meta::CPAN

    catch {
        die $_ unless defined blessed $_ && $_->isa('Etcd::Error');
        die $_ unless $_->error_code == 100;
        "";
    }
}

sub create_dir {
    my ($self, $key, %args) = @_;
    croak 'usage: $etcd->create_dir($key, [%args])' if !defined $key;
    Etcd::Response->new_from_http($self->api_exec($self->_keys_endpoint.$key, 'PUT', %args, dir => 'true'));
}

sub delete_dir {
    my ($self, $key, %args) = @_;
    croak 'usage: $etcd->delete_dir($key, [%args])' if !defined $key;
    $self->delete($key, %args, dir => 'true');
}

sub create_in_order {
    my ($self, $key, $value, %args) = @_;
    croak 'usage: $etcd->create_in_order($key, $value, [%args])' if grep { !defined } ($key, $value);
    Etcd::Response->new_from_http($self->api_exec($self->_keys_endpoint.$key, 'POST', %args, value => $value));
}

sub watch {
    my ($self, $key, %args) = @_;
    croak 'usage: $etcd->watch($key, [%args])' if !defined $key;
    $self->get($key, %args, wait => 'true');
}

1;

lib/Etcd/Stats.pm  view on Meta::CPAN

use namespace::autoclean;

use JSON qw(decode_json);
use Carp qw(croak);

use Moo::Role;
use Types::Standard qw(Str);

requires qw(version_prefix api_exec);

has _stats_endpoint => ( is => 'lazy', isa => Str );
sub _build__stats_endpoint {
    shift->version_prefix . '/stats';
}

# XXX should return real objects
sub stats {
    my ($self, $type, %args) = @_;
    croak 'usage: $etcd->type("leader|store|self", [%args])' if !defined $type || $type !~ m/^(?:leader|store|self)$/;
    decode_json($self->api_exec($self->_stats_endpoint."/$type", 'GET', %args)->{content});
}

1;

__END__

=pod

=encoding UTF-8



( run in 1.267 second using v1.01-cache-2.11-cpan-2b1a40005be )