session monitor updates
[freeside.git] / FS / FS / port.pm
index c1bdee9..e96e71c 100644 (file)
@@ -4,6 +4,7 @@ use strict;
 use vars qw( @ISA );
 use FS::Record qw( qsearchs );
 use FS::nas;
+use FS::session;
 
 @ISA = qw(FS::Record);
 
@@ -26,6 +27,8 @@ FS::port - Object methods for port records
 
   $error = $record->check;
 
+  $session = $port->session;
+
 =head1 DESCRIPTION
 
 An FS::port object represents an individual port on a NAS.  FS::port inherits
@@ -113,16 +116,40 @@ sub check {
   ''; #no error
 }
 
+=item session
+
+Returns the currently open session on this port, or if no session is currently
+open, the most recent session.  See L<FS::session>.
+
+=cut
+
+sub session {
+  my $self = shift;
+  qsearchs('session', { 'portnum' => $self->portnum }, '*',
+                     'ORDER BY login DESC LIMIT 1' );
+}
+
 =back
 
 =head1 VERSION
 
-$Id: port.pm,v 1.1 2000-10-27 20:18:32 ivan Exp $
+$Id: port.pm,v 1.3 2000-12-03 20:25:20 ivan Exp $
 
 =head1 BUGS
 
 The author forgot to customize this manpage.
 
+The session method won't deal well if you have multiple open sessions on a
+port, for example if your RADIUS server drops B<stop> records.  Suggestions for
+how to deal with this sort of lossage welcome; should we close the session
+when we get a new session on that port?  Tag it as invalid somehow?  Close it
+one second after it was opened?  *sigh*  Maybe FS::session shouldn't let you
+create overlapping sessions, at least folks will find out their logging is
+dropping records.
+
+If you think the above refers multiple user logins you need to read the
+manpages again.
+
 =head1 SEE ALSO
 
 L<FS::Record>, schema.html from the base documentation.
@@ -135,7 +162,10 @@ added hfields
 ivan@sisd.com 97-nov-13
 
 $Log: port.pm,v $
-Revision 1.1  2000-10-27 20:18:32  ivan
+Revision 1.3  2000-12-03 20:25:20  ivan
+session monitor updates
+
+Revision 1.1  2000/10/27 20:18:32  ivan
 oops, also necessary for session monitor
 
 Revision 1.1  1999/08/04 08:03:03  ivan