#!perl
use Test::More;
use_ok('Monitoring::Livestatus::Class::Abstract::Stats');
my $now = time();
my $min1 = $now - 60;
my $min5 = $now - 300;
my $min15 = $now - 900;
my @testings = (
{ name => 'localhost' }, ["Stats: name = localhost"],
[
{ state => [0,1,2,3] },
{ '-groupby' => 'host_name'}
],[
"Stats: state = 0",
"Stats: state = 1",
"Stats: state = 2",
"Stats: state = 3",
"StatsGroupBy: host_name",
],
[
'active_sum' => { -isa => { 'check_type' => 0 }},
'active_1_min_sum' => { -isa => { -and => [
'check_type' => 0,
'has_been_checked' => 1,
'last_check' => { '>=' => $min1 }
]}},
'active_5_min_sum' => { -isa => { -and => [ 'check_type' => 0, 'has_been_checked' => 1, 'last_check' => { '>=' => $min5 }]}},
'active_15_min_sum' => { -isa => { -and => [ 'check_type' => 0, 'has_been_checked' => 1, 'last_check' => { '>=' => $min15 }]}},
'latency_avg' => { -isa => { -and => [ 'check_type' => 0, 'has_been_checked' => 1, { -avg => 'latency' } ]}},
],
[
"Stats: check_type = 0 as active_sum",
"Stats: check_type = 0",
"Stats: has_been_checked = 1",
"Stats: last_check >= $min1",
"StatsAnd: 3 as active_1_min_sum",
"Stats: check_type = 0",
"Stats: has_been_checked = 1",
"Stats: last_check >= $min5",
"StatsAnd: 3 as active_5_min_sum",
"Stats: check_type = 0",
"Stats: has_been_checked = 1",
"Stats: last_check >= $min15",
"StatsAnd: 3 as active_15_min_sum",
"Stats: check_type = 0",
"Stats: has_been_checked = 1",
"Stats: avg latency",
"StatsAnd: 3 as latency_avg",
],
[
'active_1_min_sum' => { -isa => { -or => [
'check_type' => 0,
'has_been_checked' => 1,
'last_check' => { '>=' => $min1 }
]}},
],[
"Stats: check_type = 0",
"Stats: has_been_checked = 1",
"Stats: last_check >= $min1",
"StatsOr: 3 as active_1_min_sum",
],[
'active_1_min_sum' => { -isa => { -and => [
'check_type' => 0,
'has_been_checked' => 1,
'last_check' => { '>=' => $min1 }
]}},
],[
"Stats: check_type = 0",
"Stats: has_been_checked = 1",
"Stats: last_check >= $min1",
"StatsAnd: 3 as active_1_min_sum",
],
[
'active_1_min_sum' => { -isa => [
'check_type' => 0,
'has_been_checked' => 1,
'last_check' => { '>=' => $min1 }
]},
],[
"Stats: check_type = 0",
"Stats: has_been_checked = 1",
"Stats: last_check >= $min1 as active_1_min_sum",
]
);
for ( my $i = 0 ; $i < scalar @testings ; $i++ ) {
my $search = $testings[$i];
my $expected_statment = $testings[ ++$i ];
my $filter_obj = Monitoring::Livestatus::Class::Abstract::Stats->new();
my $got_statment;
eval {
$got_statment = $filter_obj->apply($search);
} or warn @_;
is_deeply( $got_statment, $expected_statment,
sprintf( "Test %d - %s", ( $i / 2 ) + 1 , join " ",@{ $expected_statment } ));
}
done_testing;