package App::Netdisco::Web::Statistics; use Dancer ':syntax'; use Dancer::Plugin::DBIC; use Dancer::Plugin::Auth::Extensible; get '/ajax/content/statistics' => require_login sub { my $time1 = time; my $schema = schema('netdisco'); my $devices = $schema->resultset('Device'); # used only to get the PostgreSQL version my $users = $schema->resultset('User')->search( {}, { select => [ { version => '' } ], as => [qw/ version /], } ); my $device_count = $devices->count; my $device_port_count = $schema->resultset('DevicePort')->count; my $device_ip_count = $schema->resultset('DeviceIp') ->search( undef, { columns => [qw/ alias /] } )->count; my $nodes = $schema->resultset('Node')->search( {}, { columns => [qw/mac/], distinct => 1 } ); my $node_count = $nodes->count; my $node_table_count = $schema->resultset('Node')->count; my $nodes_ips = $schema->resultset('NodeIp')->search( {}, { columns => [qw/ip/], distinct => 1 } ); my $ip_count = $nodes_ips->count; my $ip_table_count = $schema->resultset('NodeIp')->search( {}, { columns => [qw/ip/] } ) ->count; my $device_links = $schema->resultset('DevicePort') ->search( { 'remote_ip' => { '!=', undef } } )->count; my $schema_version = $schema->get_db_version; my $target_version = $schema->schema_version; my $time2 = time; my $process_time = $time2 - $time1; my $disco_ver = $App::Netdisco::VERSION; my $db_version = $users->next->get_column('version'); my $dbi_ver = $DBI::VERSION; my $dbdpg_ver = $DBD::Pg::VERSION; eval { require SNMP::Info }; my $snmpinfo_ver = ($@ ? 'n/a' : $SNMP::Info::VERSION); var( nav => 'statistics' ); template 'ajax/statistics.tt', { device_count => $device_count, device_ip_count => $device_ip_count, device_links => $device_links, device_port_count => $device_port_count, ip_count => $ip_count, ip_table_count => $ip_table_count, node_count => $node_count, node_table_count => $node_table_count, process_time => $process_time, disco_ver => $disco_ver, db_version => $db_version, dbi_ver => $dbi_ver, dbdpg_ver => $dbdpg_ver, snmpinfo_ver => $snmpinfo_ver, schema_ver => $schema_version, }, { layout => undef }; }; true;