add vlan inventory report
This commit is contained in:
		| @@ -69,6 +69,17 @@ __PACKAGE__->has_many( port_vlans_native => 'App::Netdisco::DB::Result::Virtual: | ||||
|     { cascade_copy => 0, cascade_update => 0, cascade_delete => 0 } | ||||
| ); | ||||
|  | ||||
| =head2 ports | ||||
|  | ||||
| Link relationship to support C<ports>. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| __PACKAGE__->has_many( ports => 'App::Netdisco::DB::Result::DevicePortVlan', | ||||
|     { 'foreign.ip' => 'self.ip', 'foreign.vlan' => 'self.vlan' }, | ||||
|     { cascade_copy => 0, cascade_update => 0, cascade_delete => 0 } | ||||
| ); | ||||
|  | ||||
| =head2 tagging_ports | ||||
|  | ||||
| Returns the set of Device Ports on which this VLAN is configured to be tagged. | ||||
|   | ||||
							
								
								
									
										44
									
								
								Netdisco/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								Netdisco/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| package App::Netdisco::Web::Plugin::Report::VlanInventory; | ||||
|  | ||||
| use Dancer ':syntax'; | ||||
| use Dancer::Plugin::DBIC; | ||||
| use Dancer::Plugin::Auth::Extensible; | ||||
|  | ||||
| use App::Netdisco::Web::Plugin; | ||||
|  | ||||
| register_report( | ||||
|     {   category     => 'VLAN', | ||||
|         tag          => 'vlaninventory', | ||||
|         label        => 'VLAN Inventory', | ||||
|         provides_csv => 1, | ||||
|     } | ||||
| ); | ||||
|  | ||||
| get '/ajax/content/report/vlaninventory' => require_login sub { | ||||
|     my $set = schema('netdisco')->resultset('DeviceVlan')->search( | ||||
|         { 'vlan.description' => { '!=', 'NULL' } }, | ||||
|         {   join   => { 'ports' => 'vlan' }, | ||||
|             select => [ | ||||
|                 'vlan.vlan', | ||||
|                 'vlan.description', | ||||
|                 { count => { distinct => 'ports.ip' } }, | ||||
|                 { count => 'ports.vlan' } | ||||
|             ], | ||||
|             as       => [qw/ vlan description dcount pcount /], | ||||
|             group_by => [qw/ vlan.vlan vlan.description /], | ||||
|         } | ||||
|     ); | ||||
|     return unless $set->count; | ||||
|  | ||||
|     if ( request->is_ajax ) { | ||||
|         template 'ajax/report/vlaninventory.tt', { results => $set, }, | ||||
|             { layout => undef }; | ||||
|     } | ||||
|     else { | ||||
|         header( 'Content-Type' => 'text/comma-separated-values' ); | ||||
|         template 'ajax/report/vlaninventory_csv.tt', { results => $set, }, | ||||
|             { layout => undef }; | ||||
|     } | ||||
| }; | ||||
|  | ||||
| true; | ||||
		Reference in New Issue
	
	Block a user