Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 57 additions & 22 deletions check_ironport.pl
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#

# See https://mibs.observium.org/mib/ASYNCOS-MAIL-MIB/

use strict;
use warnings;

Expand Down Expand Up @@ -307,28 +309,61 @@ ()
{
$value = $$result{$_} if $$result{$_} ne 'No Errors';
}
elsif ($o_category eq 'keySecondsUntilExpire')
{
my $tmp = $$result{$_};
my @results = grep(/$tmp/, @licence_categories);
$value = 9999999; # we need to set it to a really high value ...
if (grep(/$tmp/, @licence_categories))
{
my $new_oid = $_;
$new_oid =~ s/1.3.6.1.4.1.15497.1.1.1.12.1.2/1.3.6.1.4.1.15497.1.1.1.12.1.4/;

my $result2 = $session->get_request(
-varbindlist => [$new_oid,],
);
foreach (keys %$result2)
{
verbose("OID: $_, Desc: $$result2{$_}");
}
$$result2{$new_oid} = int($$result2{$new_oid}/86400);
print STDERR $$result2{$new_oid}."\n";
$value = $$result2{$new_oid} if $$result2{$new_oid} < $value;
}
}
elsif ($o_category eq 'keySecondsUntilExpire')
{
my $tmp = $$result{$_};
$value = 9999999; # Default to a high value so perpetual or non-matching licenses do not affect the global expiration calculation

if (grep(/$tmp/, @licence_categories))
{
# Extract the last table index from the OID (must be preserved)
my ($index) = $_ =~ /\.(\d+)$/;

next unless defined $index;

# Build the related OIDs using the same table index
# keyIsPerpetual and keySecondsUntilExpire share the same index
my $oid_is_perpetual = "1.3.6.1.4.1.15497.1.1.1.12.1.3.$index";
my $oid_seconds = "1.3.6.1.4.1.15497.1.1.1.12.1.4.$index";

# Query both keyIsPerpetual and keySecondsUntilExpire in a single SNMP request
my $result2 = $session->get_request(
-varbindlist => [$oid_is_perpetual, $oid_seconds],
);

unless (defined $result2)
{
verbose("SNMP error while reading license details");
next;
}

foreach (keys %$result2)
{
verbose("OID: $_, Desc: $$result2{$_}");
}

my $is_perpetual = $$result2{$oid_is_perpetual};
my $seconds = $$result2{$oid_seconds};

verbose("Licence '$tmp' -> isPerpetual=$is_perpetual secondsUntilExpire=$seconds");

# If the license is marked as perpetual, skip expiration evaluation
# keySecondsUntilExpire may legitimately be 0 for perpetual licenses
if (defined($is_perpetual) && $is_perpetual == 1)
{
verbose("Licence '$tmp' is perpetual, skipping expiration check");
next;
}

# Non-perpetual license: convert remaining seconds to days
# and evaluate against warning/critical thresholds
if (defined($seconds))
{
my $days = int($seconds / 86400);
$value = $days if $days < $value;
}
}
}
else
{
$value = $$result{$_} if $$result{$_} > $value;
Expand Down