LEMONLDAP::NG : * IP view in Manager/Sessions.pm

* Bug in CGI.pm : local cache was erased each time
                * Bug in purgeCentralCache : timeout was always 7200
This commit is contained in:
Xavier Guimard 2008-11-05 14:55:02 +00:00
parent a75e882741
commit e42f1febef
3 changed files with 73 additions and 9 deletions

View File

@ -10,7 +10,7 @@ our @ISA = qw(CGI);
use Lemonldap::NG::Handler::SharedConf qw(:all);
our $VERSION = '0.1';
our $VERSION = '0.11';
sub new {
my $class = shift;
@ -93,6 +93,10 @@ use Lemonldap::NG::Handler::SharedConf qw(:locationRules);
our @ISA = qw(Lemonldap::NG::Handler::SharedConf);
sub localInit {
1;
}
sub lmLog {
my ( $self, $mess, $level ) = @_;
$mess =~ s/^.*HASH[^:]*:/__PACKAGE__/e;

View File

@ -105,7 +105,7 @@ sub new {
my ( $class, $args ) = @_;
my $self = $class->SUPER::new($args)
or _abort( 'Unable to start ' . __PACKAGE__, 'See Apache logs for more' );
foreach (qw(jqueryUri jquerySimpleTreeUri personnalCss imagePath)) {
foreach (qw(jqueryUri jquerySimpleTreeUri personnalCss imagePath protection)) {
$self->{$_} = $args->{$_}; # or print STDERR "Warning, $_ is not set, falling to default value\n";
}
eval "use $globalStorage";
@ -191,11 +191,11 @@ sub process {
)
{
last if ( ( keys %{ $byUid->{$uid} } ) == 1 );
print "<li class=\"closed\"><span>$uid</span><ul>";
print "<li id=\"di$uid\" class=\"closed\"><span>$uid</span><ul>";
foreach my $ip ( sort keys %{ $byUid->{$uid} } ) {
print "<li class=\"open\" id=\"$ip\"><span>$ip</span><ul>";
print "<li class=\"open\" id=\"di$ip\"><span>$ip</span><ul>";
foreach my $session ( @{ $byUid->{$uid}->{$ip} } ) {
print "<li><span onclick=\"display('$session->{id}');\">"
print "<li id=\"di$session->{id}\"><span onclick=\"display('$session->{id}');\">"
. localtime( $session->{_utime} )
. "</span></li>";
}
@ -226,7 +226,7 @@ sub process {
$self->start("IP : $req");
$self->window("$req");
foreach my $ip ( sort keys %$byUid ) {
print "<li><span>$ip</span><ul>";
print "<li id=\"fi$ip\"><span>$ip</span><ul>";
foreach my $uid ( sort keys %{ $byUid->{$ip} } ) {
$self->ajaxNode(
$uid,
@ -334,6 +334,33 @@ sub process {
}
}
# Ajax request to see users by IP
elsif ( my $ip = $self->param('uidByIp') ) {
my $byUser;
print $self->header( -type => 'text/html; charset=utf8' );
$globalStorage->get_key_from_all_sessions(
$globalStorageOptions,
sub {
my $entry = shift;
my $id = shift;
if ( $entry->{ipAddr} eq $ip ) {
push @{ $byUser->{ $entry->{uid} } },
{ id => $id, _utime => $entry->{_utime} };
}
undef;
}
);
foreach my $user (sort keys %$byUser) {
print "<li id=\"ip$user\"><span>$user</span><ul>";
foreach my $session ( @{ $byUser->{$user} } ) {
print "<li id=\"ip$session->{id}\"><span onclick=\"display('$session->{id}');\">"
. localtime( $session->{_utime} )
. "</span></li>";
}
print "</ul></li>";
}
}
# Ajax request to see connexions from a user
elsif ( my $uid = $self->param('uid') ) {
my $byIp;
@ -351,9 +378,9 @@ sub process {
}
);
foreach my $ip ( sort keys %$byIp ) {
print "<li class=\"open\" id=\"$ip\"><span>$ip</span><ul>";
print "<li class=\"open\" id=\"uid$ip\"><span>$ip</span><ul>";
foreach my $session ( @{ $byIp->{$ip} } ) {
print "<li><span onclick=\"display('$session->{id}');\">"
print "<li id=\"uid$session->{id}\"><span onclick=\"display('$session->{id}');\">"
. localtime( $session->{_utime} )
. "</span></li>";
}
@ -387,6 +414,38 @@ sub process {
}
}
# Display by IP classes
elsif ( $self->param('ipclasses') ) {
my $partial = $self->param('p') ? $self->param('p').'.' : '';
my $repartial = quotemeta($partial);
my ( $byIp, $count );
$globalStorage->get_key_from_all_sessions(
$globalStorageOptions,
sub {
my $entry = shift;
$entry->{ipAddr} =~ /^$repartial(\d+)/ or return undef;
$byIp->{$1}++;
$count++;
undef;
}
);
# Ajax request to list ip subclasses
if ( $partial ) {
print $self->header( -type => 'text/html; charset=utf8' );
}
# Display by IP subclass
else {
$self->start("Active sessions ($count)");
$self->window("Sessions par r&eacute;seaux <i><small>($count)</small></i>");
}
foreach my $ip ( sort {$a<=>$b} keys %$byIp ) {
$self->ajaxNode( "$partial$ip", "$partial$ip <i><small>($byIp->{$ip})</small></i>", ($partial!~/^\d+\.\d+\.\d+/?"ipclasses=1&p=$partial$ip":"uidByIp=$partial$ip"));
}
$self->end() unless($partial);
}
# Default display
else {
my ( $byUid, $count );
@ -490,6 +549,7 @@ sub window {
my $root = shift;
print '<table border="0" width="100%"><tr style="text-align:center;">
<td><a href="' . $ENV{SCRIPT_NAME} . '">Sessions actives</a></td>
<td><a href="' . $ENV{SCRIPT_NAME} . '?ipclasses=1">R&eacute;seaux</a></td>
<td><a href="'
. $ENV{SCRIPT_NAME} . '?doubleIp=1">Utilisateurs multi-IP</a></td>
<td><form action="'

View File

@ -86,7 +86,7 @@ my $tmp = $conf->{globalStorage};
eval "use $tmp";
die $@ if ($@);
$conf->{globalStorageOptions}->{timeout} ||= 7200;
$conf->{timeout} ||= 7200;
my @t = $tmp->get_all_sessions( $conf->{globalStorageOptions} );