a65235b1e76c123e1b48a9d403fbedc3ab2c589f
[freeside.git] / htdocs / browse / nas.cgi
1 #!/usr/bin/perl -Tw
2
3 use strict;
4 use vars qw( $cgi $p );
5 use CGI;
6 use CGI::Carp qw(fatalsToBrowser);
7 use Date::Format;
8 use FS::UID qw(cgisuidsetup);
9 use FS::Record qw(qsearch); # qsearchs);
10 use FS::CGI qw(header menubar table popurl);
11 use FS::nas;
12 use FS::port;
13 use FS::session;
14
15 $cgi = new CGI;
16 &cgisuidsetup($cgi);
17
18 $p=popurl(2);
19
20 print $cgi->header( '-expires' => 'now' ), header('NAS ports', menubar(
21   'Main Menu' => $p,
22 ));
23
24 my $now = time;
25
26 foreach my $nas ( sort { $a->nasnum <=> $b->nasnum } qsearch( 'nas', {} ) ) {
27   print $nas->nasnum. ": ". $nas->nas. " ".
28         $nas->nasfqdn. " (". $nas->nasip. ") ".
29         "as of ". time2str("%c",$nas->last).
30         " (". &pretty_interval($now - $nas->last). " ago)<br>".
31         &table(). "<TR><TH>Nas<BR>Port #</TH><TH>Global<BR>Port #</BR></TH>".
32         "<TH>IP address</TH><TH>User</TH><TH>Since</TH><TH>Duration</TH><TR>",
33   ;
34   foreach my $port ( sort {
35     $a->nasport <=> $b->nasport || $a->portnum <=> $b->portnum
36   } qsearch( 'port', { 'nasnum' => $nas->nasnum } ) ) {
37     my $session = $port->session;
38     my($user, $since, $pretty_since, $duration);
39     if ( ! $session ) {
40       $user = "(empty)";
41       $since = 0;
42       $pretty_since = "(never)";
43       $duration = '';
44     } elsif ( $session->logout ) {
45       $user = "(empty)";
46       $since = $session->logout;
47     } else {
48       my $svc_acct = $session->svc_acct;
49       $user = "<A HREF=\"$p/view/svc_acct.cgi?". $svc_acct->svcnum. "\">".
50               $svc_acct->username. "</A>";
51       $since = $session->login;
52     }
53     $pretty_since = time2str("%c", $since) if $since;
54     $duration = pretty_interval( $now - $since ). " ago"
55       unless defined($duration);
56     print "<TR><TD>". $port->nasport. "</TD><TD>". $port->portnum. "</TD><TD>".
57           $port->ip. "</TD><TD>$user</TD><TD>$pretty_since".
58           "</TD><TD>$duration</TD></TR>"
59     ;
60   }
61   print "</TABLE><BR>";
62 }
63
64 sub pretty_interval {
65   my $interval = shift;
66   my %howlong = (
67     '604800' => 'week',
68     '86400'  => 'day',
69     '3600'   => 'hour',
70     '60'     => 'minute',
71     '1'      => 'second',
72   );
73
74   my $pretty = "";
75   foreach my $key ( sort { $b <=> $a } keys %howlong ) {
76     my $value = int( $interval / $key );
77     if ( $value  ) {
78       if ( $value == 1 ) {
79         $pretty .=
80           ( $howlong{$key} eq 'hour' ? 'an ' : 'a ' ). $howlong{$key}. " "
81       } else {
82         $pretty .= $value. ' '. $howlong{$key}. 's ';
83       }
84     }
85     $interval -= $value * $key;
86   }
87   $pretty =~ /^\s*(\S.*\S)\s*$/;
88   $1;
89
90
91 #print &table(), <<END;
92 #<TR>
93 #  <TH>#</TH>
94 #  <TH>NAS</