enh(ntp): add epoch support time (#2756)

This commit is contained in:
qgarnier 2021-04-30 10:06:53 +02:00 committed by GitHub
parent 995c9fee9a
commit 7feb4d4dcd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 48 additions and 6 deletions

View File

@ -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 { sub new {
my ($class, %options) = @_; my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options); my $self = $class->SUPER::new(package => __PACKAGE__, %options);
bless $self, $class; bless $self, $class;
$options{options}->add_options(arguments => { $options{options}->add_options(arguments => {
'oid:s' => { name => 'oid' },
'ntp-hostname:s' => { name => 'ntp_hostname' }, 'ntp-hostname:s' => { name => 'ntp_hostname' },
'ntp-port:s' => { name => 'ntp_port', default => 123 }, 'ntp-port:s' => { name => 'ntp_port', default => 123 },
'timezone:s' => { name => 'timezone' } 'timezone:s' => { name => 'timezone' }
@ -82,13 +89,27 @@ sub check_options {
} }
} }
sub get_target_time { sub get_from_epoch {
my ($self, %options) = @_; my ($self, %options) = @_;
my $oid_hrSystemDate = '.1.3.6.1.2.1.25.1.2.0'; my $timezone = 'UTC';
my $result = $options{snmp}->get_leef(oids => [ $oid_hrSystemDate ], nothing_quit => 1); 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'; my $timezone = 'UTC';
if (defined($self->{option_results}->{timezone}) && $self->{option_results}->{timezone} ne '') { if (defined($self->{option_results}->{timezone}) && $self->{option_results}->{timezone} ne '') {
$timezone = $self->{option_results}->{timezone}; $timezone = $self->{option_results}->{timezone};
@ -110,6 +131,22 @@ sub get_target_time {
return ($dt->epoch, \@remote_date, $timezone); 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 { sub manage_selection {
my ($self, %options) = @_; my ($self, %options) = @_;
@ -161,6 +198,10 @@ Use threshold with (+-) 2 seconds offset (minimum).
=over 8 =over 8
=item B<--oid>
Override default OID.
=item B<--warning-offset> =item B<--warning-offset>
Time offset warning threshold (in seconds). Time offset warning threshold (in seconds).

View File

@ -36,7 +36,8 @@ sub new {
'hardware' => 'storage::dell::equallogic::snmp::mode::hardware', 'hardware' => 'storage::dell::equallogic::snmp::mode::hardware',
'interfaces' => 'snmp_standard::mode::interfaces', 'interfaces' => 'snmp_standard::mode::interfaces',
'list-interfaces' => 'snmp_standard::mode::listinterfaces', '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; return $self;