#31 Configurable Free Time in Port Utilization Report

This commit is contained in:
Oliver Gorwits
2018-03-10 10:45:39 +00:00
parent dd44877059
commit 66e3d2d64e
6 changed files with 38 additions and 6 deletions

View File

@@ -4,6 +4,7 @@
* Node Montior is now included in Admin menu
* #48 Node Monitor supports matching on OUI
* #31 Configurable Free Time in Port Utilization Report
2.039015 - 2018-03-05

View File

@@ -11,10 +11,15 @@ __PACKAGE__->table('port_utilization');
__PACKAGE__->result_source_instance->is_virtual(1);
__PACKAGE__->result_source_instance->view_definition(<<ENDSQL
SELECT d.dns AS dns, d.ip as ip,
sum(CASE WHEN (dp.type != 'propVirtual') THEN 1 ELSE 0 END) as port_count,
sum(CASE WHEN (dp.type != 'propVirtual' AND dp.up_admin = 'up' AND dp.up = 'up') THEN 1 ELSE 0 END) as ports_in_use,
sum(CASE WHEN (dp.type != 'propVirtual' AND dp.up_admin != 'up') THEN 1 ELSE 0 END) as ports_shutdown,
sum(CASE WHEN (dp.type != 'propVirtual' AND dp.up_admin = 'up' AND dp.up != 'up') THEN 1 ELSE 0 END) as ports_free
sum(CASE WHEN (dp.type != 'propVirtual') THEN 1
ELSE 0 END) as port_count,
sum(CASE WHEN (dp.type != 'propVirtual' AND dp.up_admin = 'up' AND dp.up = 'up') THEN 1
ELSE 0 END) as ports_in_use,
sum(CASE WHEN (dp.type != 'propVirtual' AND dp.up_admin != 'up') THEN 1
ELSE 0 END) as ports_shutdown,
sum(CASE WHEN (dp.type != 'propVirtual' AND dp.up_admin = 'up' AND dp.up != 'up'
AND ( age(now(), to_timestamp(extract(epoch from d.last_discover) - (d.uptime - dp.lastchange)/100)) > ?::interval )) THEN 1
ELSE 0 END) as ports_free
FROM device d LEFT JOIN device_port dp
ON d.ip = dp.ip
GROUP BY d.dns, d.ip

View File

@@ -16,7 +16,11 @@ register_report(
get '/ajax/content/report/portutilization' => require_login sub {
return unless schema('netdisco')->resultset('Device')->count;
my @results = schema('netdisco')->resultset('Virtual::PortUtilization')->hri->all;
my $age_num = param('age_num') || 3;
my $age_unit = param('age_unit') || 'months';
my @results = schema('netdisco')->resultset('Virtual::PortUtilization')
->search(undef, { bind => [ "$age_num $age_unit" ] })->hri->all;
if (request->is_ajax) {
my $json = to_json (\@results);

View File

@@ -144,6 +144,9 @@ sidebar_defaults:
report_moduleinventory:
fruonly: { default: checked }
matchall: { default: checked }
report_portutilization:
age_num: { default: 3 }
age_unit: { default: months }
device_port_col_idx_left: 0
device_port_col_idx_mid: 2
device_port_col_idx_right: -1

View File

@@ -112,7 +112,7 @@
<li>
<em class="muted">Mark as Free if Down for:</em><br/>
<select id="nd_days-select" name="age_num">
[% FOREACH count IN [1..32] %]
[% FOREACH count IN [1..31] %]
<option[% ' selected="selected"' IF vars.sidebar_defaults.device_ports.age_num == count %]>[% count %]</option>
[% END %]
</select>

View File

@@ -0,0 +1,19 @@
<p class="nd_sidebar-title"><em>Port Utilization</em></p>
<div class="clearfix">
<em class="muted">Mark as Free if Down for:</em><br/>
<select id="nd_days-select" name="age_num">
[% FOREACH count IN [1..31] %]
<option[% ' selected="selected"' IF vars.sidebar_defaults.report_portutilization.age_num == count %]>[% count %]</option>
[% END %]
</select>
<select id="nd_age-select" name="age_unit">
[% FOREACH unit IN [ 'days', 'weeks', 'months', 'years' ] %]
<option[% ' selected="selected"' IF vars.sidebar_defaults.report_portutilization.age_unit == unit %]>[% unit %]</option>
[% END %]
</select>
</div>
<button id="[% report.tag %]_submit" type="submit" class="btn btn-info">
<i class="icon-search icon-large pull-left nd_navbar-icon"></i> Run Report</button>