package Consul::Check;
$Consul::Check::VERSION = '0.027';
use namespace::autoclean;
use Moo::Role;
use Types::Standard qw(Str HashRef Enum);
use Carp qw(croak);
my $status_type = Enum['passing', 'warning', 'critical'];
has name => ( is => 'ro', isa => Str, required => 1 );
has id => ( is => 'ro', isa => Str );
has notes => ( is => 'ro', isa => Str );
has service_id => ( is => 'ro', isa => Str );
has status => ( is => 'ro', isa => $status_type );
has deregister_critical_service_after =>
( is => 'ro', isa => Str );
sub smart_new {
my $role = shift;
my $args = Moo::Object->BUILDARGS( @_ );
if (defined $args->{script}) {
return Consul::Check::Script->new( $args );
}
elsif (defined $args->{ttl}) {
return Consul::Check::TTL->new( $args );
}
elsif (defined $args->{http}) {
return Consul::Check::HTTP->new( $args );
}
elsif (defined $args->{tcp}) {
return Consul::Check::TCP->new( $args );
}
elsif (defined $args->{docker_container_id}) {
return Consul::Check::Docker->new( $args );
}
croak 'Cannot create Check object because neither script, ttl, http, tcp, or docker_container_id are set';
}
sub _to_json_hash { %{shift->_json_hash} }
has _json_hash => ( is => 'lazy', isa => HashRef[Str] );
sub _build__json_hash {
my ($self) = @_;
{
Name => $self->name,
defined $self->id ? ( ID => $self->id ) : (),
defined $self->notes ? ( Notes => $self->notes ) : (),
defined $self->service_id ? ( ServiceID => $self->service_id ) : (),
defined $self->status ? ( Status => $self->status ) : (),
defined $self->deregister_critical_service_after ? (
DeregisterCriticalServiceAfter => $self->deregister_critical_service_after
) : (),
};
}
package Consul::Check::Script;
$Consul::Check::Script::VERSION = '0.027';
use Moo;
use Types::Standard qw(Str);
use JSON::MaybeXS;
has script => ( is => 'ro', isa => Str, required => 1 );
has interval => ( is => 'ro', isa => Str, required => 1 );
sub to_json { shift->_json }
has _json => ( is => 'lazy', isa => Str );
sub _build__json {
my ($self) = @_;
encode_json({
$self->_to_json_hash,
Script => $self->script,
Interval => $self->interval,
});
}
with qw(Consul::Check);
package Consul::Check::TTL;
$Consul::Check::TTL::VERSION = '0.027';
use Moo;
use Types::Standard qw(Str);
use JSON::MaybeXS;
has ttl => ( is => 'ro', isa => Str, required => 1 );
sub to_json { shift->_json }
has _json => ( is => 'lazy', isa => Str );
sub _build__json {
my ($self) = @_;
encode_json({
$self->_to_json_hash,
TTL => $self->ttl,
});
}
with qw(Consul::Check);
package Consul::Check::HTTP;
$Consul::Check::HTTP::VERSION = '0.027';
use Moo;
use Types::Standard qw(Str Bool);
use JSON::MaybeXS;
has http => ( is => 'ro', isa => Str, required => 1 );
has interval => ( is => 'ro', isa => Str, required => 1 );
has tls_skip_verify => ( is => 'ro', isa => Bool );
sub to_json { shift->_json }
has _json => ( is => 'lazy', isa => Str );
sub _build__json {
my ($self) = @_;
encode_json({
$self->_to_json_hash,
HTTP => $self->http,
Interval => $self->interval,
defined $self->tls_skip_verify ? (
TLSSkipVerify =>
$self->tls_skip_verify ? \1 : \0
) : (),
});
}
package Consul::Check::TCP;
$Consul::Check::TCP::VERSION = '0.027';
use Moo;
use Types::Standard qw(Str);
use JSON::MaybeXS;
has tcp => ( is => 'ro', isa => Str, required => 1 );
has interval => ( is => 'ro', isa => Str, required => 1 );
sub to_json { shift->_json }
has _json => ( is => 'lazy', isa => Str );
sub _build__json {
my ($self) = @_;
encode_json({
$self->_to_json_hash,
TCP => $self->tcp,
Interval => $self->interval,
});
}
with qw(Consul::Check);
package Consul::Check::Docker;
$Consul::Check::Docker::VERSION = '0.027';
use Moo;
use Types::Standard qw(Str);
use JSON::MaybeXS;
has docker_container_id => ( is => 'ro', isa => Str, required => 1 );
has interval => ( is => 'ro', isa => Str, required => 1 );
has shell => ( is => 'ro', isa => Str, required => 1 );
sub to_json { shift->_json }
has _json => ( is => 'lazy', isa => Str );
sub _build__json {
my ($self) = @_;
encode_json({
$self->_to_json_hash,
DockerContainerID => $self->docker_container_id,
Interval => $self->interval,
Shell => $self->shell,
});
}
with qw(Consul::Check);
1;