change to use Virtual table for Poller Performance report

This commit is contained in:
Oliver Gorwits
2013-11-03 11:41:02 +00:00
parent 42e5568370
commit 4c2b0f93dc
3 changed files with 48 additions and 25 deletions

View File

@@ -0,0 +1,42 @@
package App::Netdisco::DB::Result::Virtual::PollerPerformance;
use strict;
use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->table_class('DBIx::Class::ResultSource::View');
__PACKAGE__->table('poller_performance');
__PACKAGE__->result_source_instance->is_virtual(1);
__PACKAGE__->result_source_instance->view_definition(<<ENDSQL
SELECT action, entered, to_char( entered, 'YYYY - MM - DD HH24:MI:SS' ) AS entered_stamp,
COUNT( device ) AS number, MIN( started ) AS start, MAX( finished ) AS end,
justify_interval( extract ( epoch FROM( max( finished ) - min( started ) ) ) * interval '1 second' ) AS elapsed
FROM admin
WHERE action IN ( 'discover', 'macsuck', 'arpnip' )
GROUP BY action, entered
HAVING count( device ) > 1
ORDER BY elapsed DESC, entered DESC
LIMIT 15
ENDSQL
);
__PACKAGE__->add_columns(
"action",
{ data_type => "text", is_nullable => 1 },
"entered",
{ data_type => "timestamp", is_nullable => 1 },
"entered_stamp",
{ data_type => "text", is_nullable => 1 },
"number",
{ data_type => "integer", is_nullable => 1 },
"start",
{ data_type => "timestamp", is_nullable => 1 },
"end",
{ data_type => "timestamp", is_nullable => 1 },
"elapsed",
{ data_type => "interval", is_nullable => 1 },
);
1;

View File

@@ -13,26 +13,7 @@ register_admin_task({
});
ajax '/ajax/content/admin/performance' => require_role admin => sub {
my $set = schema('netdisco')->resultset('Admin')
->search({
action => { -in => [qw/discover macsuck arpnip/] },
}, {
columns => [
'action', 'entered',
{ entered_stamp => \"to_char(entered, 'YYYY-MM-DD HH24:MI:SS')" },
],
select => [
{ count => 'device', -as => 'number' },
{ min => 'started', -as => 'start' },
{ max => 'finished', -as => 'end' },
\"justify_interval(extract(epoch from (max(finished) - min(started))) * interval '1 second') AS elapsed",
],
as => [qw/ number start end elapsed /],
group_by => [qw/ action entered /],
having => \'count(device) > 1',
order_by => { -desc => [qw/ entered elapsed /] },
rows => 50,
});
my $set = schema('netdisco')->resultset('Virtual::PollerPerformance');
content_type('text/html');
template 'ajax/admintask/performance.tt', {