package App::MadEye::Plugin::Agent::DJabberd; use strict; use warnings; use App::MadEye::Plugin::Agent::Base; use Socket qw(IPPROTO_TCP TCP_NODELAY SOL_SOCKET SOCK_STREAM); use IO::Socket::INET; use IO::Select; sub is_dead { my ($self, $host) = @_; my $conf = $self->config->{config}; my $admin_port = $conf->{admin_port} or die "missing admin port"; my $open_socket_timeout = $conf->{open_socket_timeout} || 10; my $select_timeout = $conf->{select_timeout} || 3; my $sock = IO::Socket::INET->new( PeerAddr => $host, PeerPort => $admin_port, Timeout => $open_socket_timeout, ); unless ($sock) { return "Cannot open Socket to $host:$admin_port : $!"; } $sock->blocking(0); $sock->setsockopt( IPPROTO_TCP, TCP_NODELAY, pack( "l", 1 ) ) or die; $sock->autoflush(1); $sock->print("version\r\n"); my $select = IO::Select->new; $select->add($sock); my ( $can_read, ) = $select->can_read($select_timeout); unless ($can_read) { $sock->close; return "connection timeout : $host"; } my $line = <$sock>; $sock->close(); if ( $line =~ /\d+\.\d+/ ) { return; } else { return "djabberd response is invaild : $line"; } } 1; __END__ =for stopwords DJabberd =head1 NAME App::MadEye::Plugin::Agent::DJabberd - monitoring DJabberd =head1 SYNOPSIS - module: Agent::DJabberd config: admin_port: 1000 open_socket_timeout: 10 select_timeout: 3 =head1 SCHEMA type: map mapping: target: type: seq required: yes sequence: - type: str admin_port: required: yes type: int open_socket_timeout: required: no type: int select_timeout: required: no type: int =head1 SEE ALSO L, L