#! /usr/bin/perl -w

# Ce script génère une alarme quand le nombre de sessions AAA actives
# est inférieur à une valeur donnée.

use strict;
use Carp;
use Net::SNMP;
use Getopt::Std;
# use Data::Dumper;

my %options;
my $debug = 0;

sub usage {
    my $arg = shift;    
    print <<EOF;

$arg

Usage:
 -h host : hôte cible
 -C community : communauté SNMP utilisée
 -w users : génère un warning si nombre d'utilisateurs inférieur
 -c users : génère une alarme critical si nombre d'utilisateurs inférieur

EOF
   exit(3);
}

getopt("h:C:w:c:", \%options);
my $host = $options{h} || usage("pas d'hôte");
my $community = $options{C} || usage("pas de communauté");
my $warning_aaa_sessions_count= $options{w} || usage("pas de niveau warning");
my $critical_aaa_sessions_count = $options{c} || usage("pas de niveau critical");


my $aaa_active_sessions_oid = ".1.3.6.1.4.1.9.9.150.1.1.1.0";

my ($session, $error) =
   Net::SNMP->session(-hostname => $host, -version => "2c", -community => $community);

if (not defined($session)) {
   print "Impossible d'ouvrir une session SNMP avec $host: $error !\n";
   exit(3); # UNKNOWN
}

my $result = $session->get_request(-varbindlist => [ $aaa_active_sessions_oid ]);

if (not defined($result)) {
    my $error = $session->error();
    print "Impossible de récupérer le nombre de sessions AAA actives : $error\n";
    exit(3); # UNKNOWN
}

my $aaa_active_sessions = $result->{$aaa_active_sessions_oid};

if ( $aaa_active_sessions < $critical_aaa_sessions_count ) {
   print "CRITICAL: only $aaa_active_sessions users\n";
   exit(2); # CRITICAL
}
elsif ( $aaa_active_sessions < $warning_aaa_sessions_count ) {
    print "WARNING: only $aaa_active_sessions users\n";
   exit(1); # WARNING
}
else {
    print "OK: $aaa_active_sessions users\n";
   exit(0); # OK
}

__END__
    
Pour grapher le nombre d'utilisateurs, on utilise le nombre de sessions AAA actives.
Il faut utiliser la MIB Cisco CISCO-AAA-SESSION-MIB.

# snmpwalk -v2c fett casnActiveTableEntries
# CISCO-AAA-SESSION-MIB::casnActiveTableEntries.0 = Gauge32: 204
# # snmpwalk -Of -v2c fett casnActiveTableEntries
# .iso.org.dod.internet.private.enterprises.cisco.ciscoMgmt.ciscoAAASessionMIB.casnMIBObjects.casnActive.casnActiveTableEntries.0 = Gauge32: 204
# # snmpwalk -Ofn  -c password -v2c fett  casnActiveTableEntries
# .1.3.6.1.4.1.9.9.150.1.1.1.0 = Gauge32: 204
#
