<% use strict; use vars qw( $cgi $p ); use CGI; use CGI::Carp qw(fatalsToBrowser); use Date::Format; use FS::UID qw(cgisuidsetup); use FS::Record qw(qsearch); # qsearchs); use FS::CGI qw(header menubar table popurl); use FS::nas; use FS::port; use FS::session; $cgi = new CGI; &cgisuidsetup($cgi); $p=popurl(2); print $cgi->header( @FS::CGI::header ), header('NAS ports', menubar( 'Main Menu' => $p, )); my $now = time; foreach my $nas ( sort { $a->nasnum <=> $b->nasnum } qsearch( 'nas', {} ) ) { print $nas->nasnum. ": ". $nas->nas. " ". $nas->nasfqdn. " (". $nas->nasip. ") ". "as of ". time2str("%c",$nas->last). " (". &pretty_interval($now - $nas->last). " ago)
". &table(). "Nas
Port #Global
Port #
". "IP addressUserSinceDuration", ; foreach my $port ( sort { $a->nasport <=> $b->nasport || $a->portnum <=> $b->portnum } qsearch( 'port', { 'nasnum' => $nas->nasnum } ) ) { my $session = $port->session; my($user, $since, $pretty_since, $duration); if ( ! $session ) { $user = "(empty)"; $since = 0; $pretty_since = "(never)"; $duration = ''; } elsif ( $session->logout ) { $user = "(empty)"; $since = $session->logout; } else { my $svc_acct = $session->svc_acct; $user = "svcnum. "\">". $svc_acct->username. ""; $since = $session->login; } $pretty_since = time2str("%c", $since) if $since; $duration = pretty_interval( $now - $since ). " ago" unless defined($duration); print "". $port->nasport. "". $port->portnum. "". $port->ip. "$user$pretty_since". "$duration" ; } print "
"; } sub pretty_interval { my $interval = shift; my %howlong = ( '604800' => 'week', '86400' => 'day', '3600' => 'hour', '60' => 'minute', '1' => 'second', ); my $pretty = ""; foreach my $key ( sort { $b <=> $a } keys %howlong ) { my $value = int( $interval / $key ); if ( $value ) { if ( $value == 1 ) { $pretty .= ( $howlong{$key} eq 'hour' ? 'an ' : 'a ' ). $howlong{$key}. " " } else { $pretty .= $value. ' '. $howlong{$key}. 's '; } } $interval -= $value * $key; } $pretty =~ /^\s*(\S.*\S)\s*$/; $1; } #print &table(), < # # # NAS