Data-AnyXfer

 view release on metacpan or  search on metacpan

lib/Data/AnyXfer/Elastic/ServerDict.pm  view on Meta::CPAN

package Data::AnyXfer::Elastic::ServerDict;

use Modern::Perl;
use Carp;

use Moo;
use MooX::Types::MooseLike::Base qw(:all);

use Data::AnyXfer::Elastic::ServerDefinition ();

=head1 NAME

Data::AnyXfer::Elastic::ServerDict - Logic for server selection and metadata lookup

=head1 SYNOPSIS

    use Data::AnyXfer::Elastic::ServerDict ();

    # Create dictionary from env
    my $dict = Data::AnyXfer::Elastic::ServerDict->from_env;

    # Or manually add server definitions
    my $dict = Data::AnyXfer::Elastic::ServerDict->new;
    $dict->add_server_definition($def);

    # Now lookup information needed for connecting or importing
    # data
    my @nodes = $dict->all_testing_nodes;
    my @nodes = $dict->all_development_nodes;
    my @nodes = $dict->get_silo_nodes('public_data');


=head1 DESCRIPTION

This class provides the metadata and connection info lookup logic for
L<Data::AnyXfer::Elastic> to locate or populate your Elasticsearch instances.

=cut

use constant CURRENT_ENV_VARNAME => 'DATA_ANYXFER_ES_CURRENT_ENV';

has server_definitions => (
  is      => 'ro',
  isa     => ArrayRef[InstanceOf['Data::AnyXfer::Elastic::ServerDefinition']],
  default => sub { return [] },
);

has current_env => (
  is      => 'ro',
  isa     => Maybe[Str],
  default => sub {
    return $ENV{CURRENT_ENV_VARNAME()} || undef;
  },
);


has _stash_outdated => (
  is      => 'rw',
  isa     => Bool,
  default => 0,
);

has _lookup_cache => (



( run in 1.667 second using v1.01-cache-2.11-cpan-437f7b0c052 )