86 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| 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;
 |