69 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| package App::Netdisco::DB::Result::Virtual::NodesDiscovered;
 | |
| 
 | |
| use strict;
 | |
| use warnings;
 | |
| 
 | |
| use base 'DBIx::Class::Core';
 | |
| 
 | |
| __PACKAGE__->table_class('DBIx::Class::ResultSource::View');
 | |
| 
 | |
| __PACKAGE__->table('nodes_discovered');
 | |
| __PACKAGE__->result_source_instance->is_virtual(1);
 | |
| __PACKAGE__->result_source_instance->view_definition(<<ENDSQL
 | |
| SELECT d.ip,
 | |
|        d.dns,
 | |
|        d.name,
 | |
|        p.port,
 | |
|        p.remote_ip,
 | |
|        p.remote_port,
 | |
|        p.remote_type,
 | |
|        p.remote_id
 | |
| FROM device_port p,
 | |
|      device d
 | |
| WHERE d.ip = p.ip
 | |
|   AND NOT EXISTS
 | |
|     (SELECT 1
 | |
|      FROM device_port q
 | |
|      WHERE q.ip = p.remote_ip
 | |
|        AND q.port = p.remote_port)
 | |
|   AND NOT EXISTS
 | |
|     (SELECT 1
 | |
|      FROM device_ip a,
 | |
|           device_port q
 | |
|      WHERE a.alias = p.remote_ip
 | |
|        AND q.ip = a.ip
 | |
|        AND q.port = p.remote_port)
 | |
|   AND (p.remote_id IS NOT NULL OR p.remote_type IS NOT NULL)
 | |
|   ORDER BY d.name, p.port
 | |
| ENDSQL
 | |
| );
 | |
| 
 | |
| __PACKAGE__->add_columns(
 | |
|   'ip' => {
 | |
|     data_type => 'inet',
 | |
|   },
 | |
|   'dns' => {
 | |
|     data_type => 'text',
 | |
|   },
 | |
|   'name' => {
 | |
|     data_type => 'text',
 | |
|   },
 | |
|   'port' => {
 | |
|     data_type => 'text',
 | |
|   },
 | |
|   'remote_ip' => {
 | |
|     data_type => 'inet',
 | |
|   },
 | |
|   'remote_port' => {
 | |
|     data_type => 'text',
 | |
|   },
 | |
|   'remote_type' => {
 | |
|     data_type => 'text',
 | |
|   },
 | |
|   'remote_id' => {
 | |
|     data_type => 'text',
 | |
|   },
 | |
| );
 | |
| 
 | |
| 1;
 |