diff --git a/Netdisco/Changes b/Netdisco/Changes index 2393576b..f9f84d84 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -3,6 +3,7 @@ [NEW FEATURES] * [#4] Allow comment on device port in the log, for any user + * [#18] Inventory by Model by OS Report [ENHANCEMENTS] diff --git a/Netdisco/MANIFEST b/Netdisco/MANIFEST index 0c59f914..e64b6c38 100644 --- a/Netdisco/MANIFEST +++ b/Netdisco/MANIFEST @@ -201,6 +201,7 @@ lib/App/Netdisco/Web/Plugin/Report/DeviceDnsMismatch.pm lib/App/Netdisco/Web/Plugin/Report/DevicePoeStatus.pm lib/App/Netdisco/Web/Plugin/Report/DuplexMismatch.pm lib/App/Netdisco/Web/Plugin/Report/HalfDuplex.pm +lib/App/Netdisco/Web/Plugin/Report/InventoryByModelByOS.pm lib/App/Netdisco/Web/Plugin/Report/IpInventory.pm lib/App/Netdisco/Web/Plugin/Report/ModuleInventory.pm lib/App/Netdisco/Web/Plugin/Report/Netbios.pm @@ -341,6 +342,7 @@ share/views/ajax/report/generic_report.tt share/views/ajax/report/generic_report_csv.tt share/views/ajax/report/halfduplex.tt share/views/ajax/report/halfduplex_csv.tt +share/views/ajax/report/inventorybymodelbyos.tt share/views/ajax/report/ipinventory.tt share/views/ajax/report/ipinventory_csv.tt share/views/ajax/report/moduleinventory.tt diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/InventoryByModelByOS.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/InventoryByModelByOS.pm new file mode 100644 index 00000000..b5015647 --- /dev/null +++ b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/InventoryByModelByOS.pm @@ -0,0 +1,30 @@ +package App::Netdisco::Web::Plugin::Report::InventoryByModelByOS; + +use Dancer ':syntax'; +use Dancer::Plugin::DBIC; +use Dancer::Plugin::Auth::Extensible; + +use App::Netdisco::Web::Plugin; + +register_report( + { category => 'Device', + tag => 'inventorybymodelbyos', + label => 'Inventory by Model by OS', + provides_csv => 0, + } +); + +get '/ajax/content/report/inventorybymodelbyos' => require_login sub { + my @results = schema('netdisco')->resultset('Device')->search(undef, { + columns => [qw/vendor model os os_ver/], + select => [ { count => 'os_ver' } ], + as => [qw/ os_ver_count /], + group_by => [qw/ vendor model os os_ver /], + order_by => ['vendor', 'model', { -desc => 'count' }, 'os_ver'], + })->hri->all; + + template 'ajax/report/inventorybymodelbyos.tt', { results => \@results, }, + { layout => undef }; +}; + +1; diff --git a/Netdisco/share/config.yml b/Netdisco/share/config.yml index fdbf2f5f..91b2ac9b 100644 --- a/Netdisco/share/config.yml +++ b/Netdisco/share/config.yml @@ -46,6 +46,7 @@ web_plugins: - Report::HalfDuplex - Report::DeviceAddrNoDNS - Report::DeviceByLocation + - Report::InventoryByModelByOS - Report::DeviceDnsMismatch - Report::DevicePoeStatus - Report::DuplexMismatch diff --git a/Netdisco/share/views/ajax/report/inventorybymodelbyos.tt b/Netdisco/share/views/ajax/report/inventorybymodelbyos.tt new file mode 100644 index 00000000..925946f6 --- /dev/null +++ b/Netdisco/share/views/ajax/report/inventorybymodelbyos.tt @@ -0,0 +1,71 @@ + + + + + + + + + + [% FOREACH row IN results %] + + + + + + [% END %] + +
ModelOperating System VersionCount
+ + [% row.vendor.ucfirst | html_entity %] [% row.model | html_entity %] + [% IF row.os %] running "[% row.os | html_entity %]"[% END %] + + + [% row.os_ver | html_entity %] + [% row.os_ver_count | html_entity %]
+ + + +