Merge branch 'master' into cleanup/check_icmp

This commit is contained in:
Lorenz Kästle 2024-10-30 17:07:04 +01:00
commit 3f1db8dc3a
6 changed files with 640 additions and 698 deletions

View file

@ -1,11 +1,11 @@
BasedOnStyle: LLVM
UseTab: ForContinuationAndIndentation
IndentWidth: 4
TabWidth: 4
AllowShortIfStatementsOnASingleLine: false
BreakBeforeBraces: Attach
AlignConsecutiveMacros: true
ColumnLimit: 180
ColumnLimit: 140
IndentPPDirectives: AfterHash
SortIncludes: Never
AllowShortEnumsOnASingleLine: false
BinPackArguments: true

26
.github/mock.sh vendored
View file

@ -2,6 +2,8 @@
set -x
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
BASE_PATH="/src"
@ -18,7 +20,11 @@ SPEC_FILE="${SPEC_DIR}monitoring-plugins.spec"
cd ${BASE_PATH}
dnf -y --setopt="tsflags=nodocs" update && \
if [ ${distro_id} != "fedora" ]; then dnf -y --setopt="tsflags=nodocs" install epel-release; else platform_id="$(echo ${platform_id} | sed s/^f/fc/)"; fi && \
if [ "${distro_id}" != "fedora" ]; then
dnf -y --setopt="tsflags=nodocs" install epel-release;
else
platform_id="$(echo "${platform_id}" | sed s/^f/fc/)";
fi && \
case ${distro_id} in
ol)
case ${platform_id} in
@ -32,19 +38,27 @@ dnf -y --setopt="tsflags=nodocs" update && \
;;
esac
dnf -y --setopt="tsflags=nodocs" install mock rpm-build git-core && \
usermod -a -G mock $(whoami)
usermod -a -G mock "$(whoami)"
SRC_RPM="monitoring-plugins-*-1.${platform_id}.src.rpm"
if command -v git > /dev/null 2>&1; then
git config --global --add safe.directory ${BASE_PATH}
SHA="$(git rev-parse HEAD)"
sed "s/^%global commit.*/%global commit ${SHA}/" ${SPEC_FILE} > ${SPEC_DIR}monitoring-plugins-git.spec
sed -i "s/^%global fromgit.*/%global fromgit 1/" ${SPEC_DIR}monitoring-plugins-git.spec
SPEC_FILE="${SPEC_DIR}monitoring-plugins-git.spec"
SRC_RPM="monitoring-plugins-*git.$(echo ${SHA:0:7})*.${platform_id}.src.rpm"
SRC_RPM="monitoring-plugins-*git.${SHA:0:7}*.${platform_id}.src.rpm"
fi
mkdir -p "${SRCRPM_DIR}" "${RPM_DIR}"
#rpmbuild --undefine=_disable_source_fetch --define "_sourcedir ${SOURCE_DIR}" -ba ${SPEC_FILE}
dnf -y --setopt="tsflags=nodocs" install rpmdevtools && spectool -g -C ${SOURCE_DIR} ${SPEC_FILE} && \
mock --dnf --clean --spec ${SPEC_FILE} --sources=${SOURCE_DIR} --result=${SRCRPM_DIR} --build || { cat ${SRCRPM_DIR}/{root,build}.log; exit 1; }
mock --dnf --clean --sources=${SOURCE_DIR} --result=${RPM_DIR} --rebuild ${SRCRPM_DIR}/${SRC_RPM} || { cat ${RPM_DIR}/{root,build}.log; exit 1; }
dnf -y --setopt="tsflags=nodocs" install rpmdevtools && \
spectool -g -C ${SOURCE_DIR} ${SPEC_FILE} && \
{ mock --dnf --clean --spec ${SPEC_FILE} --sources=${SOURCE_DIR} --result=${SRCRPM_DIR} --build || \
{ cat ${SRCRPM_DIR}/{root,build}.log; exit 1; } }
mock --dnf --clean --sources=${SOURCE_DIR} --result=${RPM_DIR} --rebuild "${SRCRPM_DIR}"/${SRC_RPM} || \
{ cat ${RPM_DIR}/{root,build}.log; exit 1; }
ls -la ${SOURCE_DIR} ${SRCRPM_DIR} ${RPM_DIR}

View file

@ -1,7 +1,7 @@
#!/bin/bash
set -x
set -e
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
@ -127,5 +127,5 @@ sed "/NP_HOST_TLS_CERT/s/.*/'NP_HOST_TLS_CERT' => '$(hostname)',/" -i /src/.gith
# create some test files to lower inodes
for i in $(seq 10); do
touch /media/ramdisk2/test.$1
touch /media/ramdisk2/test.$i
done

File diff suppressed because it is too large Load diff

View file

@ -97,11 +97,12 @@ my $opt_V ;
my $opt_u;
my $opt_n;
my $opt_x ;
my $opt_d;
my %excluded ;
my %unused_names ;
my @unused_ports ;
my %session_opts;
my @exclude_descriptions;
@ -134,6 +135,7 @@ if (!defined($session)) {
}
push(@snmpoids,$snmpLocIfDescr);
push(@snmpoids,$snmpIfOperStatus);
push(@snmpoids,$snmpIfAdminStatus);
push(@snmpoids,$snmpIfDescr);
@ -180,18 +182,28 @@ foreach $key (keys %ifStatus) {
if ($ifStatus{$key}{$snmpIfAdminStatus} == 1 ) {
#check only if interface is not excluded
if (!defined $unused_names{$ifStatus{$key}{$snmpIfDescr}} ) {
# check only if interface type is not listed in %excluded
if (!defined $excluded{$ifStatus{$key}{$snmpIfType}} ) {
if ($ifStatus{$key}{$snmpIfOperStatus} == 1 ) { $ifup++ ; }
if ($ifStatus{$key}{$snmpIfOperStatus} == 2 ) {
$ifdown++ ;
if (defined $ifXTable) {
$ifmessage .= sprintf("%s: down -> %s<BR>\n", $ifStatus{$key}{$snmpIfName}, $ifStatus{$key}{$snmpIfAlias});
}else{
$ifmessage .= sprintf("%s: down <BR>\n",$ifStatus{$key}{$snmpIfDescr});
}
#check only if interface is not excluded (by description)
#counter for matching descriptions
my $match_descr = 0;
foreach my $description (@exclude_descriptions) {
if ($ifStatus{$key}{$snmpLocIfDescr} =~ /^$description/) { $match_descr = 1; }
}
if ($match_descr == 0) {
# check only if interface type is not listed in %excluded
if (!defined $excluded{$ifStatus{$key}{$snmpIfType}} ) {
if ($ifStatus{$key}{$snmpIfOperStatus} == 1 ) { $ifup++ ; }
if ($ifStatus{$key}{$snmpIfOperStatus} == 2 ) {
$ifdown++ ;
if (defined $ifXTable) {
$ifmessage .= sprintf("%s: down -> %s<BR>\n", $ifStatus{$key}{$snmpIfName}, $ifStatus{$key}{$snmpIfAlias});
}else{
$ifmessage .= sprintf("%s: down <BR>\n",$ifStatus{$key}{$snmpIfDescr});
}
}
if ($ifStatus{$key}{$snmpIfOperStatus} == 5 ) { $ifdormant++ ;}
} else {
$ifexclude++;
}
if ($ifStatus{$key}{$snmpIfOperStatus} == 5 ) { $ifdormant++ ;}
} else {
$ifexclude++;
}
@ -264,6 +276,9 @@ sub print_help() {
printf " the descriptive name. Do not use if you don't know what this is. \n";
printf " -x (--exclude) A comma separated list of ifType values that should be excluded \n";
printf " from the report (default for an empty list is PPP(23).\n";
printf " -d (--exclude_ports_by_description) A comma separated list of LocIfDescr values that should be excluded \n";
printf " from the report (default is an empty exclusion list). Done using regexp '/^arg/', ex:\n";
printf " '-d connect,test' will match with descriptions like 'testing phase' but not 'in testing'.\n";
printf " -n (--unused_ports_by_name) A comma separated list of ifDescr values that should be excluded \n";
printf " from the report (default is an empty exclusion list).\n";
printf " -u (--unused_ports) A comma separated list of ifIndex values that should be excluded \n";
@ -306,6 +321,7 @@ sub process_arguments() {
"I" => \$ifXTable, "ifmib" => \$ifXTable,
"x:s" => \$opt_x, "exclude:s" => \$opt_x,
"u=s" => \$opt_u, "unused_ports=s" => \$opt_u,
"d=s" => \$opt_d, "exclude_ports_by_description=s" => \$opt_d,
"n=s" => \$opt_n, "unused_ports_by_name=s" => \$opt_n,
"M=i" => \$maxmsgsize, "maxmsgsize=i" => \$maxmsgsize,
"t=i" => \$timeout, "timeout=i" => \$timeout,
@ -414,6 +430,11 @@ sub process_arguments() {
}
}
# Exclude interfaces by descriptions
if (defined $opt_d) {
@exclude_descriptions = split(/,/,$opt_d);
}
# Excluded interface descriptors
if (defined $opt_n) {
my @unused = split(/,/,$opt_n);

View file

@ -6,7 +6,7 @@
* Copyright (c) 2000 Tom Shields
* 2004 Alain Richard <alain.richard@equation.fr>
* 2004 Arnaud Quette <arnaud.quette@mgeups.com>
* Copyright (c) 2002-2023 Monitoring Plugins Development Team
* Copyright (c) 2002-2024 Monitoring Plugins Development Team
*
* Description:
*
@ -33,7 +33,7 @@
*****************************************************************************/
const char *progname = "check_ups";
const char *copyright = "2000-2023";
const char *copyright = "2000-2024";
const char *email = "devel@monitoring-plugins.org";
#include "common.h"
@ -141,7 +141,6 @@ int main(int argc, char **argv) {
return STATE_CRITICAL;
}
if (supported_options & UPS_STATUS) {
ups_status = strdup("");
@ -151,8 +150,7 @@ int main(int argc, char **argv) {
if (config.status & UPSSTATUS_OFF) {
xasprintf(&ups_status, "Off");
result = STATE_CRITICAL;
} else if ((config.status & (UPSSTATUS_OB | UPSSTATUS_LB)) ==
(UPSSTATUS_OB | UPSSTATUS_LB)) {
} else if ((config.status & (UPSSTATUS_OB | UPSSTATUS_LB)) == (UPSSTATUS_OB | UPSSTATUS_LB)) {
xasprintf(&ups_status, _("On Battery, Low Battery"));
result = STATE_CRITICAL;
} else {
@ -171,8 +169,7 @@ int main(int argc, char **argv) {
xasprintf(&ups_status, "%s%s", ups_status, _(", Calibrating"));
}
if (config.status & UPSSTATUS_RB) {
xasprintf(&ups_status, "%s%s", ups_status,
_(", Replace Battery"));
xasprintf(&ups_status, "%s%s", ups_status, _(", Replace Battery"));
result = max_state(result, STATE_WARNING);
}
if (config.status & UPSSTATUS_BYPASS) {
@ -233,24 +230,16 @@ int main(int argc, char **argv) {
}
if (config.check_variable == UPS_UTILITY) {
if (config.check_crit &&
ups_utility_deviation >= config.critical_value) {
if (config.check_crit && ups_utility_deviation >= config.critical_value) {
result = STATE_CRITICAL;
} else if (config.check_warn &&
ups_utility_deviation >= config.warning_value) {
} else if (config.check_warn && ups_utility_deviation >= config.warning_value) {
result = max_state(result, STATE_WARNING);
}
xasprintf(&data, "%s",
perfdata("voltage", (long)(1000 * ups_utility_voltage),
"mV", config.check_warn,
(long)(1000 * config.warning_value),
config.check_crit,
(long)(1000 * config.critical_value), true, 0,
false, 0));
perfdata("voltage", (long)(1000 * ups_utility_voltage), "mV", config.check_warn, (long)(1000 * config.warning_value),
config.check_crit, (long)(1000 * config.critical_value), true, 0, false, 0));
} else {
xasprintf(&data, "%s",
perfdata("voltage", (long)(1000 * ups_utility_voltage),
"mV", false, 0, false, 0, true, 0, false, 0));
xasprintf(&data, "%s", perfdata("voltage", (long)(1000 * ups_utility_voltage), "mV", false, 0, false, 0, true, 0, false, 0));
}
}
@ -268,22 +257,16 @@ int main(int argc, char **argv) {
xasprintf(&message, "%sBatt=%3.1f%% ", message, ups_battery_percent);
if (config.check_variable == UPS_BATTPCT) {
if (config.check_crit &&
ups_battery_percent <= config.critical_value) {
if (config.check_crit && ups_battery_percent <= config.critical_value) {
result = STATE_CRITICAL;
} else if (config.check_warn &&
ups_battery_percent <= config.warning_value) {
} else if (config.check_warn && ups_battery_percent <= config.warning_value) {
result = max_state(result, STATE_WARNING);
}
xasprintf(&data, "%s %s", data,
perfdata("battery", (long)ups_battery_percent, "%",
config.check_warn, (long)(config.warning_value),
config.check_crit, (long)(config.critical_value),
true, 0, true, 100));
perfdata("battery", (long)ups_battery_percent, "%", config.check_warn, (long)(config.warning_value),
config.check_crit, (long)(config.critical_value), true, 0, true, 100));
} else {
xasprintf(&data, "%s %s", data,
perfdata("battery", (long)ups_battery_percent, "%", false,
0, false, 0, true, 0, true, 100));
xasprintf(&data, "%s %s", data, perfdata("battery", (long)ups_battery_percent, "%", false, 0, false, 0, true, 0, true, 100));
}
}
@ -301,22 +284,16 @@ int main(int argc, char **argv) {
xasprintf(&message, "%sLoad=%3.1f%% ", message, ups_load_percent);
if (config.check_variable == UPS_LOADPCT) {
if (config.check_crit &&
ups_load_percent >= config.critical_value) {
if (config.check_crit && ups_load_percent >= config.critical_value) {
result = STATE_CRITICAL;
} else if (config.check_warn &&
ups_load_percent >= config.warning_value) {
} else if (config.check_warn && ups_load_percent >= config.warning_value) {
result = max_state(result, STATE_WARNING);
}
xasprintf(&data, "%s %s", data,
perfdata("load", (long)ups_load_percent, "%",
config.check_warn, (long)(config.warning_value),
config.check_crit, (long)(config.critical_value),
true, 0, true, 100));
perfdata("load", (long)ups_load_percent, "%", config.check_warn, (long)(config.warning_value), config.check_crit,
(long)(config.critical_value), true, 0, true, 100));
} else {
xasprintf(&data, "%s %s", data,
perfdata("load", (long)ups_load_percent, "%", false, 0,
false, 0, true, 0, true, 100));
xasprintf(&data, "%s %s", data, perfdata("load", (long)ups_load_percent, "%", false, 0, false, 0, true, 0, true, 100));
}
}
@ -345,19 +322,14 @@ int main(int argc, char **argv) {
if (config.check_variable == UPS_TEMP) {
if (config.check_crit && ups_temperature >= config.critical_value) {
result = STATE_CRITICAL;
} else if (config.check_warn &&
ups_temperature >= config.warning_value) {
} else if (config.check_warn && ups_temperature >= config.warning_value) {
result = max_state(result, STATE_WARNING);
}
xasprintf(&data, "%s %s", data,
perfdata("temp", (long)ups_temperature, tunits,
config.check_warn, (long)(config.warning_value),
config.check_crit, (long)(config.critical_value),
true, 0, false, 0));
perfdata("temp", (long)ups_temperature, tunits, config.check_warn, (long)(config.warning_value), config.check_crit,
(long)(config.critical_value), true, 0, false, 0));
} else {
xasprintf(&data, "%s %s", data,
perfdata("temp", (long)ups_temperature, tunits, false, 0,
false, 0, true, 0, false, 0));
xasprintf(&data, "%s %s", data, perfdata("temp", (long)ups_temperature, tunits, false, 0, false, 0, true, 0, false, 0));
}
}
@ -376,19 +348,14 @@ int main(int argc, char **argv) {
if (config.check_variable == UPS_REALPOWER) {
if (config.check_crit && ups_realpower >= config.critical_value) {
result = STATE_CRITICAL;
} else if (config.check_warn &&
ups_realpower >= config.warning_value) {
} else if (config.check_warn && ups_realpower >= config.warning_value) {
result = max_state(result, STATE_WARNING);
}
xasprintf(&data, "%s %s", data,
perfdata("realpower", (long)ups_realpower, "W",
config.check_warn, (long)(config.warning_value),
config.check_crit, (long)(config.critical_value),
true, 0, false, 0));
perfdata("realpower", (long)ups_realpower, "W", config.check_warn, (long)(config.warning_value), config.check_crit,
(long)(config.critical_value), true, 0, false, 0));
} else {
xasprintf(&data, "%s %s", data,
perfdata("realpower", (long)ups_realpower, "W", false, 0,
false, 0, true, 0, false, 0));
xasprintf(&data, "%s %s", data, perfdata("realpower", (long)ups_realpower, "W", false, 0, false, 0, true, 0, false, 0));
}
}
@ -425,8 +392,7 @@ int determine_status(ups_config *config, int *supported_options) {
char temp_buffer[MAX_INPUT_BUFFER];
strcpy(temp_buffer, recv_buffer);
for (char *ptr = (char *)strtok(temp_buffer, " "); ptr != NULL;
ptr = (char *)strtok(NULL, " ")) {
for (char *ptr = (char *)strtok(temp_buffer, " "); ptr != NULL; ptr = (char *)strtok(NULL, " ")) {
if (!strcmp(ptr, "OFF")) {
config->status |= UPSSTATUS_OFF;
} else if (!strcmp(ptr, "OL")) {
@ -467,8 +433,7 @@ int get_ups_variable(const char *varname, char *buf, const ups_config config) {
/* create the command string to send to the UPS daemon */
/* Add LOGOUT to avoid read failure logs */
int res = snprintf(send_buffer, sizeof(send_buffer),
"GET VAR %s %s\nLOGOUT\n", config.ups_name, varname);
int res = snprintf(send_buffer, sizeof(send_buffer), "GET VAR %s %s\nLOGOUT\n", config.ups_name, varname);
if ((res > 0) && ((size_t)res >= sizeof(send_buffer))) {
printf("%s\n", _("UPS name to long for buffer"));
return ERROR;
@ -477,9 +442,7 @@ int get_ups_variable(const char *varname, char *buf, const ups_config config) {
char temp_buffer[MAX_INPUT_BUFFER];
/* send the command to the daemon and get a response back */
if (process_tcp_request(config.server_address, config.server_port,
send_buffer, temp_buffer,
sizeof(temp_buffer)) != STATE_OK) {
if (process_tcp_request(config.server_address, config.server_port, send_buffer, temp_buffer, sizeof(temp_buffer)) != STATE_OK) {
printf("%s\n", _("Invalid response received from host"));
return ERROR;
}
@ -496,8 +459,7 @@ int get_ups_variable(const char *varname, char *buf, const ups_config config) {
ptr[len - 1] = 0;
}
if (strcmp(ptr, "ERR UNKNOWN-UPS") == 0) {
printf(_("CRITICAL - no such UPS '%s' on that host\n"),
config.ups_name);
printf(_("CRITICAL - no such UPS '%s' on that host\n"), config.ups_name);
return ERROR;
}
@ -694,8 +656,7 @@ void print_help(void) {
printf(" %s\n", "-T, --temperature");
printf(" %s\n", _("Output of temperatures in Celsius"));
printf(" %s\n", "-v, --variable=STRING");
printf(" %s %s\n", _("Valid values for STRING are"),
"LINE, TEMP, BATTPCT, LOADPCT or REALPOWER");
printf(" %s %s\n", _("Valid values for STRING are"), "LINE, TEMP, BATTPCT, LOADPCT or REALPOWER");
printf(UT_WARN_CRIT);
@ -731,8 +692,7 @@ void print_help(void) {
"with Russell Kroll's"));
printf(" %s\n", _("Network UPS Tools be installed on the remote host. If "
"you do not have the"));
printf(" %s\n",
_("package installed on your system, you can download it from"));
printf(" %s\n", _("package installed on your system, you can download it from"));
printf(" %s\n", _("http://www.networkupstools.org"));
printf(UT_SUPPORT);