diff --git a/snmp_standard/mode/ntp.pm b/snmp_standard/mode/ntp.pm index 6ad7bb4c6..f0cd83a20 100644 --- a/snmp_standard/mode/ntp.pm +++ b/snmp_standard/mode/ntp.pm @@ -56,12 +56,19 @@ sub set_counters { ]; } +sub default_date_oid { + my ($self, %options) = @_; + + return '.1.3.6.1.2.1.25.1.2.0'; +} + sub new { my ($class, %options) = @_; my $self = $class->SUPER::new(package => __PACKAGE__, %options); bless $self, $class; - $options{options}->add_options(arguments => { + $options{options}->add_options(arguments => { + 'oid:s' => { name => 'oid' }, 'ntp-hostname:s' => { name => 'ntp_hostname' }, 'ntp-port:s' => { name => 'ntp_port', default => 123 }, 'timezone:s' => { name => 'timezone' } @@ -82,13 +89,27 @@ sub check_options { } } -sub get_target_time { +sub get_from_epoch { my ($self, %options) = @_; - my $oid_hrSystemDate = '.1.3.6.1.2.1.25.1.2.0'; - my $result = $options{snmp}->get_leef(oids => [ $oid_hrSystemDate ], nothing_quit => 1); + my $timezone = 'UTC'; + if (defined($self->{option_results}->{timezone}) && $self->{option_results}->{timezone} ne '') { + $timezone = $self->{option_results}->{timezone}; + } - my @remote_date = unpack 'n C6 a C2', $result->{$oid_hrSystemDate}; + my $tz = centreon::plugins::misc::set_timezone(name => $timezone); + my $dt = DateTime->from_epoch( + epoch => $options{date}, + %$tz + ); + my @remote_date = ($dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, $dt->second); + return ($dt->epoch, \@remote_date, $timezone); +} + +sub get_from_datetime { + my ($self, %options) = @_; + + my @remote_date = unpack('n C6 a C2', $options{date}); my $timezone = 'UTC'; if (defined($self->{option_results}->{timezone}) && $self->{option_results}->{timezone} ne '') { $timezone = $self->{option_results}->{timezone}; @@ -110,6 +131,22 @@ sub get_target_time { return ($dt->epoch, \@remote_date, $timezone); } +sub get_target_time { + my ($self, %options) = @_; + + my $oid_date = $self->default_date_oid(); + if (defined($self->{option_results}->{oid}) && $self->{option_results}->{oid} ne '') { + $oid_date = $self->{option_results}->{oid}; + } + my $result = $options{snmp}->get_leef(oids => [ $oid_date ], nothing_quit => 1); + + if ($result->{$oid_date} =~ /^[0-9]{10}$/) { + return $self->get_from_epoch(date => $result->{$oid_date}); + } + + return $self->get_from_datetime(date => $result->{$oid_date}); +} + sub manage_selection { my ($self, %options) = @_; @@ -161,6 +198,10 @@ Use threshold with (+-) 2 seconds offset (minimum). =over 8 +=item B<--oid> + +Override default OID. + =item B<--warning-offset> Time offset warning threshold (in seconds). diff --git a/storage/dell/equallogic/snmp/plugin.pm b/storage/dell/equallogic/snmp/plugin.pm index 175c153ed..449c2ab4a 100644 --- a/storage/dell/equallogic/snmp/plugin.pm +++ b/storage/dell/equallogic/snmp/plugin.pm @@ -36,7 +36,8 @@ sub new { 'hardware' => 'storage::dell::equallogic::snmp::mode::hardware', 'interfaces' => 'snmp_standard::mode::interfaces', 'list-interfaces' => 'snmp_standard::mode::listinterfaces', - 'pool-usage' => 'storage::dell::equallogic::snmp::mode::poolusage' + 'pool-usage' => 'storage::dell::equallogic::snmp::mode::poolusage', + 'uptime' => 'snmp_standard::mode::uptime' }; return $self;