package Ping::Action::AddPing;
use strict;
use Jifty::Param::Schema;
use Jifty::Action schema {
param host =>
label is 'Hostname',
is mandatory;
param only_failure =>
type is 'checkbox',
label is 'Failure only?',
hints is 'Show only failed pings to me.',
default is 0;
};
sub take_action {
my $self = shift;
my $host = $self->argument_value('host');
my $only_failure = $self->argument_value('only_failure');
Jifty->bus->modify(hosts => sub {
$_->{$host} ||= do {
if (my $pid = fork) {
$pid;
}
else {
exec($^X => "-Ilib", "-MPing::PingServer", "-e", "Ping::PingServer->ping('$host')");
}
}
});
my $id = Jifty->web->session->id;
Jifty->bus->modify("$id-ping" => sub {
my $sid = $_->{$host};
Jifty->subs->cancel($sid) if $sid;
$_->{$host} = Jifty->subs->add(
class => 'Pong',
queries => [{ host => $host }, $only_failure ? { fail => 1 } : ()],
mode => 'Bottom',
region => 'pong',
render_with => '/fragments/pong',
);
});
$self->result->message( "Added host: $host" );
}
1;