Skip to content

Instantly share code, notes, and snippets.

@isutton
Created December 22, 2015 22:13
Show Gist options
  • Save isutton/44f0922e5d48c77542c2 to your computer and use it in GitHub Desktop.
Save isutton/44f0922e5d48c77542c2 to your computer and use it in GitHub Desktop.
package Server;
sub process {
my ( $check_name ) = @_;
my $reactor = Reactor->new;
my $callback = $server->callback_for( 'my_check' );
# Callback popula $reactor através da interface estipulada.
$callback->( $reactor );
# Faz o que tiver que fazer com o $reactor
}
# start() começa a escutar onde tu quer que ele escute: provavelmente
# é o treco que interage com Nagios. Em cada requisição do Nagios por
# um check, executa a função determinada pelo nome do check, e passa
# uma instância de Reactor (na verdade, qualquer coisa que implemente
# os métodos definidos pela interface do Reactor.
sub start {}
package Reactor;
sub warning {}
sub success {}
sub critical {}
sub metric {}
package MyAppCheck;
sub my_check {
my ( $reactor ) = @_;
# Nunca olhamos para o tipo do $reactor, apenas temos que assumir
# que implementa a interface necessária.
$reactor->critical( "Oh noes!" );
$reactor->metric({ foo => 'bar' });
}
package main;
# Server é fornecido pela API
my $server = Server->new;
$server->register( my_check => \&MyAppCheck::my_check );
$server->run;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment