diff options
30 files changed, 844 insertions, 356 deletions
| diff --git a/.github/prepare_debian.sh b/.github/prepare_debian.sh index c68b9f5d..4021c104 100755 --- a/.github/prepare_debian.sh +++ b/.github/prepare_debian.sh | |||
| @@ -13,7 +13,7 @@ if [ $(lsb_release -is) = "Debian" ]; then | |||
| 13 | fi | 13 | fi | 
| 14 | apt-get -y install perl autotools-dev libdbi-dev libldap2-dev libpq-dev libradcli-dev libnet-snmp-perl procps | 14 | apt-get -y install perl autotools-dev libdbi-dev libldap2-dev libpq-dev libradcli-dev libnet-snmp-perl procps | 
| 15 | apt-get -y install libdbi0-dev libdbd-sqlite3 libssl-dev dnsutils snmp-mibs-downloader libsnmp-perl snmpd | 15 | apt-get -y install libdbi0-dev libdbd-sqlite3 libssl-dev dnsutils snmp-mibs-downloader libsnmp-perl snmpd | 
| 16 | apt-get -y install fping snmp netcat smbclient vsftpd apache2 ssl-cert postfix libhttp-daemon-ssl-perl | 16 | apt-get -y install fping snmp netcat-openbsd smbclient vsftpd apache2 ssl-cert postfix libhttp-daemon-ssl-perl | 
| 17 | apt-get -y install libdbd-sybase-perl libnet-dns-perl | 17 | apt-get -y install libdbd-sybase-perl libnet-dns-perl | 
| 18 | apt-get -y install slapd ldap-utils | 18 | apt-get -y install slapd ldap-utils | 
| 19 | apt-get -y install gcc make autoconf automake gettext | 19 | apt-get -y install gcc make autoconf automake gettext | 
| diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 512d28e6..0f93930a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml | |||
| @@ -35,6 +35,7 @@ jobs: | |||
| 35 | -e NPTEST_CACHE="/src/.github/NPTest.cache" \ | 35 | -e NPTEST_CACHE="/src/.github/NPTest.cache" \ | 
| 36 | -w /src -v ${PWD}:/src \ | 36 | -w /src -v ${PWD}:/src \ | 
| 37 | --tmpfs /media/ramdisk1 \ | 37 | --tmpfs /media/ramdisk1 \ | 
| 38 | -v /var/run/utmp:/var/run/utmp \ | ||
| 38 | --mount source=tmp-vol,destination=/src,target=/media/ramdisk2 \ | 39 | --mount source=tmp-vol,destination=/src,target=/media/ramdisk2 \ | 
| 39 | ${{ matrix.distro }} \ | 40 | ${{ matrix.distro }} \ | 
| 40 | /bin/sh -c '${{ matrix.prepare }} && \ | 41 | /bin/sh -c '${{ matrix.prepare }} && \ | 
| @@ -13,6 +13,7 @@ This file documents the major additions and syntax changes between releases. | |||
| 13 | check_dns: Accept CIDR | 13 | check_dns: Accept CIDR | 
| 14 | check_dns: allow unsorted addresses | 14 | check_dns: allow unsorted addresses | 
| 15 | check_dns: allow forcing complete match of all addresses | 15 | check_dns: allow forcing complete match of all addresses | 
| 16 | check_dns: option to expect NXDOMAIN | ||
| 16 | check_apt: add --only-critical switch | 17 | check_apt: add --only-critical switch | 
| 17 | check_apt: add -l/--list option to print packages | 18 | check_apt: add -l/--list option to print packages | 
| 18 | check_file_age: add range checking | 19 | check_file_age: add range checking | 
| diff --git a/configure.ac b/configure.ac index 7c17dcd1..dfc37b5e 100644 --- a/configure.ac +++ b/configure.ac | |||
| @@ -783,6 +783,16 @@ dnl ac_cv_ps_format=["%*s %d %d %d %d %*d %*d %d %d%*[ 0123456789abcdef]%[OSRZT | |||
| 783 | dnl ac_cv_ps_cols=8 | 783 | dnl ac_cv_ps_cols=8 | 
| 784 | dnl AC_MSG_RESULT([$ac_cv_ps_command]) | 784 | dnl AC_MSG_RESULT([$ac_cv_ps_command]) | 
| 785 | 785 | ||
| 786 | dnl This one is the exact same test as the next one but includes etime | ||
| 787 | elif ps axwo 'stat comm vsz rss user uid pid ppid etime args' 2>/dev/null | \ | ||
| 788 | egrep -i ["^ *STAT +[UCOMAND]+ +VSZ +RSS +USER +UID +PID +PPID +ELAPSED +COMMAND"] > /dev/null | ||
| 789 | then | ||
| 790 | ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procetime,procprog,&pos]" | ||
| 791 | ac_cv_ps_command="$PATH_TO_PS axwo 'stat uid pid ppid vsz rss pcpu etime comm args'" | ||
| 792 | ac_cv_ps_format="%s %d %d %d %d %d %f %s %s %n" | ||
| 793 | ac_cv_ps_cols=10 | ||
| 794 | AC_MSG_RESULT([$ac_cv_ps_command]) | ||
| 795 | |||
| 786 | dnl Some gnu/linux systems (debian for one) don't like -axwo and need axwo. | 796 | dnl Some gnu/linux systems (debian for one) don't like -axwo and need axwo. | 
| 787 | dnl so test for this first... | 797 | dnl so test for this first... | 
| 788 | elif ps axwo 'stat comm vsz rss user uid pid ppid args' 2>/dev/null | \ | 798 | elif ps axwo 'stat comm vsz rss user uid pid ppid args' 2>/dev/null | \ | 
| diff --git a/lib/utils_base.c b/lib/utils_base.c index fd7058da..08fa215c 100644 --- a/lib/utils_base.c +++ b/lib/utils_base.c | |||
| @@ -128,6 +128,7 @@ range | |||
| 128 | temp_range->end = 0; | 128 | temp_range->end = 0; | 
| 129 | temp_range->end_infinity = TRUE; | 129 | temp_range->end_infinity = TRUE; | 
| 130 | temp_range->alert_on = OUTSIDE; | 130 | temp_range->alert_on = OUTSIDE; | 
| 131 | temp_range->text = strdup(str); | ||
| 131 | 132 | ||
| 132 | if (str[0] == '@') { | 133 | if (str[0] == '@') { | 
| 133 | temp_range->alert_on = INSIDE; | 134 | temp_range->alert_on = INSIDE; | 
| @@ -706,4 +707,3 @@ void np_state_write_string(time_t data_time, char *data_string) { | |||
| 706 | 707 | ||
| 707 | np_free(temp_file); | 708 | np_free(temp_file); | 
| 708 | } | 709 | } | 
| 709 | |||
| diff --git a/lib/utils_base.h b/lib/utils_base.h index d7e7dffa..9482f23b 100644 --- a/lib/utils_base.h +++ b/lib/utils_base.h | |||
| @@ -23,6 +23,7 @@ typedef struct range_struct { | |||
| 23 | double end; | 23 | double end; | 
| 24 | int end_infinity; | 24 | int end_infinity; | 
| 25 | int alert_on; /* OUTSIDE (default) or INSIDE */ | 25 | int alert_on; /* OUTSIDE (default) or INSIDE */ | 
| 26 | char* text; /* original unparsed text input */ | ||
| 26 | } range; | 27 | } range; | 
| 27 | 28 | ||
| 28 | typedef struct thresholds_struct { | 29 | typedef struct thresholds_struct { | 
| diff --git a/lib/utils_disk.h b/lib/utils_disk.h index 999270cd..bf52e4ce 100644 --- a/lib/utils_disk.h +++ b/lib/utils_disk.h | |||
| @@ -27,7 +27,7 @@ struct parameter_list | |||
| 27 | uintmax_t total, available, available_to_root, used, | 27 | uintmax_t total, available, available_to_root, used, | 
| 28 | inodes_free, inodes_free_to_root, inodes_used, inodes_total; | 28 | inodes_free, inodes_free_to_root, inodes_used, inodes_total; | 
| 29 | double dfree_pct, dused_pct; | 29 | double dfree_pct, dused_pct; | 
| 30 | double dused_units, dfree_units, dtotal_units; | 30 | uint64_t dused_units, dfree_units, dtotal_units; | 
| 31 | double dused_inodes_percent, dfree_inodes_percent; | 31 | double dused_inodes_percent, dfree_inodes_percent; | 
| 32 | }; | 32 | }; | 
| 33 | 33 | ||
| diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c index 31eb4c65..519b93c6 100644 --- a/plugins-root/check_icmp.c +++ b/plugins-root/check_icmp.c | |||
| @@ -921,7 +921,7 @@ wait_for_reply(int sock, u_int t) | |||
| 921 | /* if we're in hostcheck mode, exit with limited printouts */ | 921 | /* if we're in hostcheck mode, exit with limited printouts */ | 
| 922 | if(mode == MODE_HOSTCHECK) { | 922 | if(mode == MODE_HOSTCHECK) { | 
| 923 | printf("OK - %s responds to ICMP. Packet %u, rta %0.3fms|" | 923 | printf("OK - %s responds to ICMP. Packet %u, rta %0.3fms|" | 
| 924 | "pkt=%u;;0;%u rta=%0.3f;%0.3f;%0.3f;;\n", | 924 | "pkt=%u;;;0;%u rta=%0.3f;%0.3f;%0.3f;;\n", | 
| 925 | host->name, icmp_recv, (float)tdiff / 1000, | 925 | host->name, icmp_recv, (float)tdiff / 1000, | 
| 926 | icmp_recv, packets, (float)tdiff / 1000, | 926 | icmp_recv, packets, (float)tdiff / 1000, | 
| 927 | (float)warn.rta / 1000, (float)crit.rta / 1000); | 927 | (float)warn.rta / 1000, (float)crit.rta / 1000); | 
| diff --git a/plugins-scripts/check_ifoperstatus.pl b/plugins-scripts/check_ifoperstatus.pl index 9ede1633..c190ce95 100755 --- a/plugins-scripts/check_ifoperstatus.pl +++ b/plugins-scripts/check_ifoperstatus.pl | |||
| @@ -124,10 +124,10 @@ if (!defined($session)) { | |||
| 124 | ## map ifdescr to ifindex - should look at being able to cache this value | 124 | ## map ifdescr to ifindex - should look at being able to cache this value | 
| 125 | 125 | ||
| 126 | if (defined $ifdescr || defined $iftype) { | 126 | if (defined $ifdescr || defined $iftype) { | 
| 127 | # escape "/" in ifdescr - very common in the Cisco world | ||
| 128 | if (defined $iftype) { | 127 | if (defined $iftype) { | 
| 129 | $status=fetch_ifindex($snmpIfType, $iftype); | 128 | $status=fetch_ifindex($snmpIfType, $iftype); | 
| 130 | } else { | 129 | } else { | 
| 130 | # escape "/" in ifdescr - very common in the Cisco world | ||
| 131 | $ifdescr =~ s/\//\\\//g; | 131 | $ifdescr =~ s/\//\\\//g; | 
| 132 | $status=fetch_ifindex($snmpIfDescr, $ifdescr); # if using on device with large number of interfaces | 132 | $status=fetch_ifindex($snmpIfDescr, $ifdescr); # if using on device with large number of interfaces | 
| 133 | # recommend use of SNMP v2 (get-bulk) | 133 | # recommend use of SNMP v2 (get-bulk) | 
| diff --git a/plugins-scripts/check_ircd.pl b/plugins-scripts/check_ircd.pl index 22d21c2e..d869ae7b 100755 --- a/plugins-scripts/check_ircd.pl +++ b/plugins-scripts/check_ircd.pl | |||
| @@ -69,7 +69,9 @@ $ENV{'ENV'}=''; | |||
| 69 | # -----------------------------------------------------------------[ Global ]-- | 69 | # -----------------------------------------------------------------[ Global ]-- | 
| 70 | 70 | ||
| 71 | $PROGNAME = "check_ircd"; | 71 | $PROGNAME = "check_ircd"; | 
| 72 | my $NICK="ircd$$"; | 72 | # nickname shouldn't be longer than 9 chars, this might happen with large PIDs | 
| 73 | # To prevent this, we cut of the part over 10000 | ||
| 74 | my $NICK="ircd" . $$ % 10000; | ||
| 73 | my $USER_INFO="monitor localhost localhost : "; | 75 | my $USER_INFO="monitor localhost localhost : "; | 
| 74 | 76 | ||
| 75 | # -------------------------------------------------------------[ connection ]-- | 77 | # -------------------------------------------------------------[ connection ]-- | 
| diff --git a/plugins/check_by_ssh.c b/plugins/check_by_ssh.c index 13d8bc3b..485bf3be 100644 --- a/plugins/check_by_ssh.c +++ b/plugins/check_by_ssh.c | |||
| @@ -230,7 +230,6 @@ process_arguments (int argc, char **argv) | |||
| 230 | timeout_interval = atoi (optarg); | 230 | timeout_interval = atoi (optarg); | 
| 231 | break; | 231 | break; | 
| 232 | case 'H': /* host */ | 232 | case 'H': /* host */ | 
| 233 | host_or_die(optarg); | ||
| 234 | hostname = optarg; | 233 | hostname = optarg; | 
| 235 | break; | 234 | break; | 
| 236 | case 'p': /* port number */ | 235 | case 'p': /* port number */ | 
| @@ -329,7 +328,6 @@ process_arguments (int argc, char **argv) | |||
| 329 | if (c <= argc) { | 328 | if (c <= argc) { | 
| 330 | die (STATE_UNKNOWN, _("%s: You must provide a host name\n"), progname); | 329 | die (STATE_UNKNOWN, _("%s: You must provide a host name\n"), progname); | 
| 331 | } | 330 | } | 
| 332 | host_or_die(argv[c]); | ||
| 333 | hostname = argv[c++]; | 331 | hostname = argv[c++]; | 
| 334 | } | 332 | } | 
| 335 | 333 | ||
| diff --git a/plugins/check_curl.c b/plugins/check_curl.c index d29db0a6..14cc8463 100644 --- a/plugins/check_curl.c +++ b/plugins/check_curl.c | |||
| @@ -55,6 +55,12 @@ const char *email = "devel@monitoring-plugins.org"; | |||
| 55 | 55 | ||
| 56 | #include <arpa/inet.h> | 56 | #include <arpa/inet.h> | 
| 57 | 57 | ||
| 58 | #if defined(HAVE_SSL) && defined(USE_OPENSSL) | ||
| 59 | #include <openssl/opensslv.h> | ||
| 60 | #endif | ||
| 61 | |||
| 62 | #include <netdb.h> | ||
| 63 | |||
| 58 | #define MAKE_LIBCURL_VERSION(major, minor, patch) ((major)*0x10000 + (minor)*0x100 + (patch)) | 64 | #define MAKE_LIBCURL_VERSION(major, minor, patch) ((major)*0x10000 + (minor)*0x100 + (patch)) | 
| 59 | 65 | ||
| 60 | #define DEFAULT_BUFFER_SIZE 2048 | 66 | #define DEFAULT_BUFFER_SIZE 2048 | 
| @@ -206,6 +212,7 @@ int maximum_age = -1; | |||
| 206 | int address_family = AF_UNSPEC; | 212 | int address_family = AF_UNSPEC; | 
| 207 | curlhelp_ssl_library ssl_library = CURLHELP_SSL_LIBRARY_UNKNOWN; | 213 | curlhelp_ssl_library ssl_library = CURLHELP_SSL_LIBRARY_UNKNOWN; | 
| 208 | int curl_http_version = CURL_HTTP_VERSION_NONE; | 214 | int curl_http_version = CURL_HTTP_VERSION_NONE; | 
| 215 | int automatic_decompression = FALSE; | ||
| 209 | 216 | ||
| 210 | int process_arguments (int, char**); | 217 | int process_arguments (int, char**); | 
| 211 | void handle_curl_option_return_code (CURLcode res, const char* option); | 218 | void handle_curl_option_return_code (CURLcode res, const char* option); | 
| @@ -285,6 +292,20 @@ int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) | |||
| 285 | * TODO: is the last certificate always the server certificate? | 292 | * TODO: is the last certificate always the server certificate? | 
| 286 | */ | 293 | */ | 
| 287 | cert = X509_STORE_CTX_get_current_cert(x509_ctx); | 294 | cert = X509_STORE_CTX_get_current_cert(x509_ctx); | 
| 295 | #if OPENSSL_VERSION_NUMBER >= 0x10100000L | ||
| 296 | X509_up_ref(cert); | ||
| 297 | #endif | ||
| 298 | if (verbose>=2) { | ||
| 299 | puts("* SSL verify callback with certificate:"); | ||
| 300 | X509_NAME *subject, *issuer; | ||
| 301 | printf("* issuer:\n"); | ||
| 302 | issuer = X509_get_issuer_name( cert ); | ||
| 303 | X509_NAME_print_ex_fp(stdout, issuer, 5, XN_FLAG_MULTILINE); | ||
| 304 | printf("* curl verify_callback:\n* subject:\n"); | ||
| 305 | subject = X509_get_subject_name( cert ); | ||
| 306 | X509_NAME_print_ex_fp(stdout, subject, 5, XN_FLAG_MULTILINE); | ||
| 307 | puts(""); | ||
| 308 | } | ||
| 288 | return 1; | 309 | return 1; | 
| 289 | } | 310 | } | 
| 290 | 311 | ||
| @@ -351,12 +372,55 @@ handle_curl_option_return_code (CURLcode res, const char* option) | |||
| 351 | } | 372 | } | 
| 352 | 373 | ||
| 353 | int | 374 | int | 
| 375 | lookup_host (const char *host, char *buf, size_t buflen) | ||
| 376 | { | ||
| 377 | struct addrinfo hints, *res, *result; | ||
| 378 | int errcode; | ||
| 379 | void *ptr; | ||
| 380 | |||
| 381 | memset (&hints, 0, sizeof (hints)); | ||
| 382 | hints.ai_family = address_family; | ||
| 383 | hints.ai_socktype = SOCK_STREAM; | ||
| 384 | hints.ai_flags |= AI_CANONNAME; | ||
| 385 | |||
| 386 | errcode = getaddrinfo (host, NULL, &hints, &result); | ||
| 387 | if (errcode != 0) | ||
| 388 | return errcode; | ||
| 389 | |||
| 390 | res = result; | ||
| 391 | |||
| 392 | while (res) { | ||
| 393 | inet_ntop (res->ai_family, res->ai_addr->sa_data, buf, buflen); | ||
| 394 | switch (res->ai_family) { | ||
| 395 | case AF_INET: | ||
| 396 | ptr = &((struct sockaddr_in *) res->ai_addr)->sin_addr; | ||
| 397 | break; | ||
| 398 | case AF_INET6: | ||
| 399 | ptr = &((struct sockaddr_in6 *) res->ai_addr)->sin6_addr; | ||
| 400 | break; | ||
| 401 | } | ||
| 402 | inet_ntop (res->ai_family, ptr, buf, buflen); | ||
| 403 | if (verbose >= 1) | ||
| 404 | printf ("* getaddrinfo IPv%d address: %s\n", | ||
| 405 | res->ai_family == PF_INET6 ? 6 : 4, buf); | ||
| 406 | res = res->ai_next; | ||
| 407 | } | ||
| 408 | |||
| 409 | freeaddrinfo(result); | ||
| 410 | |||
| 411 | return 0; | ||
| 412 | } | ||
| 413 | |||
| 414 | int | ||
| 354 | check_http (void) | 415 | check_http (void) | 
| 355 | { | 416 | { | 
| 356 | int result = STATE_OK; | 417 | int result = STATE_OK; | 
| 357 | int page_len = 0; | 418 | int page_len = 0; | 
| 358 | int i; | 419 | int i; | 
| 359 | char *force_host_header = NULL; | 420 | char *force_host_header = NULL; | 
| 421 | struct curl_slist *host = NULL; | ||
| 422 | char addrstr[100]; | ||
| 423 | char dnscache[DEFAULT_BUFFER_SIZE]; | ||
| 360 | 424 | ||
| 361 | /* initialize curl */ | 425 | /* initialize curl */ | 
| 362 | if (curl_global_init (CURL_GLOBAL_DEFAULT) != CURLE_OK) | 426 | if (curl_global_init (CURL_GLOBAL_DEFAULT) != CURLE_OK) | 
| @@ -371,6 +435,13 @@ check_http (void) | |||
| 371 | /* print everything on stdout like check_http would do */ | 435 | /* print everything on stdout like check_http would do */ | 
| 372 | handle_curl_option_return_code (curl_easy_setopt(curl, CURLOPT_STDERR, stdout), "CURLOPT_STDERR"); | 436 | handle_curl_option_return_code (curl_easy_setopt(curl, CURLOPT_STDERR, stdout), "CURLOPT_STDERR"); | 
| 373 | 437 | ||
| 438 | if (automatic_decompression) | ||
| 439 | #if LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 21, 6) | ||
| 440 | handle_curl_option_return_code (curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, ""), "CURLOPT_ACCEPT_ENCODING"); | ||
| 441 | #else | ||
| 442 | handle_curl_option_return_code (curl_easy_setopt(curl, CURLOPT_ENCODING, ""), "CURLOPT_ENCODING"); | ||
| 443 | #endif /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 21, 6) */ | ||
| 444 | |||
| 374 | /* initialize buffer for body of the answer */ | 445 | /* initialize buffer for body of the answer */ | 
| 375 | if (curlhelp_initwritebuffer(&body_buf) < 0) | 446 | if (curlhelp_initwritebuffer(&body_buf) < 0) | 
| 376 | die (STATE_UNKNOWN, "HTTP CRITICAL - out of memory allocating buffer for body\n"); | 447 | die (STATE_UNKNOWN, "HTTP CRITICAL - out of memory allocating buffer for body\n"); | 
| @@ -392,9 +463,12 @@ check_http (void) | |||
| 392 | 463 | ||
| 393 | // fill dns resolve cache to make curl connect to the given server_address instead of the host_name, only required for ssl, because we use the host_name later on to make SNI happy | 464 | // fill dns resolve cache to make curl connect to the given server_address instead of the host_name, only required for ssl, because we use the host_name later on to make SNI happy | 
| 394 | if(use_ssl && host_name != NULL) { | 465 | if(use_ssl && host_name != NULL) { | 
| 395 | struct curl_slist *host = NULL; | 466 | if ( (res=lookup_host (server_address, addrstr, 100)) != 0) { | 
| 396 | char dnscache[DEFAULT_BUFFER_SIZE]; | 467 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("Unable to lookup IP address for '%s': getaddrinfo returned %d - %s"), | 
| 397 | snprintf (dnscache, DEFAULT_BUFFER_SIZE, "%s:%d:%s", host_name, server_port, server_address); | 468 | server_address, res, gai_strerror (res)); | 
| 469 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); | ||
| 470 | } | ||
| 471 | snprintf (dnscache, DEFAULT_BUFFER_SIZE, "%s:%d:%s", host_name, server_port, addrstr); | ||
| 398 | host = curl_slist_append(NULL, dnscache); | 472 | host = curl_slist_append(NULL, dnscache); | 
| 399 | curl_easy_setopt(curl, CURLOPT_RESOLVE, host); | 473 | curl_easy_setopt(curl, CURLOPT_RESOLVE, host); | 
| 400 | if (verbose>=1) | 474 | if (verbose>=1) | 
| @@ -959,8 +1033,8 @@ char* | |||
| 959 | uri_string (const UriTextRangeA range, char* buf, size_t buflen) | 1033 | uri_string (const UriTextRangeA range, char* buf, size_t buflen) | 
| 960 | { | 1034 | { | 
| 961 | if (!range.first) return "(null)"; | 1035 | if (!range.first) return "(null)"; | 
| 962 | strncpy (buf, range.first, max (buflen, range.afterLast - range.first)); | 1036 | strncpy (buf, range.first, max (buflen-1, range.afterLast - range.first)); | 
| 963 | buf[max (buflen, range.afterLast - range.first)] = '\0'; | 1037 | buf[max (buflen-1, range.afterLast - range.first)] = '\0'; | 
| 964 | buf[range.afterLast - range.first] = '\0'; | 1038 | buf[range.afterLast - range.first] = '\0'; | 
| 965 | return buf; | 1039 | return buf; | 
| 966 | } | 1040 | } | 
| @@ -1080,8 +1154,8 @@ redir (curlhelp_write_curlbuf* header_buf) | |||
| 1080 | !strncmp(server_address, new_host, MAX_IPV4_HOSTLENGTH) && | 1154 | !strncmp(server_address, new_host, MAX_IPV4_HOSTLENGTH) && | 
| 1081 | (host_name && !strncmp(host_name, new_host, MAX_IPV4_HOSTLENGTH)) && | 1155 | (host_name && !strncmp(host_name, new_host, MAX_IPV4_HOSTLENGTH)) && | 
| 1082 | !strcmp(server_url, new_url)) | 1156 | !strcmp(server_url, new_url)) | 
| 1083 | die (STATE_WARNING, | 1157 | die (STATE_CRITICAL, | 
| 1084 | _("HTTP WARNING - redirection creates an infinite loop - %s://%s:%d%s%s\n"), | 1158 | _("HTTP CRITICAL - redirection creates an infinite loop - %s://%s:%d%s%s\n"), | 
| 1085 | use_ssl ? "https" : "http", new_host, new_port, new_url, (display_html ? "</A>" : "")); | 1159 | use_ssl ? "https" : "http", new_host, new_port, new_url, (display_html ? "</A>" : "")); | 
| 1086 | 1160 | ||
| 1087 | /* set new values for redirected request */ | 1161 | /* set new values for redirected request */ | 
| @@ -1137,7 +1211,8 @@ process_arguments (int argc, char **argv) | |||
| 1137 | INVERT_REGEX = CHAR_MAX + 1, | 1211 | INVERT_REGEX = CHAR_MAX + 1, | 
| 1138 | SNI_OPTION, | 1212 | SNI_OPTION, | 
| 1139 | CA_CERT_OPTION, | 1213 | CA_CERT_OPTION, | 
| 1140 | HTTP_VERSION_OPTION | 1214 | HTTP_VERSION_OPTION, | 
| 1215 | AUTOMATIC_DECOMPRESSION | ||
| 1141 | }; | 1216 | }; | 
| 1142 | 1217 | ||
| 1143 | int option = 0; | 1218 | int option = 0; | 
| @@ -1180,6 +1255,7 @@ process_arguments (int argc, char **argv) | |||
| 1180 | {"extended-perfdata", no_argument, 0, 'E'}, | 1255 | {"extended-perfdata", no_argument, 0, 'E'}, | 
| 1181 | {"show-body", no_argument, 0, 'B'}, | 1256 | {"show-body", no_argument, 0, 'B'}, | 
| 1182 | {"http-version", required_argument, 0, HTTP_VERSION_OPTION}, | 1257 | {"http-version", required_argument, 0, HTTP_VERSION_OPTION}, | 
| 1258 | {"enable-automatic-decompression", no_argument, 0, AUTOMATIC_DECOMPRESSION}, | ||
| 1183 | {0, 0, 0, 0} | 1259 | {0, 0, 0, 0} | 
| 1184 | }; | 1260 | }; | 
| 1185 | 1261 | ||
| @@ -1571,6 +1647,9 @@ process_arguments (int argc, char **argv) | |||
| 1571 | exit (STATE_WARNING); | 1647 | exit (STATE_WARNING); | 
| 1572 | } | 1648 | } | 
| 1573 | break; | 1649 | break; | 
| 1650 | case AUTOMATIC_DECOMPRESSION: | ||
| 1651 | automatic_decompression = TRUE; | ||
| 1652 | break; | ||
| 1574 | case '?': | 1653 | case '?': | 
| 1575 | /* print short usage statement if args not parsable */ | 1654 | /* print short usage statement if args not parsable */ | 
| 1576 | usage5 (); | 1655 | usage5 (); | 
| @@ -1781,6 +1860,8 @@ print_help (void) | |||
| 1781 | printf (" %s\n", "--http-version=VERSION"); | 1860 | printf (" %s\n", "--http-version=VERSION"); | 
| 1782 | printf (" %s\n", _("Connect via specific HTTP protocol.")); | 1861 | printf (" %s\n", _("Connect via specific HTTP protocol.")); | 
| 1783 | printf (" %s\n", _("1.0 = HTTP/1.0, 1.1 = HTTP/1.1, 2.0 = HTTP/2 (HTTP/2 will fail without -S)")); | 1862 | printf (" %s\n", _("1.0 = HTTP/1.0, 1.1 = HTTP/1.1, 2.0 = HTTP/2 (HTTP/2 will fail without -S)")); | 
| 1863 | printf (" %s\n", "--enable-automatic-decompression"); | ||
| 1864 | printf (" %s\n", _("Enable automatic decompression of body (CURLOPT_ACCEPT_ENCODING).")); | ||
| 1784 | printf ("\n"); | 1865 | printf ("\n"); | 
| 1785 | 1866 | ||
| 1786 | printf (UT_WARN_CRIT); | 1867 | printf (UT_WARN_CRIT); | 
| diff --git a/plugins/check_disk.c b/plugins/check_disk.c index 844e625f..c526d056 100644 --- a/plugins/check_disk.c +++ b/plugins/check_disk.c | |||
| @@ -1,29 +1,29 @@ | |||
| 1 | /***************************************************************************** | 1 | /***************************************************************************** | 
| 2 | * | 2 | * | 
| 3 | * Monitoring check_disk plugin | 3 | * Monitoring check_disk plugin | 
| 4 | * | 4 | * | 
| 5 | * License: GPL | 5 | * License: GPL | 
| 6 | * Copyright (c) 1999-2008 Monitoring Plugins Development Team | 6 | * Copyright (c) 1999-2008 Monitoring Plugins Development Team | 
| 7 | * | 7 | * | 
| 8 | * Description: | 8 | * Description: | 
| 9 | * | 9 | * | 
| 10 | * This file contains the check_disk plugin | 10 | * This file contains the check_disk plugin | 
| 11 | * | 11 | * | 
| 12 | * | 12 | * | 
| 13 | * This program is free software: you can redistribute it and/or modify | 13 | * This program is free software: you can redistribute it and/or modify | 
| 14 | * it under the terms of the GNU General Public License as published by | 14 | * it under the terms of the GNU General Public License as published by | 
| 15 | * the Free Software Foundation, either version 3 of the License, or | 15 | * the Free Software Foundation, either version 3 of the License, or | 
| 16 | * (at your option) any later version. | 16 | * (at your option) any later version. | 
| 17 | * | 17 | * | 
| 18 | * This program is distributed in the hope that it will be useful, | 18 | * This program is distributed in the hope that it will be useful, | 
| 19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 21 | * GNU General Public License for more details. | 21 | * GNU General Public License for more details. | 
| 22 | * | 22 | * | 
| 23 | * You should have received a copy of the GNU General Public License | 23 | * You should have received a copy of the GNU General Public License | 
| 24 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 24 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 
| 25 | * | 25 | * | 
| 26 | * | 26 | * | 
| 27 | *****************************************************************************/ | 27 | *****************************************************************************/ | 
| 28 | 28 | ||
| 29 | const char *progname = "check_disk"; | 29 | const char *progname = "check_disk"; | 
| @@ -46,7 +46,7 @@ const char *email = "devel@monitoring-plugins.org"; | |||
| 46 | #include <stdarg.h> | 46 | #include <stdarg.h> | 
| 47 | #include "fsusage.h" | 47 | #include "fsusage.h" | 
| 48 | #include "mountlist.h" | 48 | #include "mountlist.h" | 
| 49 | #include "intprops.h" /* necessary for TYPE_MAXIMUM */ | 49 | #include "intprops.h" /* necessary for TYPE_MAXIMUM */ | 
| 50 | #if HAVE_LIMITS_H | 50 | #if HAVE_LIMITS_H | 
| 51 | # include <limits.h> | 51 | # include <limits.h> | 
| 52 | #endif | 52 | #endif | 
| @@ -172,8 +172,6 @@ main (int argc, char **argv) | |||
| 172 | char *preamble; | 172 | char *preamble; | 
| 173 | char *flag_header; | 173 | char *flag_header; | 
| 174 | double inode_space_pct; | 174 | double inode_space_pct; | 
| 175 | double warning_high_tide; | ||
| 176 | double critical_high_tide; | ||
| 177 | int temp_result; | 175 | int temp_result; | 
| 178 | 176 | ||
| 179 | struct mount_entry *me; | 177 | struct mount_entry *me; | 
| @@ -245,17 +243,17 @@ main (int argc, char **argv) | |||
| 245 | 243 | ||
| 246 | #ifdef __CYGWIN__ | 244 | #ifdef __CYGWIN__ | 
| 247 | if (strncmp(path->name, "/cygdrive/", 10) != 0 || strlen(path->name) > 11) | 245 | if (strncmp(path->name, "/cygdrive/", 10) != 0 || strlen(path->name) > 11) | 
| 248 | continue; | 246 | continue; | 
| 249 | snprintf(mountdir, sizeof(mountdir), "%s:\\", me->me_mountdir + 10); | 247 | snprintf(mountdir, sizeof(mountdir), "%s:\\", me->me_mountdir + 10); | 
| 250 | if (GetDriveType(mountdir) != DRIVE_FIXED) | 248 | if (GetDriveType(mountdir) != DRIVE_FIXED) | 
| 251 | me->me_remote = 1; | 249 | me->me_remote = 1; | 
| 252 | #endif | 250 | #endif | 
| 253 | /* Filters */ | 251 | /* Filters */ | 
| 254 | 252 | ||
| 255 | /* Remove filesystems already seen */ | 253 | /* Remove filesystems already seen */ | 
| 256 | if (np_seen_name(seen, me->me_mountdir)) { | 254 | if (np_seen_name(seen, me->me_mountdir)) { | 
| 257 | continue; | 255 | continue; | 
| 258 | } | 256 | } | 
| 259 | np_add_name(&seen, me->me_mountdir); | 257 | np_add_name(&seen, me->me_mountdir); | 
| 260 | 258 | ||
| 261 | if (path->group == NULL) { | 259 | if (path->group == NULL) { | 
| @@ -288,8 +286,17 @@ main (int argc, char **argv) | |||
| 288 | get_stats (path, &fsp); | 286 | get_stats (path, &fsp); | 
| 289 | 287 | ||
| 290 | if (verbose >= 3) { | 288 | if (verbose >= 3) { | 
| 291 | printf ("For %s, used_pct=%g free_pct=%g used_units=%g free_units=%g total_units=%g used_inodes_pct=%g free_inodes_pct=%g fsp.fsu_blocksize=%llu mult=%llu\n", | 289 | printf ("For %s, used_pct=%g free_pct=%g used_units=%llu free_units=%llu total_units=%llu used_inodes_pct=%g free_inodes_pct=%g fsp.fsu_blocksize=%llu mult=%llu\n", | 
| 292 | me->me_mountdir, path->dused_pct, path->dfree_pct, path->dused_units, path->dfree_units, path->dtotal_units, path->dused_inodes_percent, path->dfree_inodes_percent, fsp.fsu_blocksize, mult); | 290 | me->me_mountdir, | 
| 291 | path->dused_pct, | ||
| 292 | path->dfree_pct, | ||
| 293 | path->dused_units, | ||
| 294 | path->dfree_units, | ||
| 295 | path->dtotal_units, | ||
| 296 | path->dused_inodes_percent, | ||
| 297 | path->dfree_inodes_percent, | ||
| 298 | fsp.fsu_blocksize, | ||
| 299 | mult); | ||
| 293 | } | 300 | } | 
| 294 | 301 | ||
| 295 | /* Threshold comparisons */ | 302 | /* Threshold comparisons */ | 
| @@ -326,77 +333,79 @@ main (int argc, char **argv) | |||
| 326 | */ | 333 | */ | 
| 327 | 334 | ||
| 328 | /* *_high_tide must be reinitialized at each run */ | 335 | /* *_high_tide must be reinitialized at each run */ | 
| 329 | warning_high_tide = UINT_MAX; | 336 | uint64_t warning_high_tide = UINT64_MAX; | 
| 330 | critical_high_tide = UINT_MAX; | ||
| 331 | 337 | ||
| 332 | if (path->freespace_units->warning != NULL) { | 338 | if (path->freespace_units->warning != NULL) { | 
| 333 | warning_high_tide = path->dtotal_units - path->freespace_units->warning->end; | 339 | warning_high_tide = (path->dtotal_units - path->freespace_units->warning->end) * mult; | 
| 334 | } | 340 | } | 
| 335 | if (path->freespace_percent->warning != NULL) { | 341 | if (path->freespace_percent->warning != NULL) { | 
| 336 | warning_high_tide = abs( min( (double) warning_high_tide, (double) (1.0 - path->freespace_percent->warning->end/100)*path->dtotal_units )); | 342 | warning_high_tide = min( warning_high_tide, (uint64_t)((1.0 - path->freespace_percent->warning->end/100) * (path->dtotal_units * mult)) ); | 
| 337 | } | 343 | } | 
| 344 | |||
| 345 | uint64_t critical_high_tide = UINT64_MAX; | ||
| 346 | |||
| 338 | if (path->freespace_units->critical != NULL) { | 347 | if (path->freespace_units->critical != NULL) { | 
| 339 | critical_high_tide = path->dtotal_units - path->freespace_units->critical->end; | 348 | critical_high_tide = (path->dtotal_units - path->freespace_units->critical->end) * mult; | 
| 340 | } | 349 | } | 
| 341 | if (path->freespace_percent->critical != NULL) { | 350 | if (path->freespace_percent->critical != NULL) { | 
| 342 | critical_high_tide = abs( min( (double) critical_high_tide, (double) (1.0 - path->freespace_percent->critical->end/100)*path->dtotal_units )); | 351 | critical_high_tide = min( critical_high_tide, (uint64_t)((1.0 - path->freespace_percent->critical->end/100) * (path->dtotal_units * mult)) ); | 
| 343 | } | 352 | } | 
| 344 | 353 | ||
| 345 | /* Nb: *_high_tide are unset when == UINT_MAX */ | 354 | /* Nb: *_high_tide are unset when == UINT64_MAX */ | 
| 346 | xasprintf (&perf, "%s %s", perf, | 355 | xasprintf (&perf, "%s %s", perf, | 
| 347 | perfdata ((!strcmp(me->me_mountdir, "none") || display_mntp) ? me->me_devname : me->me_mountdir, | 356 | perfdata_uint64 ( | 
| 348 | path->dused_units, units, | 357 | (!strcmp(me->me_mountdir, "none") || display_mntp) ? me->me_devname : me->me_mountdir, | 
| 349 | (warning_high_tide != UINT_MAX ? TRUE : FALSE), warning_high_tide, | 358 | path->dused_units * mult, "B", | 
| 350 | (critical_high_tide != UINT_MAX ? TRUE : FALSE), critical_high_tide, | 359 | (warning_high_tide == UINT64_MAX ? FALSE : TRUE), warning_high_tide, | 
| 351 | TRUE, 0, | 360 | (critical_high_tide == UINT64_MAX ? FALSE : TRUE), critical_high_tide, | 
| 352 | TRUE, path->dtotal_units)); | 361 | TRUE, 0, | 
| 362 | TRUE, path->dtotal_units * mult)); | ||
| 353 | 363 | ||
| 354 | if (display_inodes_perfdata) { | 364 | if (display_inodes_perfdata) { | 
| 355 | /* *_high_tide must be reinitialized at each run */ | 365 | /* *_high_tide must be reinitialized at each run */ | 
| 356 | warning_high_tide = UINT_MAX; | 366 | warning_high_tide = UINT64_MAX; | 
| 357 | critical_high_tide = UINT_MAX; | 367 | critical_high_tide = UINT64_MAX; | 
| 358 | 368 | ||
| 359 | if (path->freeinodes_percent->warning != NULL) { | 369 | if (path->freeinodes_percent->warning != NULL) { | 
| 360 | warning_high_tide = abs( min( (double) warning_high_tide, (double) (1.0 - path->freeinodes_percent->warning->end/100)*path->inodes_total )); | 370 | warning_high_tide = llabs( min( (double) warning_high_tide, (double) (1.0 - path->freeinodes_percent->warning->end/100)*path->inodes_total )); | 
| 361 | } | 371 | } | 
| 362 | if (path->freeinodes_percent->critical != NULL) { | 372 | if (path->freeinodes_percent->critical != NULL) { | 
| 363 | critical_high_tide = abs( min( (double) critical_high_tide, (double) (1.0 - path->freeinodes_percent->critical->end/100)*path->inodes_total )); | 373 | critical_high_tide = llabs( min( (double) critical_high_tide, (double) (1.0 - path->freeinodes_percent->critical->end/100)*path->inodes_total )); | 
| 364 | } | 374 | } | 
| 365 | 375 | ||
| 366 | xasprintf (&perf_ilabel, "%s (inodes)", (!strcmp(me->me_mountdir, "none") || display_mntp) ? me->me_devname : me->me_mountdir); | 376 | xasprintf (&perf_ilabel, "%s (inodes)", (!strcmp(me->me_mountdir, "none") || display_mntp) ? me->me_devname : me->me_mountdir); | 
| 367 | /* Nb: *_high_tide are unset when == UINT_MAX */ | 377 | /* Nb: *_high_tide are unset when == UINT64_MAX */ | 
| 368 | xasprintf (&perf, "%s %s", perf, | 378 | xasprintf (&perf, "%s %s", perf, | 
| 369 | perfdata (perf_ilabel, | 379 | perfdata_uint64 (perf_ilabel, | 
| 370 | path->inodes_used, "", | 380 | path->inodes_used, "", | 
| 371 | (warning_high_tide != UINT_MAX ? TRUE : FALSE), warning_high_tide, | 381 | (warning_high_tide != UINT64_MAX ? TRUE : FALSE), warning_high_tide, | 
| 372 | (critical_high_tide != UINT_MAX ? TRUE : FALSE), critical_high_tide, | 382 | (critical_high_tide != UINT64_MAX ? TRUE : FALSE), critical_high_tide, | 
| 373 | TRUE, 0, | 383 | TRUE, 0, | 
| 374 | TRUE, path->inodes_total)); | 384 | TRUE, path->inodes_total)); | 
| 375 | } | 385 | } | 
| 376 | 386 | ||
| 377 | if (disk_result==STATE_OK && erronly && !verbose) | 387 | if (disk_result==STATE_OK && erronly && !verbose) | 
| 378 | continue; | 388 | continue; | 
| 379 | 389 | ||
| 380 | if(disk_result && verbose >= 1) { | 390 | if(disk_result && verbose >= 1) { | 
| 381 | xasprintf(&flag_header, " %s [", state_text (disk_result)); | 391 | xasprintf(&flag_header, " %s [", state_text (disk_result)); | 
| 382 | } else { | 392 | } else { | 
| 383 | xasprintf(&flag_header, ""); | 393 | xasprintf(&flag_header, ""); | 
| 384 | } | 394 | } | 
| 385 | xasprintf (&output, "%s%s %s %.0f %s (%.0f%%", | 395 | xasprintf (&output, "%s%s %s %llu%s (%.0f%%", | 
| 386 | output, flag_header, | 396 | output, flag_header, | 
| 387 | (!strcmp(me->me_mountdir, "none") || display_mntp) ? me->me_devname : me->me_mountdir, | 397 | (!strcmp(me->me_mountdir, "none") || display_mntp) ? me->me_devname : me->me_mountdir, | 
| 388 | path->dfree_units, | 398 | path->dfree_units, | 
| 389 | units, | 399 | units, | 
| 390 | path->dfree_pct); | 400 | path->dfree_pct); | 
| 391 | if (path->dused_inodes_percent < 0) { | 401 | if (path->dused_inodes_percent < 0) { | 
| 392 | xasprintf(&output, "%s inode=-)%s;", output, (disk_result ? "]" : "")); | 402 | xasprintf(&output, "%s inode=-)%s;", output, (disk_result ? "]" : "")); | 
| 393 | } else { | 403 | } else { | 
| 394 | xasprintf(&output, "%s inode=%.0f%%)%s;", output, path->dfree_inodes_percent, ((disk_result && verbose >= 1) ? "]" : "")); | 404 | xasprintf(&output, "%s inode=%.0f%%)%s;", output, path->dfree_inodes_percent, ((disk_result && verbose >= 1) ? "]" : "")); | 
| 395 | } | 405 | } | 
| 396 | free(flag_header); | 406 | free(flag_header); | 
| 397 | /* TODO: Need to do a similar debug line | 407 | /* TODO: Need to do a similar debug line | 
| 398 | xasprintf (&details, _("%s\n\ | 408 | xasprintf (&details, _("%s\n\%.0f of %.0f %s (%.0f%% inode=%.0f%%) free on %s (type %s mounted on %s) warn:%lu crit:%lu warn%%:%.0f%% crit%%:%.0f%%"), | 
| 399 | %.0f of %.0f %s (%.0f%% inode=%.0f%%) free on %s (type %s mounted on %s) warn:%lu crit:%lu warn%%:%.0f%% crit%%:%.0f%%"), | ||
| 400 | details, dfree_units, dtotal_units, units, dfree_pct, inode_space_pct, | 409 | details, dfree_units, dtotal_units, units, dfree_pct, inode_space_pct, | 
| 401 | me->me_devname, me->me_type, me->me_mountdir, | 410 | me->me_devname, me->me_type, me->me_mountdir, | 
| 402 | (unsigned long)w_df, (unsigned long)c_df, w_dfp, c_dfp); | 411 | (unsigned long)w_df, (unsigned long)c_df, w_dfp, c_dfp); | 
| @@ -557,14 +566,14 @@ process_arguments (int argc, char **argv) | |||
| 557 | } | 566 | } | 
| 558 | break; | 567 | break; | 
| 559 | 568 | ||
| 560 | case 'W': /* warning inode threshold */ | 569 | case 'W': /* warning inode threshold */ | 
| 561 | if (*optarg == '@') { | 570 | if (*optarg == '@') { | 
| 562 | warn_freeinodes_percent = optarg; | 571 | warn_freeinodes_percent = optarg; | 
| 563 | } else { | 572 | } else { | 
| 564 | xasprintf(&warn_freeinodes_percent, "@%s", optarg); | 573 | xasprintf(&warn_freeinodes_percent, "@%s", optarg); | 
| 565 | } | 574 | } | 
| 566 | break; | 575 | break; | 
| 567 | case 'K': /* critical inode threshold */ | 576 | case 'K': /* critical inode threshold */ | 
| 568 | if (*optarg == '@') { | 577 | if (*optarg == '@') { | 
| 569 | crit_freeinodes_percent = optarg; | 578 | crit_freeinodes_percent = optarg; | 
| 570 | } else { | 579 | } else { | 
| @@ -574,21 +583,24 @@ process_arguments (int argc, char **argv) | |||
| 574 | case 'u': | 583 | case 'u': | 
| 575 | if (units) | 584 | if (units) | 
| 576 | free(units); | 585 | free(units); | 
| 577 | if (! strcmp (optarg, "bytes")) { | 586 | if (! strcasecmp (optarg, "bytes")) { | 
| 578 | mult = (uintmax_t)1; | 587 | mult = (uintmax_t)1; | 
| 579 | units = strdup ("B"); | 588 | units = strdup ("B"); | 
| 580 | } else if (! strcmp (optarg, "kB")) { | 589 | } else if ( (! strcmp (optarg, "kB")) || (!strcmp(optarg, "KiB")) ) { | 
| 581 | mult = (uintmax_t)1024; | 590 | mult = (uintmax_t)1024; | 
| 582 | units = strdup ("kB"); | 591 | units = strdup ("kiB"); | 
| 583 | } else if (! strcmp (optarg, "MB")) { | 592 | } else if ( (! strcmp (optarg, "MB")) || (!strcmp(optarg, "MiB")) ) { | 
| 584 | mult = (uintmax_t)1024 * 1024; | 593 | mult = (uintmax_t)1024 * 1024; | 
| 585 | units = strdup ("MB"); | 594 | units = strdup ("MiB"); | 
| 586 | } else if (! strcmp (optarg, "GB")) { | 595 | } else if ( (! strcmp (optarg, "GB")) || (!strcmp(optarg, "GiB")) ) { | 
| 587 | mult = (uintmax_t)1024 * 1024 * 1024; | 596 | mult = (uintmax_t)1024 * 1024 * 1024; | 
| 588 | units = strdup ("GB"); | 597 | units = strdup ("GiB"); | 
| 589 | } else if (! strcmp (optarg, "TB")) { | 598 | } else if ( (! strcmp (optarg, "TB")) || (!strcmp(optarg, "TiB")) ) { | 
| 590 | mult = (uintmax_t)1024 * 1024 * 1024 * 1024; | 599 | mult = (uintmax_t)1024 * 1024 * 1024 * 1024; | 
| 591 | units = strdup ("TB"); | 600 | units = strdup ("TiB"); | 
| 601 | } else if ( (! strcmp (optarg, "PB")) || (!strcmp(optarg, "PiB")) ) { | ||
| 602 | mult = (uintmax_t)1024 * 1024 * 1024 * 1024 * 1024; | ||
| 603 | units = strdup ("PiB"); | ||
| 592 | } else { | 604 | } else { | 
| 593 | die (STATE_UNKNOWN, _("unit type %s not known\n"), optarg); | 605 | die (STATE_UNKNOWN, _("unit type %s not known\n"), optarg); | 
| 594 | } | 606 | } | 
| @@ -599,13 +611,13 @@ process_arguments (int argc, char **argv) | |||
| 599 | mult = 1024; | 611 | mult = 1024; | 
| 600 | if (units) | 612 | if (units) | 
| 601 | free(units); | 613 | free(units); | 
| 602 | units = strdup ("kB"); | 614 | units = strdup ("kiB"); | 
| 603 | break; | 615 | break; | 
| 604 | case 'm': /* display mountpoint */ | 616 | case 'm': /* display mountpoint */ | 
| 605 | mult = 1024 * 1024; | 617 | mult = 1024 * 1024; | 
| 606 | if (units) | 618 | if (units) | 
| 607 | free(units); | 619 | free(units); | 
| 608 | units = strdup ("MB"); | 620 | units = strdup ("MiB"); | 
| 609 | break; | 621 | break; | 
| 610 | case 'L': | 622 | case 'L': | 
| 611 | stat_remote_fs = 1; | 623 | stat_remote_fs = 1; | 
| @@ -812,7 +824,7 @@ process_arguments (int argc, char **argv) | |||
| 812 | } | 824 | } | 
| 813 | 825 | ||
| 814 | if (units == NULL) { | 826 | if (units == NULL) { | 
| 815 | units = strdup ("MB"); | 827 | units = strdup ("MiB"); | 
| 816 | mult = (uintmax_t)1024 * 1024; | 828 | mult = (uintmax_t)1024 * 1024; | 
| 817 | } | 829 | } | 
| 818 | 830 | ||
| @@ -1026,20 +1038,20 @@ get_stats (struct parameter_list *p, struct fs_usage *fsp) { | |||
| 1026 | if (p_list->group && ! (strcmp(p_list->group, p->group))) { | 1038 | if (p_list->group && ! (strcmp(p_list->group, p->group))) { | 
| 1027 | stat_path(p_list); | 1039 | stat_path(p_list); | 
| 1028 | get_fs_usage (p_list->best_match->me_mountdir, p_list->best_match->me_devname, &tmpfsp); | 1040 | get_fs_usage (p_list->best_match->me_mountdir, p_list->best_match->me_devname, &tmpfsp); | 
| 1029 | get_path_stats(p_list, &tmpfsp); | 1041 | get_path_stats(p_list, &tmpfsp); | 
| 1030 | if (verbose >= 3) | 1042 | if (verbose >= 3) | 
| 1031 | printf("Group %s: adding %llu blocks sized %llu, (%s) used_units=%g free_units=%g total_units=%g fsu_blocksize=%llu mult=%llu\n", | 1043 | printf("Group %s: adding %llu blocks sized %llu, (%s) used_units=%g free_units=%g total_units=%g fsu_blocksize=%llu mult=%llu\n", | 
| 1032 | p_list->group, tmpfsp.fsu_bavail, tmpfsp.fsu_blocksize, p_list->best_match->me_mountdir, p_list->dused_units, p_list->dfree_units, | 1044 | p_list->group, tmpfsp.fsu_bavail, tmpfsp.fsu_blocksize, p_list->best_match->me_mountdir, p_list->dused_units, p_list->dfree_units, | 
| 1033 | p_list->dtotal_units, mult); | 1045 | p_list->dtotal_units, mult); | 
| 1034 | 1046 | ||
| 1035 | /* prevent counting the first FS of a group twice since its parameter_list entry | 1047 | /* prevent counting the first FS of a group twice since its parameter_list entry | 
| 1036 | * is used to carry the information of all file systems of the entire group */ | 1048 | * is used to carry the information of all file systems of the entire group */ | 
| 1037 | if (! first) { | 1049 | if (! first) { | 
| 1038 | p->total += p_list->total; | 1050 | p->total += p_list->total; | 
| 1039 | p->available += p_list->available; | 1051 | p->available += p_list->available; | 
| 1040 | p->available_to_root += p_list->available_to_root; | 1052 | p->available_to_root += p_list->available_to_root; | 
| 1041 | p->used += p_list->used; | 1053 | p->used += p_list->used; | 
| 1042 | 1054 | ||
| 1043 | p->dused_units += p_list->dused_units; | 1055 | p->dused_units += p_list->dused_units; | 
| 1044 | p->dfree_units += p_list->dfree_units; | 1056 | p->dfree_units += p_list->dfree_units; | 
| 1045 | p->dtotal_units += p_list->dtotal_units; | 1057 | p->dtotal_units += p_list->dtotal_units; | 
| @@ -1050,28 +1062,31 @@ get_stats (struct parameter_list *p, struct fs_usage *fsp) { | |||
| 1050 | } | 1062 | } | 
| 1051 | first = 0; | 1063 | first = 0; | 
| 1052 | } | 1064 | } | 
| 1053 | if (verbose >= 3) | 1065 | if (verbose >= 3) | 
| 1054 | printf("Group %s now has: used_units=%g free_units=%g total_units=%g fsu_blocksize=%llu mult=%llu\n", | 1066 | printf("Group %s now has: used_units=%g free_units=%g total_units=%g fsu_blocksize=%llu mult=%llu\n", | 
| 1055 | p->group, tmpfsp.fsu_bavail, tmpfsp.fsu_blocksize, p->best_match->me_mountdir, p->dused_units, | 1067 | p->group, | 
| 1056 | p->dfree_units, p->dtotal_units, mult); | 1068 | tmpfsp.fsu_bavail, | 
| 1069 | tmpfsp.fsu_blocksize, | ||
| 1070 | p->best_match->me_mountdir, | ||
| 1071 | p->dused_units, | ||
| 1072 | p->dfree_units, | ||
| 1073 | p->dtotal_units, | ||
| 1074 | mult); | ||
| 1057 | } | 1075 | } | 
| 1058 | /* modify devname and mountdir for output */ | 1076 | /* modify devname and mountdir for output */ | 
| 1059 | p->best_match->me_mountdir = p->best_match->me_devname = p->group; | 1077 | p->best_match->me_mountdir = p->best_match->me_devname = p->group; | 
| 1060 | } | 1078 | } | 
| 1061 | /* finally calculate percentages for either plain FS or summed up group */ | 1079 | /* finally calculate percentages for either plain FS or summed up group */ | 
| 1062 | p->dused_pct = calculate_percent( p->used, p->used + p->available ); /* used + available can never be > uintmax */ | 1080 | p->dused_pct = calculate_percent( p->used, p->used + p->available ); /* used + available can never be > uintmax */ | 
| 1063 | p->dfree_pct = 100 - p->dused_pct; | 1081 | p->dfree_pct = 100 - p->dused_pct; | 
| 1064 | p->dused_inodes_percent = calculate_percent(p->inodes_total - p->inodes_free, p->inodes_total); | 1082 | p->dused_inodes_percent = calculate_percent(p->inodes_total - p->inodes_free, p->inodes_total); | 
| 1065 | p->dfree_inodes_percent = 100 - p->dused_inodes_percent; | 1083 | p->dfree_inodes_percent = 100 - p->dused_inodes_percent; | 
| 1066 | 1084 | ||
| 1067 | } | 1085 | } | 
| 1068 | 1086 | ||
| 1069 | void | 1087 | void | 
| 1070 | get_path_stats (struct parameter_list *p, struct fs_usage *fsp) { | 1088 | get_path_stats (struct parameter_list *p, struct fs_usage *fsp) { | 
| 1071 | /* 2007-12-08 - Workaround for Gnulib reporting insanely high available | 1089 | p->available = fsp->fsu_bavail; | 
| 1072 | * space on BSD (the actual value should be negative but fsp->fsu_bavail | ||
| 1073 | * is unsigned) */ | ||
| 1074 | p->available = fsp->fsu_bavail > fsp->fsu_bfree ? 0 : fsp->fsu_bavail; | ||
| 1075 | p->available_to_root = fsp->fsu_bfree; | 1090 | p->available_to_root = fsp->fsu_bfree; | 
| 1076 | p->used = fsp->fsu_blocks - fsp->fsu_bfree; | 1091 | p->used = fsp->fsu_blocks - fsp->fsu_bfree; | 
| 1077 | if (freespace_ignore_reserved) { | 1092 | if (freespace_ignore_reserved) { | 
| @@ -1081,7 +1096,7 @@ get_path_stats (struct parameter_list *p, struct fs_usage *fsp) { | |||
| 1081 | /* default behaviour : take all the blocks into account */ | 1096 | /* default behaviour : take all the blocks into account */ | 
| 1082 | p->total = fsp->fsu_blocks; | 1097 | p->total = fsp->fsu_blocks; | 
| 1083 | } | 1098 | } | 
| 1084 | 1099 | ||
| 1085 | p->dused_units = p->used*fsp->fsu_blocksize/mult; | 1100 | p->dused_units = p->used*fsp->fsu_blocksize/mult; | 
| 1086 | p->dfree_units = p->available*fsp->fsu_blocksize/mult; | 1101 | p->dfree_units = p->available*fsp->fsu_blocksize/mult; | 
| 1087 | p->dtotal_units = p->total*fsp->fsu_blocksize/mult; | 1102 | p->dtotal_units = p->total*fsp->fsu_blocksize/mult; | 
| diff --git a/plugins/check_dns.c b/plugins/check_dns.c index 0f2e6541..9de6caf5 100644 --- a/plugins/check_dns.c +++ b/plugins/check_dns.c | |||
| @@ -41,7 +41,7 @@ const char *email = "devel@monitoring-plugins.org"; | |||
| 41 | 41 | ||
| 42 | int process_arguments (int, char **); | 42 | int process_arguments (int, char **); | 
| 43 | int validate_arguments (void); | 43 | int validate_arguments (void); | 
| 44 | int error_scan (char *); | 44 | int error_scan (char *, int *); | 
| 45 | int ip_match_cidr(const char *, const char *); | 45 | int ip_match_cidr(const char *, const char *); | 
| 46 | unsigned long ip2long(const char *); | 46 | unsigned long ip2long(const char *); | 
| 47 | void print_help (void); | 47 | void print_help (void); | 
| @@ -54,6 +54,7 @@ char ptr_server[ADDRESS_LENGTH] = ""; | |||
| 54 | int verbose = FALSE; | 54 | int verbose = FALSE; | 
| 55 | char **expected_address = NULL; | 55 | char **expected_address = NULL; | 
| 56 | int expected_address_cnt = 0; | 56 | int expected_address_cnt = 0; | 
| 57 | int expect_nxdomain = FALSE; | ||
| 57 | 58 | ||
| 58 | int expect_authority = FALSE; | 59 | int expect_authority = FALSE; | 
| 59 | int all_match = FALSE; | 60 | int all_match = FALSE; | 
| @@ -87,6 +88,7 @@ main (int argc, char **argv) | |||
| 87 | int parse_address = FALSE; /* This flag scans for Address: but only after Name: */ | 88 | int parse_address = FALSE; /* This flag scans for Address: but only after Name: */ | 
| 88 | output chld_out, chld_err; | 89 | output chld_out, chld_err; | 
| 89 | size_t i; | 90 | size_t i; | 
| 91 | int is_nxdomain = FALSE; | ||
| 90 | 92 | ||
| 91 | setlocale (LC_ALL, ""); | 93 | setlocale (LC_ALL, ""); | 
| 92 | bindtextdomain (PACKAGE, LOCALEDIR); | 94 | bindtextdomain (PACKAGE, LOCALEDIR); | 
| @@ -186,7 +188,7 @@ main (int argc, char **argv) | |||
| 186 | } | 188 | } | 
| 187 | 189 | ||
| 188 | 190 | ||
| 189 | result = error_scan (chld_out.line[i]); | 191 | result = error_scan (chld_out.line[i], &is_nxdomain); | 
| 190 | if (result != STATE_OK) { | 192 | if (result != STATE_OK) { | 
| 191 | msg = strchr (chld_out.line[i], ':'); | 193 | msg = strchr (chld_out.line[i], ':'); | 
| 192 | if(msg) msg++; | 194 | if(msg) msg++; | 
| @@ -199,8 +201,8 @@ main (int argc, char **argv) | |||
| 199 | if (verbose) | 201 | if (verbose) | 
| 200 | puts(chld_err.line[i]); | 202 | puts(chld_err.line[i]); | 
| 201 | 203 | ||
| 202 | if (error_scan (chld_err.line[i]) != STATE_OK) { | 204 | if (error_scan (chld_err.line[i], &is_nxdomain) != STATE_OK) { | 
| 203 | result = max_state (result, error_scan (chld_err.line[i])); | 205 | result = max_state (result, error_scan (chld_err.line[i], &is_nxdomain)); | 
| 204 | msg = strchr(input_buffer, ':'); | 206 | msg = strchr(input_buffer, ':'); | 
| 205 | if(msg) | 207 | if(msg) | 
| 206 | msg++; | 208 | msg++; | 
| @@ -209,6 +211,10 @@ main (int argc, char **argv) | |||
| 209 | } | 211 | } | 
| 210 | } | 212 | } | 
| 211 | 213 | ||
| 214 | if (is_nxdomain && !expect_nxdomain) { | ||
| 215 | die (STATE_CRITICAL, _("Domain '%s' was not found by the server\n"), query_address); | ||
| 216 | } | ||
| 217 | |||
| 212 | if (addresses) { | 218 | if (addresses) { | 
| 213 | int i,slen; | 219 | int i,slen; | 
| 214 | char *adrp; | 220 | char *adrp; | 
| @@ -260,6 +266,16 @@ main (int argc, char **argv) | |||
| 260 | } | 266 | } | 
| 261 | } | 267 | } | 
| 262 | 268 | ||
| 269 | if (expect_nxdomain) { | ||
| 270 | if (!is_nxdomain) { | ||
| 271 | result = STATE_CRITICAL; | ||
| 272 | xasprintf(&msg, _("Domain '%s' was found by the server: '%s'\n"), query_address, address); | ||
| 273 | } else { | ||
| 274 | if (address != NULL) free(address); | ||
| 275 | address = "NXDOMAIN"; | ||
| 276 | } | ||
| 277 | } | ||
| 278 | |||
| 263 | /* check if authoritative */ | 279 | /* check if authoritative */ | 
| 264 | if (result == STATE_OK && expect_authority && non_authoritative) { | 280 | if (result == STATE_OK && expect_authority && non_authoritative) { | 
| 265 | result = STATE_CRITICAL; | 281 | result = STATE_CRITICAL; | 
| @@ -339,9 +355,15 @@ ip2long(const char* src) { | |||
| 339 | } | 355 | } | 
| 340 | 356 | ||
| 341 | int | 357 | int | 
| 342 | error_scan (char *input_buffer) | 358 | error_scan (char *input_buffer, int *is_nxdomain) | 
| 343 | { | 359 | { | 
| 344 | 360 | ||
| 361 | const int nxdomain = strstr (input_buffer, "Non-existent") || | ||
| 362 | strstr (input_buffer, "** server can't find") || | ||
| 363 | strstr (input_buffer, "** Can't find") || | ||
| 364 | strstr (input_buffer, "NXDOMAIN"); | ||
| 365 | if (nxdomain) *is_nxdomain = TRUE; | ||
| 366 | |||
| 345 | /* the DNS lookup timed out */ | 367 | /* the DNS lookup timed out */ | 
| 346 | if (strstr (input_buffer, _("Note: nslookup is deprecated and may be removed from future releases.")) || | 368 | if (strstr (input_buffer, _("Note: nslookup is deprecated and may be removed from future releases.")) || | 
| 347 | strstr (input_buffer, _("Consider using the `dig' or `host' programs instead. Run nslookup with")) || | 369 | strstr (input_buffer, _("Consider using the `dig' or `host' programs instead. Run nslookup with")) || | 
| @@ -360,7 +382,7 @@ error_scan (char *input_buffer) | |||
| 360 | 382 | ||
| 361 | /* Connection was refused */ | 383 | /* Connection was refused */ | 
| 362 | else if (strstr (input_buffer, "Connection refused") || | 384 | else if (strstr (input_buffer, "Connection refused") || | 
| 363 | strstr (input_buffer, "Couldn't find server") || | 385 | strstr (input_buffer, "Couldn't find server") || | 
| 364 | strstr (input_buffer, "Refused") || | 386 | strstr (input_buffer, "Refused") || | 
| 365 | (strstr (input_buffer, "** server can't find") && | 387 | (strstr (input_buffer, "** server can't find") && | 
| 366 | strstr (input_buffer, ": REFUSED"))) | 388 | strstr (input_buffer, ": REFUSED"))) | 
| @@ -374,13 +396,6 @@ error_scan (char *input_buffer) | |||
| 374 | else if (strstr (input_buffer, "No information")) | 396 | else if (strstr (input_buffer, "No information")) | 
| 375 | die (STATE_CRITICAL, _("No information returned by DNS server at %s\n"), dns_server); | 397 | die (STATE_CRITICAL, _("No information returned by DNS server at %s\n"), dns_server); | 
| 376 | 398 | ||
| 377 | /* Host or domain name does not exist */ | ||
| 378 | else if (strstr (input_buffer, "Non-existent") || | ||
| 379 | strstr (input_buffer, "** server can't find") || | ||
| 380 | strstr (input_buffer, "** Can't find") || | ||
| 381 | strstr (input_buffer,"NXDOMAIN")) | ||
| 382 | die (STATE_CRITICAL, _("Domain %s was not found by the server\n"), query_address); | ||
| 383 | |||
| 384 | /* Network is unreachable */ | 399 | /* Network is unreachable */ | 
| 385 | else if (strstr (input_buffer, "Network is unreachable")) | 400 | else if (strstr (input_buffer, "Network is unreachable")) | 
| 386 | die (STATE_CRITICAL, _("Network is unreachable\n")); | 401 | die (STATE_CRITICAL, _("Network is unreachable\n")); | 
| @@ -417,6 +432,7 @@ process_arguments (int argc, char **argv) | |||
| 417 | {"server", required_argument, 0, 's'}, | 432 | {"server", required_argument, 0, 's'}, | 
| 418 | {"reverse-server", required_argument, 0, 'r'}, | 433 | {"reverse-server", required_argument, 0, 'r'}, | 
| 419 | {"expected-address", required_argument, 0, 'a'}, | 434 | {"expected-address", required_argument, 0, 'a'}, | 
| 435 | {"expect-nxdomain", no_argument, 0, 'n'}, | ||
| 420 | {"expect-authority", no_argument, 0, 'A'}, | 436 | {"expect-authority", no_argument, 0, 'A'}, | 
| 421 | {"all", no_argument, 0, 'L'}, | 437 | {"all", no_argument, 0, 'L'}, | 
| 422 | {"warning", required_argument, 0, 'w'}, | 438 | {"warning", required_argument, 0, 'w'}, | 
| @@ -432,7 +448,7 @@ process_arguments (int argc, char **argv) | |||
| 432 | strcpy (argv[c], "-t"); | 448 | strcpy (argv[c], "-t"); | 
| 433 | 449 | ||
| 434 | while (1) { | 450 | while (1) { | 
| 435 | c = getopt_long (argc, argv, "hVvALt:H:s:r:a:w:c:", long_opts, &opt_index); | 451 | c = getopt_long (argc, argv, "hVvALnt:H:s:r:a:w:c:", long_opts, &opt_index); | 
| 436 | 452 | ||
| 437 | if (c == -1 || c == EOF) | 453 | if (c == -1 || c == EOF) | 
| 438 | break; | 454 | break; | 
| @@ -491,6 +507,9 @@ process_arguments (int argc, char **argv) | |||
| 491 | expected_address_cnt++; | 507 | expected_address_cnt++; | 
| 492 | } | 508 | } | 
| 493 | break; | 509 | break; | 
| 510 | case 'n': /* expect NXDOMAIN */ | ||
| 511 | expect_nxdomain = TRUE; | ||
| 512 | break; | ||
| 494 | case 'A': /* expect authority */ | 513 | case 'A': /* expect authority */ | 
| 495 | expect_authority = TRUE; | 514 | expect_authority = TRUE; | 
| 496 | break; | 515 | break; | 
| @@ -532,8 +551,15 @@ process_arguments (int argc, char **argv) | |||
| 532 | int | 551 | int | 
| 533 | validate_arguments () | 552 | validate_arguments () | 
| 534 | { | 553 | { | 
| 535 | if (query_address[0] == 0) | 554 | if (query_address[0] == 0) { | 
| 555 | printf ("missing --host argument\n"); | ||
| 556 | return ERROR; | ||
| 557 | } | ||
| 558 | |||
| 559 | if (expected_address_cnt > 0 && expect_nxdomain) { | ||
| 560 | printf ("--expected-address and --expect-nxdomain cannot be combined\n"); | ||
| 536 | return ERROR; | 561 | return ERROR; | 
| 562 | } | ||
| 537 | 563 | ||
| 538 | return OK; | 564 | return OK; | 
| 539 | } | 565 | } | 
| @@ -566,6 +592,9 @@ print_help (void) | |||
| 566 | printf (" %s\n", _("Optional IP-ADDRESS/CIDR you expect the DNS server to return. HOST must end")); | 592 | printf (" %s\n", _("Optional IP-ADDRESS/CIDR you expect the DNS server to return. HOST must end")); | 
| 567 | printf (" %s\n", _("with a dot (.). This option can be repeated multiple times (Returns OK if any")); | 593 | printf (" %s\n", _("with a dot (.). This option can be repeated multiple times (Returns OK if any")); | 
| 568 | printf (" %s\n", _("value matches).")); | 594 | printf (" %s\n", _("value matches).")); | 
| 595 | printf (" -n, --expect-nxdomain\n"); | ||
| 596 | printf (" %s\n", _("Expect the DNS server to return NXDOMAIN (i.e. the domain was not found)")); | ||
| 597 | printf (" %s\n", _("Cannot be used together with -a")); | ||
| 569 | printf (" -A, --expect-authority\n"); | 598 | printf (" -A, --expect-authority\n"); | 
| 570 | printf (" %s\n", _("Optionally expect the DNS server to be authoritative for the lookup")); | 599 | printf (" %s\n", _("Optionally expect the DNS server to be authoritative for the lookup")); | 
| 571 | printf (" -w, --warning=seconds\n"); | 600 | printf (" -w, --warning=seconds\n"); | 
| @@ -586,5 +615,5 @@ void | |||
| 586 | print_usage (void) | 615 | print_usage (void) | 
| 587 | { | 616 | { | 
| 588 | printf ("%s\n", _("Usage:")); | 617 | printf ("%s\n", _("Usage:")); | 
| 589 | printf ("%s -H host [-s server] [-a expected-address] [-A] [-t timeout] [-w warn] [-c crit] [-L]\n", progname); | 618 | printf ("%s -H host [-s server] [-a expected-address] [-n] [-A] [-t timeout] [-w warn] [-c crit] [-L]\n", progname); | 
| 590 | } | 619 | } | 
| diff --git a/plugins/check_http.c b/plugins/check_http.c index 0b712665..34fb4f01 100644 --- a/plugins/check_http.c +++ b/plugins/check_http.c | |||
| @@ -1453,8 +1453,8 @@ redir (char *pos, char *status_line) | |||
| 1453 | !strncmp(server_address, addr, MAX_IPV4_HOSTLENGTH) && | 1453 | !strncmp(server_address, addr, MAX_IPV4_HOSTLENGTH) && | 
| 1454 | (host_name && !strncmp(host_name, addr, MAX_IPV4_HOSTLENGTH)) && | 1454 | (host_name && !strncmp(host_name, addr, MAX_IPV4_HOSTLENGTH)) && | 
| 1455 | !strcmp(server_url, url)) | 1455 | !strcmp(server_url, url)) | 
| 1456 | die (STATE_WARNING, | 1456 | die (STATE_CRITICAL, | 
| 1457 | _("HTTP WARNING - redirection creates an infinite loop - %s://%s:%d%s%s\n"), | 1457 | _("HTTP CRITICAL - redirection creates an infinite loop - %s://%s:%d%s%s\n"), | 
| 1458 | type, addr, i, url, (display_html ? "</A>" : "")); | 1458 | type, addr, i, url, (display_html ? "</A>" : "")); | 
| 1459 | 1459 | ||
| 1460 | strcpy (server_type, type); | 1460 | strcpy (server_type, type); | 
| diff --git a/plugins/check_load.c b/plugins/check_load.c index bf7b94b4..0e4de54e 100644 --- a/plugins/check_load.c +++ b/plugins/check_load.c | |||
| @@ -209,7 +209,7 @@ main (int argc, char **argv) | |||
| 209 | else if(la[i] > wload[i]) result = STATE_WARNING; | 209 | else if(la[i] > wload[i]) result = STATE_WARNING; | 
| 210 | } | 210 | } | 
| 211 | 211 | ||
| 212 | printf("%s - %s|", state_text(result), status_line); | 212 | printf("LOAD %s - %s|", state_text(result), status_line); | 
| 213 | for(i = 0; i < 3; i++) | 213 | for(i = 0; i < 3; i++) | 
| 214 | printf("load%d=%.3f;%.3f;%.3f;0; ", nums[i], la[i], wload[i], cload[i]); | 214 | printf("load%d=%.3f;%.3f;%.3f;0; ", nums[i], la[i], wload[i], cload[i]); | 
| 215 | 215 | ||
| diff --git a/plugins/check_procs.c b/plugins/check_procs.c index f7917c34..bae429de 100644 --- a/plugins/check_procs.c +++ b/plugins/check_procs.c | |||
| @@ -1,34 +1,34 @@ | |||
| 1 | /***************************************************************************** | 1 | /***************************************************************************** | 
| 2 | * | 2 | * | 
| 3 | * Monitoring check_procs plugin | 3 | * Monitoring check_procs plugin | 
| 4 | * | 4 | * | 
| 5 | * License: GPL | 5 | * License: GPL | 
| 6 | * Copyright (c) 2000-2008 Monitoring Plugins Development Team | 6 | * Copyright (c) 2000-2008 Monitoring Plugins Development Team | 
| 7 | * | 7 | * | 
| 8 | * Description: | 8 | * Description: | 
| 9 | * | 9 | * | 
| 10 | * This file contains the check_procs plugin | 10 | * This file contains the check_procs plugin | 
| 11 | * | 11 | * | 
| 12 | * Checks all processes and generates WARNING or CRITICAL states if the | 12 | * Checks all processes and generates WARNING or CRITICAL states if the | 
| 13 | * specified metric is outside the required threshold ranges. The metric | 13 | * specified metric is outside the required threshold ranges. The metric | 
| 14 | * defaults to number of processes. Search filters can be applied to limit | 14 | * defaults to number of processes. Search filters can be applied to limit | 
| 15 | * the processes to check. | 15 | * the processes to check. | 
| 16 | * | 16 | * | 
| 17 | * | 17 | * | 
| 18 | * This program is free software: you can redistribute it and/or modify | 18 | * This program is free software: you can redistribute it and/or modify | 
| 19 | * it under the terms of the GNU General Public License as published by | 19 | * it under the terms of the GNU General Public License as published by | 
| 20 | * the Free Software Foundation, either version 3 of the License, or | 20 | * the Free Software Foundation, either version 3 of the License, or | 
| 21 | * (at your option) any later version. | 21 | * (at your option) any later version. | 
| 22 | * | 22 | * | 
| 23 | * This program is distributed in the hope that it will be useful, | 23 | * This program is distributed in the hope that it will be useful, | 
| 24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 26 | * GNU General Public License for more details. | 26 | * GNU General Public License for more details. | 
| 27 | * | 27 | * | 
| 28 | * You should have received a copy of the GNU General Public License | 28 | * You should have received a copy of the GNU General Public License | 
| 29 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 29 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 
| 30 | * | 30 | * | 
| 31 | * | 31 | * | 
| 32 | *****************************************************************************/ | 32 | *****************************************************************************/ | 
| 33 | 33 | ||
| 34 | const char *progname = "check_procs"; | 34 | const char *progname = "check_procs"; | 
| @@ -50,7 +50,7 @@ const char *email = "devel@monitoring-plugins.org"; | |||
| 50 | 50 | ||
| 51 | int process_arguments (int, char **); | 51 | int process_arguments (int, char **); | 
| 52 | int validate_arguments (void); | 52 | int validate_arguments (void); | 
| 53 | int convert_to_seconds (char *); | 53 | int convert_to_seconds (char *); | 
| 54 | void print_help (void); | 54 | void print_help (void); | 
| 55 | void print_usage (void); | 55 | void print_usage (void); | 
| 56 | 56 | ||
| @@ -230,9 +230,9 @@ main (int argc, char **argv) | |||
| 230 | procseconds = convert_to_seconds(procetime); | 230 | procseconds = convert_to_seconds(procetime); | 
| 231 | 231 | ||
| 232 | if (verbose >= 3) | 232 | if (verbose >= 3) | 
| 233 | printf ("proc#=%d uid=%d vsz=%d rss=%d pid=%d ppid=%d pcpu=%.2f stat=%s etime=%s prog=%s args=%s\n", | 233 | printf ("proc#=%d uid=%d vsz=%d rss=%d pid=%d ppid=%d pcpu=%.2f stat=%s etime=%s prog=%s args=%s\n", | 
| 234 | procs, procuid, procvsz, procrss, | 234 | procs, procuid, procvsz, procrss, | 
| 235 | procpid, procppid, procpcpu, procstat, | 235 | procpid, procppid, procpcpu, procstat, | 
| 236 | procetime, procprog, procargs); | 236 | procetime, procprog, procargs); | 
| 237 | 237 | ||
| 238 | /* Ignore self */ | 238 | /* Ignore self */ | 
| @@ -292,9 +292,9 @@ main (int argc, char **argv) | |||
| 292 | 292 | ||
| 293 | procs++; | 293 | procs++; | 
| 294 | if (verbose >= 2) { | 294 | if (verbose >= 2) { | 
| 295 | printf ("Matched: uid=%d vsz=%d rss=%d pid=%d ppid=%d pcpu=%.2f stat=%s etime=%s prog=%s args=%s\n", | 295 | printf ("Matched: uid=%d vsz=%d rss=%d pid=%d ppid=%d pcpu=%.2f stat=%s etime=%s prog=%s args=%s\n", | 
| 296 | procuid, procvsz, procrss, | 296 | procuid, procvsz, procrss, | 
| 297 | procpid, procppid, procpcpu, procstat, | 297 | procpid, procppid, procpcpu, procstat, | 
| 298 | procetime, procprog, procargs); | 298 | procetime, procprog, procargs); | 
| 299 | } | 299 | } | 
| 300 | 300 | ||
| @@ -320,7 +320,7 @@ main (int argc, char **argv) | |||
| 320 | result = max_state (result, i); | 320 | result = max_state (result, i); | 
| 321 | } | 321 | } | 
| 322 | } | 322 | } | 
| 323 | } | 323 | } | 
| 324 | /* This should not happen */ | 324 | /* This should not happen */ | 
| 325 | else if (verbose) { | 325 | else if (verbose) { | 
| 326 | printf(_("Not parseable: %s"), input_buffer); | 326 | printf(_("Not parseable: %s"), input_buffer); | 
| @@ -332,7 +332,7 @@ main (int argc, char **argv) | |||
| 332 | return STATE_UNKNOWN; | 332 | return STATE_UNKNOWN; | 
| 333 | } | 333 | } | 
| 334 | 334 | ||
| 335 | if ( result == STATE_UNKNOWN ) | 335 | if ( result == STATE_UNKNOWN ) | 
| 336 | result = STATE_OK; | 336 | result = STATE_OK; | 
| 337 | 337 | ||
| 338 | /* Needed if procs found, but none match filter */ | 338 | /* Needed if procs found, but none match filter */ | 
| @@ -352,9 +352,9 @@ main (int argc, char **argv) | |||
| 352 | if (metric != METRIC_PROCS) { | 352 | if (metric != METRIC_PROCS) { | 
| 353 | printf (_("%d crit, %d warn out of "), crit, warn); | 353 | printf (_("%d crit, %d warn out of "), crit, warn); | 
| 354 | } | 354 | } | 
| 355 | } | 355 | } | 
| 356 | printf (ngettext ("%d process", "%d processes", (unsigned long) procs), procs); | 356 | printf (ngettext ("%d process", "%d processes", (unsigned long) procs), procs); | 
| 357 | 357 | ||
| 358 | if (strcmp(fmt,"") != 0) { | 358 | if (strcmp(fmt,"") != 0) { | 
| 359 | printf (_(" with %s"), fmt); | 359 | printf (_(" with %s"), fmt); | 
| 360 | } | 360 | } | 
| @@ -440,7 +440,7 @@ process_arguments (int argc, char **argv) | |||
| 440 | break; | 440 | break; | 
| 441 | case 'c': /* critical threshold */ | 441 | case 'c': /* critical threshold */ | 
| 442 | critical_range = optarg; | 442 | critical_range = optarg; | 
| 443 | break; | 443 | break; | 
| 444 | case 'w': /* warning threshold */ | 444 | case 'w': /* warning threshold */ | 
| 445 | warning_range = optarg; | 445 | warning_range = optarg; | 
| 446 | break; | 446 | break; | 
| @@ -542,11 +542,11 @@ process_arguments (int argc, char **argv) | |||
| 542 | if ( strcmp(optarg, "PROCS") == 0) { | 542 | if ( strcmp(optarg, "PROCS") == 0) { | 
| 543 | metric = METRIC_PROCS; | 543 | metric = METRIC_PROCS; | 
| 544 | break; | 544 | break; | 
| 545 | } | 545 | } | 
| 546 | else if ( strcmp(optarg, "VSZ") == 0) { | 546 | else if ( strcmp(optarg, "VSZ") == 0) { | 
| 547 | metric = METRIC_VSZ; | 547 | metric = METRIC_VSZ; | 
| 548 | break; | 548 | break; | 
| 549 | } | 549 | } | 
| 550 | else if ( strcmp(optarg, "RSS") == 0 ) { | 550 | else if ( strcmp(optarg, "RSS") == 0 ) { | 
| 551 | metric = METRIC_RSS; | 551 | metric = METRIC_RSS; | 
| 552 | break; | 552 | break; | 
| @@ -559,7 +559,7 @@ process_arguments (int argc, char **argv) | |||
| 559 | metric = METRIC_ELAPSED; | 559 | metric = METRIC_ELAPSED; | 
| 560 | break; | 560 | break; | 
| 561 | } | 561 | } | 
| 562 | 562 | ||
| 563 | usage4 (_("Metric must be one of PROCS, VSZ, RSS, CPU, ELAPSED!")); | 563 | usage4 (_("Metric must be one of PROCS, VSZ, RSS, CPU, ELAPSED!")); | 
| 564 | case 'k': /* linux kernel thread filter */ | 564 | case 'k': /* linux kernel thread filter */ | 
| 565 | kthread_filter = 1; | 565 | kthread_filter = 1; | 
| @@ -642,7 +642,7 @@ convert_to_seconds(char *etime) { | |||
| 642 | seconds = 0; | 642 | seconds = 0; | 
| 643 | 643 | ||
| 644 | for (ptr = etime; *ptr != '\0'; ptr++) { | 644 | for (ptr = etime; *ptr != '\0'; ptr++) { | 
| 645 | 645 | ||
| 646 | if (*ptr == '-') { | 646 | if (*ptr == '-') { | 
| 647 | hyphcnt++; | 647 | hyphcnt++; | 
| 648 | continue; | 648 | continue; | 
| diff --git a/plugins/check_smtp.c b/plugins/check_smtp.c index d37c57c8..c1e92dff 100644 --- a/plugins/check_smtp.c +++ b/plugins/check_smtp.c | |||
| @@ -55,6 +55,7 @@ enum { | |||
| 55 | #define SMTP_EXPECT "220" | 55 | #define SMTP_EXPECT "220" | 
| 56 | #define SMTP_HELO "HELO " | 56 | #define SMTP_HELO "HELO " | 
| 57 | #define SMTP_EHLO "EHLO " | 57 | #define SMTP_EHLO "EHLO " | 
| 58 | #define SMTP_LHLO "LHLO " | ||
| 58 | #define SMTP_QUIT "QUIT\r\n" | 59 | #define SMTP_QUIT "QUIT\r\n" | 
| 59 | #define SMTP_STARTTLS "STARTTLS\r\n" | 60 | #define SMTP_STARTTLS "STARTTLS\r\n" | 
| 60 | #define SMTP_AUTH_LOGIN "AUTH LOGIN\r\n" | 61 | #define SMTP_AUTH_LOGIN "AUTH LOGIN\r\n" | 
| @@ -102,6 +103,7 @@ int check_critical_time = FALSE; | |||
| 102 | int verbose = 0; | 103 | int verbose = 0; | 
| 103 | int use_ssl = FALSE; | 104 | int use_ssl = FALSE; | 
| 104 | short use_ehlo = FALSE; | 105 | short use_ehlo = FALSE; | 
| 106 | short use_lhlo = FALSE; | ||
| 105 | short ssl_established = 0; | 107 | short ssl_established = 0; | 
| 106 | char *localhostname = NULL; | 108 | char *localhostname = NULL; | 
| 107 | int sd; | 109 | int sd; | 
| @@ -152,7 +154,9 @@ main (int argc, char **argv) | |||
| 152 | return STATE_CRITICAL; | 154 | return STATE_CRITICAL; | 
| 153 | } | 155 | } | 
| 154 | } | 156 | } | 
| 155 | if(use_ehlo) | 157 | if(use_lhlo) | 
| 158 | xasprintf (&helocmd, "%s%s%s", SMTP_LHLO, localhostname, "\r\n"); | ||
| 159 | else if(use_ehlo) | ||
| 156 | xasprintf (&helocmd, "%s%s%s", SMTP_EHLO, localhostname, "\r\n"); | 160 | xasprintf (&helocmd, "%s%s%s", SMTP_EHLO, localhostname, "\r\n"); | 
| 157 | else | 161 | else | 
| 158 | xasprintf (&helocmd, "%s%s%s", SMTP_HELO, localhostname, "\r\n"); | 162 | xasprintf (&helocmd, "%s%s%s", SMTP_HELO, localhostname, "\r\n"); | 
| @@ -197,7 +201,7 @@ main (int argc, char **argv) | |||
| 197 | if (recvlines(buffer, MAX_INPUT_BUFFER) <= 0) { | 201 | if (recvlines(buffer, MAX_INPUT_BUFFER) <= 0) { | 
| 198 | printf (_("recv() failed\n")); | 202 | printf (_("recv() failed\n")); | 
| 199 | return STATE_WARNING; | 203 | return STATE_WARNING; | 
| 200 | } else if(use_ehlo){ | 204 | } else if(use_ehlo || use_lhlo){ | 
| 201 | if(strstr(buffer, "250 STARTTLS") != NULL || | 205 | if(strstr(buffer, "250 STARTTLS") != NULL || | 
| 202 | strstr(buffer, "250-STARTTLS") != NULL){ | 206 | strstr(buffer, "250-STARTTLS") != NULL){ | 
| 203 | supports_tls=TRUE; | 207 | supports_tls=TRUE; | 
| @@ -470,6 +474,7 @@ process_arguments (int argc, char **argv) | |||
| 470 | {"use-ipv4", no_argument, 0, '4'}, | 474 | {"use-ipv4", no_argument, 0, '4'}, | 
| 471 | {"use-ipv6", no_argument, 0, '6'}, | 475 | {"use-ipv6", no_argument, 0, '6'}, | 
| 472 | {"help", no_argument, 0, 'h'}, | 476 | {"help", no_argument, 0, 'h'}, | 
| 477 | {"lmtp", no_argument, 0, 'L'}, | ||
| 473 | {"starttls",no_argument,0,'S'}, | 478 | {"starttls",no_argument,0,'S'}, | 
| 474 | {"certificate",required_argument,0,'D'}, | 479 | {"certificate",required_argument,0,'D'}, | 
| 475 | {"ignore-quit-failure",no_argument,0,'q'}, | 480 | {"ignore-quit-failure",no_argument,0,'q'}, | 
| @@ -489,7 +494,7 @@ process_arguments (int argc, char **argv) | |||
| 489 | } | 494 | } | 
| 490 | 495 | ||
| 491 | while (1) { | 496 | while (1) { | 
| 492 | c = getopt_long (argc, argv, "+hVv46t:p:f:e:c:w:H:C:R:SD:F:A:U:P:q", | 497 | c = getopt_long (argc, argv, "+hVv46Lt:p:f:e:c:w:H:C:R:SD:F:A:U:P:q", | 
| 493 | longopts, &option); | 498 | longopts, &option); | 
| 494 | 499 | ||
| 495 | if (c == -1 || c == EOF) | 500 | if (c == -1 || c == EOF) | 
| @@ -616,6 +621,9 @@ process_arguments (int argc, char **argv) | |||
| 616 | use_ssl = TRUE; | 621 | use_ssl = TRUE; | 
| 617 | use_ehlo = TRUE; | 622 | use_ehlo = TRUE; | 
| 618 | break; | 623 | break; | 
| 624 | case 'L': | ||
| 625 | use_lhlo = TRUE; | ||
| 626 | break; | ||
| 619 | case '4': | 627 | case '4': | 
| 620 | address_family = AF_INET; | 628 | address_family = AF_INET; | 
| 621 | break; | 629 | break; | 
| @@ -824,6 +832,8 @@ print_help (void) | |||
| 824 | printf (" %s\n", _("SMTP AUTH username")); | 832 | printf (" %s\n", _("SMTP AUTH username")); | 
| 825 | printf (" %s\n", "-P, --authpass=STRING"); | 833 | printf (" %s\n", "-P, --authpass=STRING"); | 
| 826 | printf (" %s\n", _("SMTP AUTH password")); | 834 | printf (" %s\n", _("SMTP AUTH password")); | 
| 835 | printf (" %s\n", "-L, --lmtp"); | ||
| 836 | printf (" %s\n", _("Send LHLO instead of HELO/EHLO")); | ||
| 827 | printf (" %s\n", "-q, --ignore-quit-failure"); | 837 | printf (" %s\n", "-q, --ignore-quit-failure"); | 
| 828 | printf (" %s\n", _("Ignore failure when sending QUIT command to server")); | 838 | printf (" %s\n", _("Ignore failure when sending QUIT command to server")); | 
| 829 | 839 | ||
| @@ -850,6 +860,6 @@ print_usage (void) | |||
| 850 | printf ("%s\n", _("Usage:")); | 860 | printf ("%s\n", _("Usage:")); | 
| 851 | printf ("%s -H host [-p port] [-4|-6] [-e expect] [-C command] [-R response] [-f from addr]\n", progname); | 861 | printf ("%s -H host [-p port] [-4|-6] [-e expect] [-C command] [-R response] [-f from addr]\n", progname); | 
| 852 | printf ("[-A authtype -U authuser -P authpass] [-w warn] [-c crit] [-t timeout] [-q]\n"); | 862 | printf ("[-A authtype -U authuser -P authpass] [-w warn] [-c crit] [-t timeout] [-q]\n"); | 
| 853 | printf ("[-F fqdn] [-S] [-D warn days cert expire[,crit days cert expire]] [-v] \n"); | 863 | printf ("[-F fqdn] [-S] [-L] [-D warn days cert expire[,crit days cert expire]] [-v] \n"); | 
| 854 | } | 864 | } | 
| 855 | 865 | ||
| diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c index afc568b2..58d46b11 100644 --- a/plugins/check_snmp.c +++ b/plugins/check_snmp.c | |||
| @@ -468,6 +468,9 @@ main (int argc, char **argv) | |||
| 468 | /* Process this block for numeric comparisons */ | 468 | /* Process this block for numeric comparisons */ | 
| 469 | /* Make some special values,like Timeticks numeric only if a threshold is defined */ | 469 | /* Make some special values,like Timeticks numeric only if a threshold is defined */ | 
| 470 | if (thlds[i]->warning || thlds[i]->critical || calculate_rate) { | 470 | if (thlds[i]->warning || thlds[i]->critical || calculate_rate) { | 
| 471 | if (verbose > 2) { | ||
| 472 | print_thresholds(" thresholds", thlds[i]); | ||
| 473 | } | ||
| 471 | ptr = strpbrk (show, "-0123456789"); | 474 | ptr = strpbrk (show, "-0123456789"); | 
| 472 | if (ptr == NULL) | 475 | if (ptr == NULL) | 
| 473 | die (STATE_UNKNOWN,_("No valid data returned (%s)\n"), show); | 476 | die (STATE_UNKNOWN,_("No valid data returned (%s)\n"), show); | 
| @@ -581,14 +584,16 @@ main (int argc, char **argv) | |||
| 581 | 584 | ||
| 582 | if (warning_thresholds) { | 585 | if (warning_thresholds) { | 
| 583 | strncat(perfstr, ";", sizeof(perfstr)-strlen(perfstr)-1); | 586 | strncat(perfstr, ";", sizeof(perfstr)-strlen(perfstr)-1); | 
| 584 | strncat(perfstr, warning_thresholds, sizeof(perfstr)-strlen(perfstr)-1); | 587 | if(thlds[i]->warning && thlds[i]->warning->text) | 
| 588 | strncat(perfstr, thlds[i]->warning->text, sizeof(perfstr)-strlen(perfstr)-1); | ||
| 585 | } | 589 | } | 
| 586 | 590 | ||
| 587 | if (critical_thresholds) { | 591 | if (critical_thresholds) { | 
| 588 | if (!warning_thresholds) | 592 | if (!warning_thresholds) | 
| 589 | strncat(perfstr, ";", sizeof(perfstr)-strlen(perfstr)-1); | 593 | strncat(perfstr, ";", sizeof(perfstr)-strlen(perfstr)-1); | 
| 590 | strncat(perfstr, ";", sizeof(perfstr)-strlen(perfstr)-1); | 594 | strncat(perfstr, ";", sizeof(perfstr)-strlen(perfstr)-1); | 
| 591 | strncat(perfstr, critical_thresholds, sizeof(perfstr)-strlen(perfstr)-1); | 595 | if(thlds[i]->critical && thlds[i]->critical->text) | 
| 596 | strncat(perfstr, thlds[i]->critical->text, sizeof(perfstr)-strlen(perfstr)-1); | ||
| 592 | } | 597 | } | 
| 593 | 598 | ||
| 594 | strncat(perfstr, " ", sizeof(perfstr)-strlen(perfstr)-1); | 599 | strncat(perfstr, " ", sizeof(perfstr)-strlen(perfstr)-1); | 
| diff --git a/plugins/check_swap.c b/plugins/check_swap.c index 0ff0c770..685c2cc5 100644 --- a/plugins/check_swap.c +++ b/plugins/check_swap.c | |||
| @@ -34,6 +34,9 @@ const char *email = "devel@monitoring-plugins.org"; | |||
| 34 | #include "common.h" | 34 | #include "common.h" | 
| 35 | #include "popen.h" | 35 | #include "popen.h" | 
| 36 | #include "utils.h" | 36 | #include "utils.h" | 
| 37 | #include <string.h> | ||
| 38 | #include <math.h> | ||
| 39 | #include <libintl.h> | ||
| 37 | 40 | ||
| 38 | #ifdef HAVE_DECL_SWAPCTL | 41 | #ifdef HAVE_DECL_SWAPCTL | 
| 39 | # ifdef HAVE_SYS_PARAM_H | 42 | # ifdef HAVE_SYS_PARAM_H | 
| @@ -51,16 +54,19 @@ const char *email = "devel@monitoring-plugins.org"; | |||
| 51 | # define SWAP_CONVERSION 1 | 54 | # define SWAP_CONVERSION 1 | 
| 52 | #endif | 55 | #endif | 
| 53 | 56 | ||
| 54 | int check_swap (int usp, float free_swap_mb, float total_swap_mb); | 57 | typedef struct { | 
| 58 | int is_percentage; | ||
| 59 | uint64_t value; | ||
| 60 | } threshold_t; | ||
| 61 | |||
| 62 | int check_swap (float free_swap_mb, float total_swap_mb); | ||
| 55 | int process_arguments (int argc, char **argv); | 63 | int process_arguments (int argc, char **argv); | 
| 56 | int validate_arguments (void); | 64 | int validate_arguments (void); | 
| 57 | void print_usage (void); | 65 | void print_usage (void); | 
| 58 | void print_help (void); | 66 | void print_help (void); | 
| 59 | 67 | ||
| 60 | int warn_percent = 0; | 68 | threshold_t warn; | 
| 61 | int crit_percent = 0; | 69 | threshold_t crit; | 
| 62 | float warn_size_bytes = 0; | ||
| 63 | float crit_size_bytes = 0; | ||
| 64 | int verbose; | 70 | int verbose; | 
| 65 | int allswaps; | 71 | int allswaps; | 
| 66 | int no_swap_state = STATE_CRITICAL; | 72 | int no_swap_state = STATE_CRITICAL; | 
| @@ -68,9 +74,10 @@ int no_swap_state = STATE_CRITICAL; | |||
| 68 | int | 74 | int | 
| 69 | main (int argc, char **argv) | 75 | main (int argc, char **argv) | 
| 70 | { | 76 | { | 
| 71 | int percent_used, percent; | 77 | unsigned int percent_used, percent; | 
| 72 | float total_swap_mb = 0, used_swap_mb = 0, free_swap_mb = 0; | 78 | uint64_t total_swap_mb = 0, used_swap_mb = 0, free_swap_mb = 0; | 
| 73 | float dsktotal_mb = 0, dskused_mb = 0, dskfree_mb = 0, tmp_mb = 0; | 79 | uint64_t dsktotal_mb = 0, dskused_mb = 0, dskfree_mb = 0; | 
| 80 | uint64_t tmp_KB = 0; | ||
| 74 | int result = STATE_UNKNOWN; | 81 | int result = STATE_UNKNOWN; | 
| 75 | char input_buffer[MAX_INPUT_BUFFER]; | 82 | char input_buffer[MAX_INPUT_BUFFER]; | 
| 76 | #ifdef HAVE_PROC_MEMINFO | 83 | #ifdef HAVE_PROC_MEMINFO | 
| @@ -116,10 +123,15 @@ main (int argc, char **argv) | |||
| 116 | } | 123 | } | 
| 117 | fp = fopen (PROC_MEMINFO, "r"); | 124 | fp = fopen (PROC_MEMINFO, "r"); | 
| 118 | while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, fp)) { | 125 | while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, fp)) { | 
| 119 | if (sscanf (input_buffer, "%*[S]%*[w]%*[a]%*[p]%*[:] %f %f %f", &dsktotal_mb, &dskused_mb, &dskfree_mb) == 3) { | 126 | /* | 
| 120 | dsktotal_mb = dsktotal_mb / 1048576; /* Apply conversion */ | 127 | * The following sscanf call looks for a line looking like: "Swap: 123 123 123" | 
| 121 | dskused_mb = dskused_mb / 1048576; | 128 | * On which kind of system this format exists, I can not say, but I wanted to | 
| 122 | dskfree_mb = dskfree_mb / 1048576; | 129 | * document this for people who are not adapt with sscanf anymore, like me | 
| 130 | */ | ||
| 131 | if (sscanf (input_buffer, "%*[S]%*[w]%*[a]%*[p]%*[:] %lu %lu %lu", &dsktotal_mb, &dskused_mb, &dskfree_mb) == 3) { | ||
| 132 | dsktotal_mb = dsktotal_mb / (1024 * 1024); /* Apply conversion */ | ||
| 133 | dskused_mb = dskused_mb / (1024 * 1024); | ||
| 134 | dskfree_mb = dskfree_mb / (1024 * 1024); | ||
| 123 | total_swap_mb += dsktotal_mb; | 135 | total_swap_mb += dsktotal_mb; | 
| 124 | used_swap_mb += dskused_mb; | 136 | used_swap_mb += dskused_mb; | 
| 125 | free_swap_mb += dskfree_mb; | 137 | free_swap_mb += dskfree_mb; | 
| @@ -128,21 +140,25 @@ main (int argc, char **argv) | |||
| 128 | percent=100.0; | 140 | percent=100.0; | 
| 129 | else | 141 | else | 
| 130 | percent = 100 * (((double) dskused_mb) / ((double) dsktotal_mb)); | 142 | percent = 100 * (((double) dskused_mb) / ((double) dsktotal_mb)); | 
| 131 | result = max_state (result, check_swap (percent, dskfree_mb, dsktotal_mb)); | 143 | result = max_state (result, check_swap (dskfree_mb, dsktotal_mb)); | 
| 132 | if (verbose) | 144 | if (verbose) | 
| 133 | xasprintf (&status, "%s [%.0f (%d%%)]", status, dskfree_mb, 100 - percent); | 145 | xasprintf (&status, "%s [%.0f (%d%%)]", status, dskfree_mb, 100 - percent); | 
| 134 | } | 146 | } | 
| 135 | } | 147 | } | 
| 136 | else if (sscanf (input_buffer, "%*[S]%*[w]%*[a]%*[p]%[TotalFre]%*[:] %f %*[k]%*[B]", str, &tmp_mb)) { | 148 | /* | 
| 149 | * The following sscanf call looks for lines looking like: "SwapTotal: 123" and "SwapFree: 123" | ||
| 150 | * This format exists at least on Debian Linux with a 5.* kernel | ||
| 151 | */ | ||
| 152 | else if (sscanf (input_buffer, "%*[S]%*[w]%*[a]%*[p]%[TotalFre]%*[:] %lu %*[k]%*[B]", str, &tmp_KB)) { | ||
| 137 | if (verbose >= 3) { | 153 | if (verbose >= 3) { | 
| 138 | printf("Got %s with %f\n", str, tmp_mb); | 154 | printf("Got %s with %lu\n", str, tmp_KB); | 
| 139 | } | 155 | } | 
| 140 | /* I think this part is always in Kb, so convert to mb */ | 156 | /* I think this part is always in Kb, so convert to mb */ | 
| 141 | if (strcmp ("Total", str) == 0) { | 157 | if (strcmp ("Total", str) == 0) { | 
| 142 | dsktotal_mb = tmp_mb / 1024; | 158 | dsktotal_mb = tmp_KB / 1024; | 
| 143 | } | 159 | } | 
| 144 | else if (strcmp ("Free", str) == 0) { | 160 | else if (strcmp ("Free", str) == 0) { | 
| 145 | dskfree_mb = tmp_mb / 1024; | 161 | dskfree_mb = tmp_KB / 1024; | 
| 146 | } | 162 | } | 
| 147 | } | 163 | } | 
| 148 | } | 164 | } | 
| @@ -227,7 +243,7 @@ main (int argc, char **argv) | |||
| 227 | free_swap_mb += dskfree_mb; | 243 | free_swap_mb += dskfree_mb; | 
| 228 | if (allswaps) { | 244 | if (allswaps) { | 
| 229 | percent = 100 * (((double) dskused_mb) / ((double) dsktotal_mb)); | 245 | percent = 100 * (((double) dskused_mb) / ((double) dsktotal_mb)); | 
| 230 | result = max_state (result, check_swap (percent, dskfree_mb, dsktotal_mb)); | 246 | result = max_state (result, check_swap (dskfree_mb, dsktotal_mb)); | 
| 231 | if (verbose) | 247 | if (verbose) | 
| 232 | xasprintf (&status, "%s [%.0f (%d%%)]", status, dskfree_mb, 100 - percent); | 248 | xasprintf (&status, "%s [%.0f (%d%%)]", status, dskfree_mb, 100 - percent); | 
| 233 | } | 249 | } | 
| @@ -289,7 +305,7 @@ main (int argc, char **argv) | |||
| 289 | 305 | ||
| 290 | if(allswaps && dsktotal_mb > 0){ | 306 | if(allswaps && dsktotal_mb > 0){ | 
| 291 | percent = 100 * (((double) dskused_mb) / ((double) dsktotal_mb)); | 307 | percent = 100 * (((double) dskused_mb) / ((double) dsktotal_mb)); | 
| 292 | result = max_state (result, check_swap (percent, dskfree_mb, dsktotal_mb)); | 308 | result = max_state (result, check_swap (dskfree_mb, dsktotal_mb)); | 
| 293 | if (verbose) { | 309 | if (verbose) { | 
| 294 | xasprintf (&status, "%s [%.0f (%d%%)]", status, dskfree_mb, 100 - percent); | 310 | xasprintf (&status, "%s [%.0f (%d%%)]", status, dskfree_mb, 100 - percent); | 
| 295 | } | 311 | } | 
| @@ -328,7 +344,7 @@ main (int argc, char **argv) | |||
| 328 | 344 | ||
| 329 | if(allswaps && dsktotal_mb > 0){ | 345 | if(allswaps && dsktotal_mb > 0){ | 
| 330 | percent = 100 * (((double) dskused_mb) / ((double) dsktotal_mb)); | 346 | percent = 100 * (((double) dskused_mb) / ((double) dsktotal_mb)); | 
| 331 | result = max_state (result, check_swap (percent, dskfree_mb, dsktotal_mb)); | 347 | result = max_state (result, check_swap(dskfree_mb, dsktotal_mb)); | 
| 332 | if (verbose) { | 348 | if (verbose) { | 
| 333 | xasprintf (&status, "%s [%.0f (%d%%)]", status, dskfree_mb, 100 - percent); | 349 | xasprintf (&status, "%s [%.0f (%d%%)]", status, dskfree_mb, 100 - percent); | 
| 334 | } | 350 | } | 
| @@ -355,14 +371,19 @@ main (int argc, char **argv) | |||
| 355 | status = "- Swap is either disabled, not present, or of zero size. "; | 371 | status = "- Swap is either disabled, not present, or of zero size. "; | 
| 356 | } | 372 | } | 
| 357 | 373 | ||
| 358 | result = max_state (result, check_swap (percent_used, free_swap_mb, total_swap_mb)); | 374 | result = max_state (result, check_swap(free_swap_mb, total_swap_mb)); | 
| 359 | printf (_("SWAP %s - %d%% free (%d MB out of %d MB) %s|"), | 375 | printf (_("SWAP %s - %d%% free (%dMB out of %dMB) %s|"), | 
| 360 | state_text (result), | 376 | state_text (result), | 
| 361 | (100 - percent_used), (int) free_swap_mb, (int) total_swap_mb, status); | 377 | (100 - percent_used), (int) free_swap_mb, (int) total_swap_mb, status); | 
| 362 | 378 | ||
| 363 | puts (perfdata ("swap", (long) free_swap_mb, "MB", | 379 | uint64_t warn_print = warn.value; | 
| 364 | TRUE, (long) max (warn_size_bytes/(1024 * 1024), warn_percent/100.0*total_swap_mb), | 380 | if (warn.is_percentage) warn_print = warn.value * (total_swap_mb *1024 *1024/100); | 
| 365 | TRUE, (long) max (crit_size_bytes/(1024 * 1024), crit_percent/100.0*total_swap_mb), | 381 | uint64_t crit_print = crit.value; | 
| 382 | if (crit.is_percentage) crit_print = crit.value * (total_swap_mb *1024 *1024/100); | ||
| 383 | |||
| 384 | puts (perfdata_uint64 ("swap", free_swap_mb *1024 *1024, "B", | ||
| 385 | TRUE, warn_print, | ||
| 386 | TRUE, crit_print, | ||
| 366 | TRUE, 0, | 387 | TRUE, 0, | 
| 367 | TRUE, (long) total_swap_mb)); | 388 | TRUE, (long) total_swap_mb)); | 
| 368 | 389 | ||
| @@ -370,26 +391,37 @@ main (int argc, char **argv) | |||
| 370 | } | 391 | } | 
| 371 | 392 | ||
| 372 | 393 | ||
| 373 | |||
| 374 | int | 394 | int | 
| 375 | check_swap (int usp, float free_swap_mb, float total_swap_mb) | 395 | check_swap(float free_swap_mb, float total_swap_mb) | 
| 376 | { | 396 | { | 
| 377 | 397 | ||
| 378 | if (!total_swap_mb) return no_swap_state; | 398 | if (!total_swap_mb) return no_swap_state; | 
| 379 | 399 | ||
| 380 | int result = STATE_UNKNOWN; | 400 | uint64_t free_swap = free_swap_mb * (1024 * 1024); /* Convert back to bytes as warn and crit specified in bytes */ | 
| 381 | float free_swap = free_swap_mb * (1024 * 1024); /* Convert back to bytes as warn and crit specified in bytes */ | 401 | |
| 382 | if (usp >= 0 && crit_percent != 0 && usp >= (100.0 - crit_percent)) | 402 | if (!crit.is_percentage && crit.value >= free_swap) return STATE_CRITICAL; | 
| 383 | result = STATE_CRITICAL; | 403 | if (!warn.is_percentage && warn.value >= free_swap) return STATE_WARNING; | 
| 384 | else if (crit_size_bytes > 0 && free_swap <= crit_size_bytes) | 404 | |
| 385 | result = STATE_CRITICAL; | 405 | |
| 386 | else if (usp >= 0 && warn_percent != 0 && usp >= (100.0 - warn_percent)) | 406 | uint64_t usage_percentage = ((total_swap_mb - free_swap_mb) / total_swap_mb) * 100; | 
| 387 | result = STATE_WARNING; | 407 | |
| 388 | else if (warn_size_bytes > 0 && free_swap <= warn_size_bytes) | 408 | if (crit.is_percentage && | 
| 389 | result = STATE_WARNING; | 409 | usage_percentage >= 0 && | 
| 390 | else if (usp >= 0.0) | 410 | crit.value != 0 && | 
| 391 | result = STATE_OK; | 411 | usage_percentage >= (100 - crit.value)) | 
| 392 | return result; | 412 | { | 
| 413 | return STATE_CRITICAL; | ||
| 414 | } | ||
| 415 | |||
| 416 | if (warn.is_percentage && | ||
| 417 | usage_percentage >= 0 && | ||
| 418 | warn.value != 0 && | ||
| 419 | usage_percentage >= (100 - warn.value)) | ||
| 420 | { | ||
| 421 | return STATE_WARNING; | ||
| 422 | } | ||
| 423 | |||
| 424 | return STATE_OK; | ||
| 393 | } | 425 | } | 
| 394 | 426 | ||
| 395 | 427 | ||
| @@ -422,42 +454,68 @@ process_arguments (int argc, char **argv) | |||
| 422 | break; | 454 | break; | 
| 423 | 455 | ||
| 424 | switch (c) { | 456 | switch (c) { | 
| 425 | case 'w': /* warning size threshold */ | 457 | case 'w': /* warning size threshold */ | 
| 426 | if (is_intnonneg (optarg)) { | 458 | { | 
| 427 | warn_size_bytes = (float) atoi (optarg); | 459 | /* | 
| 428 | break; | 460 | * We expect either a positive integer value without a unit, which means | 
| 429 | } | 461 | * the unit is Bytes or a positive integer value and a percentage sign (%), | 
| 430 | else if (strstr (optarg, ",") && | 462 | * which means the value must be with 0 and 100 and is relative to the total swap | 
| 431 | strstr (optarg, "%") && | 463 | */ | 
| 432 | sscanf (optarg, "%f,%d%%", &warn_size_bytes, &warn_percent) == 2) { | 464 | size_t length; | 
| 433 | warn_size_bytes = floorf(warn_size_bytes); | 465 | length = strlen(optarg); | 
| 434 | break; | 466 | |
| 435 | } | 467 | if (optarg[length - 1] == '%') { | 
| 436 | else if (strstr (optarg, "%") && | 468 | /* It's percentage */ | 
| 437 | sscanf (optarg, "%d%%", &warn_percent) == 1) { | 469 | warn.is_percentage = 1; | 
| 438 | break; | 470 | optarg[length - 1] = '\0'; | 
| 439 | } | 471 | if (is_uint64(optarg, &warn.value)) { | 
| 440 | else { | 472 | if (warn.value > 100) { | 
| 441 | usage4 (_("Warning threshold must be integer or percentage!")); | 473 | usage4 (_("Warning threshold percentage must be <= 100!")); | 
| 442 | } | 474 | } else { | 
| 443 | case 'c': /* critical size threshold */ | 475 | break; | 
| 444 | if (is_intnonneg (optarg)) { | 476 | } | 
| 445 | crit_size_bytes = (float) atoi (optarg); | 477 | } | 
| 446 | break; | 478 | } else { | 
| 447 | } | 479 | /* It's Bytes */ | 
| 448 | else if (strstr (optarg, ",") && | 480 | warn.is_percentage = 0; | 
| 449 | strstr (optarg, "%") && | 481 | if (is_uint64(optarg, &warn.value)) { | 
| 450 | sscanf (optarg, "%f,%d%%", &crit_size_bytes, &crit_percent) == 2) { | 482 | break; | 
| 451 | crit_size_bytes = floorf(crit_size_bytes); | 483 | } else { | 
| 452 | break; | 484 | usage4 (_("Warning threshold be positive integer or percentage!")); | 
| 453 | } | 485 | } | 
| 454 | else if (strstr (optarg, "%") && | 486 | } | 
| 455 | sscanf (optarg, "%d%%", &crit_percent) == 1) { | ||
| 456 | break; | ||
| 457 | } | ||
| 458 | else { | ||
| 459 | usage4 (_("Critical threshold must be integer or percentage!")); | ||
| 460 | } | 487 | } | 
| 488 | case 'c': /* critical size threshold */ | ||
| 489 | { | ||
| 490 | /* | ||
| 491 | * We expect either a positive integer value without a unit, which means | ||
| 492 | * the unit is Bytes or a positive integer value and a percentage sign (%), | ||
| 493 | * which means the value must be with 0 and 100 and is relative to the total swap | ||
| 494 | */ | ||
| 495 | size_t length; | ||
| 496 | length = strlen(optarg); | ||
| 497 | |||
| 498 | if (optarg[length - 1] == '%') { | ||
| 499 | /* It's percentage */ | ||
| 500 | crit.is_percentage = 1; | ||
| 501 | optarg[length - 1] = '\0'; | ||
| 502 | if (is_uint64(optarg, &crit.value)) { | ||
| 503 | if (crit.value> 100) { | ||
| 504 | usage4 (_("Critical threshold percentage must be <= 100!")); | ||
| 505 | } else { | ||
| 506 | break; | ||
| 507 | } | ||
| 508 | } | ||
| 509 | } else { | ||
| 510 | /* It's Bytes */ | ||
| 511 | crit.is_percentage = 0; | ||
| 512 | if (is_uint64(optarg, &crit.value)) { | ||
| 513 | break; | ||
| 514 | } else { | ||
| 515 | usage4 (_("Critical threshold be positive integer or percentage!")); | ||
| 516 | } | ||
| 517 | } | ||
| 518 | } | ||
| 461 | case 'a': /* all swap */ | 519 | case 'a': /* all swap */ | 
| 462 | allswaps = TRUE; | 520 | allswaps = TRUE; | 
| 463 | break; | 521 | break; | 
| @@ -482,23 +540,6 @@ process_arguments (int argc, char **argv) | |||
| 482 | c = optind; | 540 | c = optind; | 
| 483 | if (c == argc) | 541 | if (c == argc) | 
| 484 | return validate_arguments (); | 542 | return validate_arguments (); | 
| 485 | if (warn_percent == 0 && is_intnonneg (argv[c])) | ||
| 486 | warn_percent = atoi (argv[c++]); | ||
| 487 | |||
| 488 | if (c == argc) | ||
| 489 | return validate_arguments (); | ||
| 490 | if (crit_percent == 0 && is_intnonneg (argv[c])) | ||
| 491 | crit_percent = atoi (argv[c++]); | ||
| 492 | |||
| 493 | if (c == argc) | ||
| 494 | return validate_arguments (); | ||
| 495 | if (warn_size_bytes == 0 && is_intnonneg (argv[c])) | ||
| 496 | warn_size_bytes = (float) atoi (argv[c++]); | ||
| 497 | |||
| 498 | if (c == argc) | ||
| 499 | return validate_arguments (); | ||
| 500 | if (crit_size_bytes == 0 && is_intnonneg (argv[c])) | ||
| 501 | crit_size_bytes = (float) atoi (argv[c++]); | ||
| 502 | 543 | ||
| 503 | return validate_arguments (); | 544 | return validate_arguments (); | 
| 504 | } | 545 | } | 
| @@ -508,17 +549,12 @@ process_arguments (int argc, char **argv) | |||
| 508 | int | 549 | int | 
| 509 | validate_arguments (void) | 550 | validate_arguments (void) | 
| 510 | { | 551 | { | 
| 511 | if (warn_percent == 0 && crit_percent == 0 && warn_size_bytes == 0 | 552 | if (warn.value == 0 && crit.value == 0) { | 
| 512 | && crit_size_bytes == 0) { | ||
| 513 | return ERROR; | 553 | return ERROR; | 
| 514 | } | 554 | } | 
| 515 | else if (warn_percent < crit_percent) { | 555 | else if (warn.value < crit.value) { | 
| 516 | usage4 | ||
| 517 | (_("Warning percentage should be more than critical percentage")); | ||
| 518 | } | ||
| 519 | else if (warn_size_bytes < crit_size_bytes) { | ||
| 520 | usage4 | 556 | usage4 | 
| 521 | (_("Warning free space should be more than critical free space")); | 557 | (_("Warning should be more than critical")); | 
| 522 | } | 558 | } | 
| 523 | return OK; | 559 | return OK; | 
| 524 | } | 560 | } | 
| @@ -564,7 +600,6 @@ print_help (void) | |||
| 564 | } | 600 | } | 
| 565 | 601 | ||
| 566 | 602 | ||
| 567 | |||
| 568 | void | 603 | void | 
| 569 | print_usage (void) | 604 | print_usage (void) | 
| 570 | { | 605 | { | 
| diff --git a/plugins/t/check_disk.t b/plugins/t/check_disk.t index fdd8769b..ec527e7f 100644 --- a/plugins/t/check_disk.t +++ b/plugins/t/check_disk.t | |||
| @@ -88,8 +88,9 @@ $result = NPTest->testCmd( | |||
| 88 | ); | 88 | ); | 
| 89 | $_ = $result->perf_output; | 89 | $_ = $result->perf_output; | 
| 90 | my ($warn_absth_data, $crit_absth_data, $total_absth_data) = (m/=.[^;]*;(\d+);(\d+);\d+;(\d+)/); | 90 | my ($warn_absth_data, $crit_absth_data, $total_absth_data) = (m/=.[^;]*;(\d+);(\d+);\d+;(\d+)/); | 
| 91 | is ($warn_absth_data, $total_absth_data - 20, "Wrong warning in perf data using absolute thresholds"); | 91 | # default unit is MiB, but perfdata is always bytes | 
| 92 | is ($crit_absth_data, $total_absth_data - 10, "Wrong critical in perf data using absolute thresholds"); | 92 | is ($warn_absth_data, $total_absth_data - (20 * (2 ** 20)), "Wrong warning in perf data using absolute thresholds"); | 
| 93 | is ($crit_absth_data, $total_absth_data - (10 * (2 ** 20)), "Wrong critical in perf data using absolute thresholds"); | ||
| 93 | 94 | ||
| 94 | # Then check percent thresholds. | 95 | # Then check percent thresholds. | 
| 95 | $result = NPTest->testCmd( | 96 | $result = NPTest->testCmd( | 
| @@ -119,7 +120,7 @@ like ( $result->only_output, qr/$more_free/, "Have disk name in text"); | |||
| 119 | $result = NPTest->testCmd( "./check_disk -w 1 -c 1 -p $more_free -p $less_free" ); | 120 | $result = NPTest->testCmd( "./check_disk -w 1 -c 1 -p $more_free -p $less_free" ); | 
| 120 | cmp_ok( $result->return_code, '==', 0, "At least 1 MB available on $more_free and $less_free"); | 121 | cmp_ok( $result->return_code, '==', 0, "At least 1 MB available on $more_free and $less_free"); | 
| 121 | $_ = $result->output; | 122 | $_ = $result->output; | 
| 122 | my ($free_mb_on_mp1, $free_mb_on_mp2) = (m/(\d+) MB .* (\d+) MB /g); | 123 | my ($free_mb_on_mp1, $free_mb_on_mp2) = (m/(\d+)MiB .* (\d+)MiB /g); | 
| 123 | my $free_mb_on_all = $free_mb_on_mp1 + $free_mb_on_mp2; | 124 | my $free_mb_on_all = $free_mb_on_mp1 + $free_mb_on_mp2; | 
| 124 | 125 | ||
| 125 | 126 | ||
| diff --git a/plugins/t/check_dns.t b/plugins/t/check_dns.t index cdfbe60d..afb2062d 100644 --- a/plugins/t/check_dns.t +++ b/plugins/t/check_dns.t | |||
| @@ -10,7 +10,7 @@ use NPTest; | |||
| 10 | 10 | ||
| 11 | plan skip_all => "check_dns not compiled" unless (-x "check_dns"); | 11 | plan skip_all => "check_dns not compiled" unless (-x "check_dns"); | 
| 12 | 12 | ||
| 13 | plan tests => 19; | 13 | plan tests => 23; | 
| 14 | 14 | ||
| 15 | my $successOutput = '/DNS OK: [\.0-9]+ seconds? response time/'; | 15 | my $successOutput = '/DNS OK: [\.0-9]+ seconds? response time/'; | 
| 16 | 16 | ||
| @@ -105,3 +105,11 @@ cmp_ok( $res->return_code, '==', 0, "Got expected address"); | |||
| 105 | $res = NPTest->testCmd("./check_dns -H $hostname_valid -a $hostname_invalid_cidr -t 5"); | 105 | $res = NPTest->testCmd("./check_dns -H $hostname_valid -a $hostname_invalid_cidr -t 5"); | 
| 106 | cmp_ok( $res->return_code, '==', 2, "Got wrong address"); | 106 | cmp_ok( $res->return_code, '==', 2, "Got wrong address"); | 
| 107 | like ( $res->output, "/^DNS CRITICAL.*expected '$hostname_invalid_cidr' but got '$hostname_valid_ip'".'$/', "Output OK"); | 107 | like ( $res->output, "/^DNS CRITICAL.*expected '$hostname_invalid_cidr' but got '$hostname_valid_ip'".'$/', "Output OK"); | 
| 108 | |||
| 109 | $res = NPTest->testCmd("./check_dns -H $hostname_valid -n"); | ||
| 110 | cmp_ok( $res->return_code, '==', 2, "Found $hostname_valid"); | ||
| 111 | like ( $res->output, "/^DNS CRITICAL.*Domain '$hostname_valid' was found by the server:/", "Output OK"); | ||
| 112 | |||
| 113 | $res = NPTest->testCmd("./check_dns -H $hostname_invalid -n"); | ||
| 114 | cmp_ok( $res->return_code, '==', 0, "Did not find $hostname_invalid"); | ||
| 115 | like ( $res->output, $successOutput, "Output OK" ); | ||
| diff --git a/plugins/t/check_load.t b/plugins/t/check_load.t index 55f6f752..60837ef6 100644 --- a/plugins/t/check_load.t +++ b/plugins/t/check_load.t | |||
| @@ -11,8 +11,8 @@ use NPTest; | |||
| 11 | my $res; | 11 | my $res; | 
| 12 | 12 | ||
| 13 | my $loadValue = "[0-9]+\.?[0-9]+"; | 13 | my $loadValue = "[0-9]+\.?[0-9]+"; | 
| 14 | my $successOutput = "/^OK - load average: $loadValue, $loadValue, $loadValue/"; | 14 | my $successOutput = "/^LOAD OK - load average: $loadValue, $loadValue, $loadValue/"; | 
| 15 | my $failureOutput = "/^CRITICAL - load average: $loadValue, $loadValue, $loadValue/"; | 15 | my $failureOutput = "/^LOAD CRITICAL - load average: $loadValue, $loadValue, $loadValue/"; | 
| 16 | 16 | ||
| 17 | plan tests => 11; | 17 | plan tests => 11; | 
| 18 | 18 | ||
| diff --git a/plugins/t/check_swap.t b/plugins/t/check_swap.t index e44adc90..de9e0f05 100644 --- a/plugins/t/check_swap.t +++ b/plugins/t/check_swap.t | |||
| @@ -8,9 +8,9 @@ use strict; | |||
| 8 | use Test::More tests => 8; | 8 | use Test::More tests => 8; | 
| 9 | use NPTest; | 9 | use NPTest; | 
| 10 | 10 | ||
| 11 | my $successOutput = '/^SWAP OK - [0-9]+\% free \([0-9]+ MB out of [0-9]+ MB\)/'; | 11 | my $successOutput = '/^SWAP OK - [0-9]+\% free \([0-9]+MB out of [0-9]+MB\)/'; | 
| 12 | my $failureOutput = '/^SWAP CRITICAL - [0-9]+\% free \([0-9]+ MB out of [0-9]+ MB\)/'; | 12 | my $failureOutput = '/^SWAP CRITICAL - [0-9]+\% free \([0-9]+MB out of [0-9]+MB\)/'; | 
| 13 | my $warnOutput = '/^SWAP WARNING - [0-9]+\% free \([0-9]+ MB out of [0-9]+ MB\)/'; | 13 | my $warnOutput = '/^SWAP WARNING - [0-9]+\% free \([0-9]+MB out of [0-9]+MB\)/'; | 
| 14 | 14 | ||
| 15 | my $result; | 15 | my $result; | 
| 16 | 16 | ||
| diff --git a/plugins/tests/check_procs.t b/plugins/tests/check_procs.t index 54d43d9b..fcea404e 100755 --- a/plugins/tests/check_procs.t +++ b/plugins/tests/check_procs.t | |||
| @@ -8,13 +8,14 @@ use Test::More; | |||
| 8 | use NPTest; | 8 | use NPTest; | 
| 9 | 9 | ||
| 10 | if (-x "./check_procs") { | 10 | if (-x "./check_procs") { | 
| 11 | plan tests => 50; | 11 | plan tests => 52; | 
| 12 | } else { | 12 | } else { | 
| 13 | plan skip_all => "No check_procs compiled"; | 13 | plan skip_all => "No check_procs compiled"; | 
| 14 | } | 14 | } | 
| 15 | 15 | ||
| 16 | my $result; | 16 | my $result; | 
| 17 | my $command = "./check_procs --input-file=tests/var/ps-axwo.darwin"; | 17 | my $command = "./check_procs --input-file=tests/var/ps-axwo.darwin"; | 
| 18 | my $cmd_etime = "./check_procs --input-file=tests/var/ps-axwo.debian"; | ||
| 18 | 19 | ||
| 19 | $result = NPTest->testCmd( "$command" ); | 20 | $result = NPTest->testCmd( "$command" ); | 
| 20 | is( $result->return_code, 0, "Run with no options" ); | 21 | is( $result->return_code, 0, "Run with no options" ); | 
| @@ -69,9 +70,21 @@ SKIP: { | |||
| 69 | like( $result->output, '/^PROCS OK: 0 processes with UID = -2 \(nobody\), args \'UsB\'/', "Output correct" ); | 70 | like( $result->output, '/^PROCS OK: 0 processes with UID = -2 \(nobody\), args \'UsB\'/', "Output correct" ); | 
| 70 | }; | 71 | }; | 
| 71 | 72 | ||
| 72 | $result = NPTest->testCmd( "$command --ereg-argument-array='mdworker.*501'" ); | 73 | SKIP: { | 
| 73 | is( $result->return_code, 0, "Checking regexp search of arguments" ); | 74 | skip 'check_procs is compiled with etime format support', 2 if `$command -vvv` =~ m/etime/mx; | 
| 74 | is( $result->output, "PROCS OK: 1 process with regex args 'mdworker.*501' | procs=1;;;0;", "Output correct" ); | 75 | |
| 76 | $result = NPTest->testCmd( "$command --ereg-argument-array='mdworker.*501'" ); | ||
| 77 | is( $result->return_code, 0, "Checking regexp search of arguments" ); | ||
| 78 | is( $result->output, "PROCS OK: 1 process with regex args 'mdworker.*501' | procs=1;;;0;", "Output correct" ); | ||
| 79 | } | ||
| 80 | |||
| 81 | SKIP: { | ||
| 82 | skip 'check_procs is compiled without etime format support', 2 if `$cmd_etime -vvv` !~ m/etime/mx; | ||
| 83 | |||
| 84 | $result = NPTest->testCmd( "$cmd_etime -m ELAPSED -C apache2 -w 1000 -c 2000" ); | ||
| 85 | is( $result->return_code, 2, "Checking elapsed time threshold" ); | ||
| 86 | is( $result->output, "ELAPSED CRITICAL: 10 crit, 0 warn out of 10 processes with command name 'apache2' | procs=10;;;0; procs_warn=0;;;0; procs_crit=10;;;0;", "Output correct" ); | ||
| 87 | } | ||
| 75 | 88 | ||
| 76 | $result = NPTest->testCmd( "$command --vsz 1000000" ); | 89 | $result = NPTest->testCmd( "$command --vsz 1000000" ); | 
| 77 | is( $result->return_code, 0, "Checking filter by VSZ" ); | 90 | is( $result->return_code, 0, "Checking filter by VSZ" ); | 
| @@ -129,4 +142,3 @@ is( $result->output, 'RSS CRITICAL: 5 crit, 0 warn out of 95 processes [WindowSe | |||
| 129 | $result = NPTest->testCmd( "$command --ereg-argument-array='(nosuchname|nosuch2name)'" ); | 142 | $result = NPTest->testCmd( "$command --ereg-argument-array='(nosuchname|nosuch2name)'" ); | 
| 130 | is( $result->return_code, 0, "Checking no pipe symbol in output" ); | 143 | is( $result->return_code, 0, "Checking no pipe symbol in output" ); | 
| 131 | is( $result->output, "PROCS OK: 0 processes with regex args '(nosuchname,nosuch2name)' | procs=0;;;0;", "Output correct" ); | 144 | is( $result->output, "PROCS OK: 0 processes with regex args '(nosuchname,nosuch2name)' | procs=0;;;0;", "Output correct" ); | 
| 132 | |||
| diff --git a/plugins/tests/check_snmp.t b/plugins/tests/check_snmp.t index 85d6bf55..0a77fa8a 100755 --- a/plugins/tests/check_snmp.t +++ b/plugins/tests/check_snmp.t | |||
| @@ -9,7 +9,7 @@ use NPTest; | |||
| 9 | use FindBin qw($Bin); | 9 | use FindBin qw($Bin); | 
| 10 | use POSIX qw/strftime/; | 10 | use POSIX qw/strftime/; | 
| 11 | 11 | ||
| 12 | my $tests = 67; | 12 | my $tests = 73; | 
| 13 | # Check that all dependent modules are available | 13 | # Check that all dependent modules are available | 
| 14 | eval { | 14 | eval { | 
| 15 | require NetSNMP::OID; | 15 | require NetSNMP::OID; | 
| @@ -251,9 +251,20 @@ is($res->output, 'SNMP CRITICAL - *-4* | iso.3.6.1.4.1.8072.3.2.67.17=-4;-2:;-3: | |||
| 251 | 251 | ||
| 252 | $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.18 -c '~:-6.5'" ); | 252 | $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.18 -c '~:-6.5'" ); | 
| 253 | is($res->return_code, 0, "Negative float OK" ); | 253 | is($res->return_code, 0, "Negative float OK" ); | 
| 254 | is($res->output, 'SNMP OK - -6.6 | iso.3.6.1.4.1.8072.3.2.67.18=-6.6;;~:-6.5 ', "Negative float OK output" ); | 254 | is($res->output, 'SNMP OK - -6.6 | iso.3.6.1.4.1.8072.3.2.67.18=-6.6;;@-6.5:~ ', "Negative float OK output" ); | 
| 255 | 255 | ||
| 256 | $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.18 -w '~:-6.65' -c '~:-6.55'" ); | 256 | $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.18 -w '~:-6.65' -c '~:-6.55'" ); | 
| 257 | is($res->return_code, 1, "Negative float WARNING" ); | 257 | is($res->return_code, 1, "Negative float WARNING" ); | 
| 258 | is($res->output, 'SNMP WARNING - *-6.6* | iso.3.6.1.4.1.8072.3.2.67.18=-6.6;~:-6.65;~:-6.55 ', "Negative float WARNING output" ); | 258 | is($res->output, 'SNMP WARNING - *-6.6* | iso.3.6.1.4.1.8072.3.2.67.18=-6.6;@-6.65:~;@-6.55:~ ', "Negative float WARNING output" ); | 
| 259 | 259 | ||
| 260 | $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10,.1.3.6.1.4.1.8072.3.2.67.17 -w '1:100000,-10:20' -c '2:200000,-20:30'" ); | ||
| 261 | is($res->return_code, 0, "Multiple OIDs with thresholds" ); | ||
| 262 | like($res->output, '/SNMP OK - \d+ -4 | iso.3.6.1.4.1.8072.3.2.67.10=\d+c;1:100000;2:200000 iso.3.6.1.4.1.8072.3.2.67.17=-4;-10:20;-20:30/', "Multiple OIDs with thresholds output" ); | ||
| 263 | |||
| 264 | $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10,.1.3.6.1.4.1.8072.3.2.67.17 -w '1:100000,-1:2' -c '2:200000,-20:30'" ); | ||
| 265 | is($res->return_code, 1, "Multiple OIDs with thresholds" ); | ||
| 266 | like($res->output, '/SNMP WARNING - \d+ \*-4\* | iso.3.6.1.4.1.8072.3.2.67.10=\d+c;1:100000;2:200000 iso.3.6.1.4.1.8072.3.2.67.17=-4;-10:20;-20:30/', "Multiple OIDs with thresholds output" ); | ||
| 267 | |||
| 268 | $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10,.1.3.6.1.4.1.8072.3.2.67.17 -w 1,2 -c 1" ); | ||
| 269 | is($res->return_code, 2, "Multiple OIDs with some thresholds" ); | ||
| 270 | like($res->output, '/SNMP CRITICAL - \*\d+\* \*-4\* | iso.3.6.1.4.1.8072.3.2.67.10=\d+c;1;2 iso.3.6.1.4.1.8072.3.2.67.17=-4;;/', "Multiple OIDs with thresholds output" ); | ||
| diff --git a/plugins/tests/var/ps-axwo.debian b/plugins/tests/var/ps-axwo.debian new file mode 100644 index 00000000..5889e9a4 --- /dev/null +++ b/plugins/tests/var/ps-axwo.debian | |||
| @@ -0,0 +1,219 @@ | |||
| 1 | STAT UID PID PPID VSZ RSS %CPU ELAPSED COMMAND COMMAND | ||
| 2 | Ss 0 1 0 167244 7144 0.1 26-03:07:26 systemd /lib/systemd/systemd --system --deserialize 17 | ||
| 3 | S 0 2 0 0 0 0.0 26-03:07:26 kthreadd [kthreadd] | ||
| 4 | I< 0 3 2 0 0 0.0 26-03:07:26 rcu_gp [rcu_gp] | ||
| 5 | I< 0 4 2 0 0 0.0 26-03:07:26 rcu_par_gp [rcu_par_gp] | ||
| 6 | I< 0 6 2 0 0 0.0 26-03:07:26 kworker/0:0H-ev [kworker/0:0H-events_highpri] | ||
| 7 | I< 0 9 2 0 0 0.0 26-03:07:26 mm_percpu_wq [mm_percpu_wq] | ||
| 8 | S 0 10 2 0 0 0.0 26-03:07:26 rcu_tasks_rude_ [rcu_tasks_rude_] | ||
| 9 | S 0 11 2 0 0 0.0 26-03:07:26 rcu_tasks_trace [rcu_tasks_trace] | ||
| 10 | S 0 12 2 0 0 0.0 26-03:07:26 ksoftirqd/0 [ksoftirqd/0] | ||
| 11 | I 0 13 2 0 0 0.0 26-03:07:26 rcu_sched [rcu_sched] | ||
| 12 | S 0 14 2 0 0 0.0 26-03:07:26 migration/0 [migration/0] | ||
| 13 | S 0 15 2 0 0 0.0 26-03:07:26 cpuhp/0 [cpuhp/0] | ||
| 14 | S 0 16 2 0 0 0.0 26-03:07:26 cpuhp/1 [cpuhp/1] | ||
| 15 | S 0 17 2 0 0 0.0 26-03:07:26 migration/1 [migration/1] | ||
| 16 | S 0 18 2 0 0 0.0 26-03:07:26 ksoftirqd/1 [ksoftirqd/1] | ||
| 17 | I< 0 20 2 0 0 0.0 26-03:07:26 kworker/1:0H-ev [kworker/1:0H-events_highpri] | ||
| 18 | S 0 21 2 0 0 0.0 26-03:07:26 cpuhp/2 [cpuhp/2] | ||
| 19 | S 0 22 2 0 0 0.0 26-03:07:26 migration/2 [migration/2] | ||
| 20 | S 0 23 2 0 0 0.0 26-03:07:26 ksoftirqd/2 [ksoftirqd/2] | ||
| 21 | I< 0 25 2 0 0 0.0 26-03:07:26 kworker/2:0H-ev [kworker/2:0H-events_highpri] | ||
| 22 | S 0 26 2 0 0 0.0 26-03:07:26 cpuhp/3 [cpuhp/3] | ||
| 23 | S 0 27 2 0 0 0.0 26-03:07:26 migration/3 [migration/3] | ||
| 24 | S 0 28 2 0 0 0.0 26-03:07:26 ksoftirqd/3 [ksoftirqd/3] | ||
| 25 | I< 0 30 2 0 0 0.0 26-03:07:26 kworker/3:0H-ev [kworker/3:0H-events_highpri] | ||
| 26 | S 0 35 2 0 0 0.0 26-03:07:26 kdevtmpfs [kdevtmpfs] | ||
| 27 | I< 0 36 2 0 0 0.0 26-03:07:26 netns [netns] | ||
| 28 | S 0 37 2 0 0 0.0 26-03:07:26 kauditd [kauditd] | ||
| 29 | S 0 38 2 0 0 0.0 26-03:07:26 khungtaskd [khungtaskd] | ||
| 30 | S 0 39 2 0 0 0.0 26-03:07:26 oom_reaper [oom_reaper] | ||
| 31 | I< 0 40 2 0 0 0.0 26-03:07:26 writeback [writeback] | ||
| 32 | S 0 41 2 0 0 0.0 26-03:07:26 kcompactd0 [kcompactd0] | ||
| 33 | SN 0 42 2 0 0 0.0 26-03:07:26 ksmd [ksmd] | ||
| 34 | SN 0 43 2 0 0 0.0 26-03:07:26 khugepaged [khugepaged] | ||
| 35 | I< 0 62 2 0 0 0.0 26-03:07:26 kintegrityd [kintegrityd] | ||
| 36 | I< 0 63 2 0 0 0.0 26-03:07:26 kblockd [kblockd] | ||
| 37 | I< 0 64 2 0 0 0.0 26-03:07:26 blkcg_punt_bio [blkcg_punt_bio] | ||
| 38 | I< 0 65 2 0 0 0.0 26-03:07:26 edac-poller [edac-poller] | ||
| 39 | I< 0 66 2 0 0 0.0 26-03:07:26 devfreq_wq [devfreq_wq] | ||
| 40 | I< 0 67 2 0 0 0.0 26-03:07:26 kworker/2:1H-ev [kworker/2:1H-events_highpri] | ||
| 41 | S 0 70 2 0 0 0.3 26-03:07:25 kswapd0 [kswapd0] | ||
| 42 | I< 0 71 2 0 0 0.0 26-03:07:25 kthrotld [kthrotld] | ||
| 43 | I< 0 72 2 0 0 0.0 26-03:07:25 acpi_thermal_pm [acpi_thermal_pm] | ||
| 44 | I< 0 74 2 0 0 0.0 26-03:07:25 ipv6_addrconf [ipv6_addrconf] | ||
| 45 | I< 0 80 2 0 0 0.0 26-03:07:25 kworker/3:1H-ev [kworker/3:1H-events_highpri] | ||
| 46 | I< 0 84 2 0 0 0.0 26-03:07:25 kstrp [kstrp] | ||
| 47 | I< 0 87 2 0 0 0.0 26-03:07:25 zswap-shrink [zswap-shrink] | ||
| 48 | I< 0 110 2 0 0 0.0 26-03:07:25 kworker/0:1H-ev [kworker/0:1H-events_highpri] | ||
| 49 | I< 0 141 2 0 0 0.0 26-03:07:25 ata_sff [ata_sff] | ||
| 50 | S 0 143 2 0 0 0.0 26-03:07:25 scsi_eh_0 [scsi_eh_0] | ||
| 51 | I< 0 144 2 0 0 0.0 26-03:07:25 scsi_tmf_0 [scsi_tmf_0] | ||
| 52 | S 0 145 2 0 0 0.0 26-03:07:25 scsi_eh_1 [scsi_eh_1] | ||
| 53 | I< 0 146 2 0 0 0.0 26-03:07:25 scsi_tmf_1 [scsi_tmf_1] | ||
| 54 | S 0 147 2 0 0 0.0 26-03:07:25 scsi_eh_2 [scsi_eh_2] | ||
| 55 | I< 0 148 2 0 0 0.0 26-03:07:25 scsi_tmf_2 [scsi_tmf_2] | ||
| 56 | S 0 149 2 0 0 0.0 26-03:07:25 scsi_eh_3 [scsi_eh_3] | ||
| 57 | I< 0 150 2 0 0 0.0 26-03:07:25 scsi_tmf_3 [scsi_tmf_3] | ||
| 58 | S 0 151 2 0 0 0.0 26-03:07:25 scsi_eh_4 [scsi_eh_4] | ||
| 59 | I< 0 152 2 0 0 0.0 26-03:07:25 scsi_tmf_4 [scsi_tmf_4] | ||
| 60 | S 0 153 2 0 0 0.0 26-03:07:25 scsi_eh_5 [scsi_eh_5] | ||
| 61 | I< 0 154 2 0 0 0.0 26-03:07:25 scsi_tmf_5 [scsi_tmf_5] | ||
| 62 | S 0 158 2 0 0 0.0 26-03:07:25 card0-crtc0 [card0-crtc0] | ||
| 63 | S 0 159 2 0 0 0.0 26-03:07:25 card0-crtc1 [card0-crtc1] | ||
| 64 | S 0 160 2 0 0 0.0 26-03:07:25 card0-crtc2 [card0-crtc2] | ||
| 65 | I< 0 162 2 0 0 0.0 26-03:07:25 kworker/1:1H-ev [kworker/1:1H-events_highpri] | ||
| 66 | S 0 163 2 0 0 0.0 26-03:07:25 scsi_eh_6 [scsi_eh_6] | ||
| 67 | I< 0 164 2 0 0 0.0 26-03:07:25 scsi_tmf_6 [scsi_tmf_6] | ||
| 68 | S 0 165 2 0 0 0.0 26-03:07:25 usb-storage [usb-storage] | ||
| 69 | I< 0 167 2 0 0 0.0 26-03:07:25 uas [uas] | ||
| 70 | I< 0 176 2 0 0 0.0 26-03:07:25 kdmflush [kdmflush] | ||
| 71 | I< 0 177 2 0 0 0.0 26-03:07:25 kdmflush [kdmflush] | ||
| 72 | S 0 202 2 0 0 0.0 26-03:07:24 scsi_eh_7 [scsi_eh_7] | ||
| 73 | I< 0 203 2 0 0 0.0 26-03:07:24 scsi_tmf_7 [scsi_tmf_7] | ||
| 74 | S 0 204 2 0 0 0.0 26-03:07:24 usb-storage [usb-storage] | ||
| 75 | I< 0 232 2 0 0 0.0 26-03:07:23 btrfs-worker [btrfs-worker] | ||
| 76 | I< 0 233 2 0 0 0.0 26-03:07:23 btrfs-worker-hi [btrfs-worker-hi] | ||
| 77 | I< 0 234 2 0 0 0.0 26-03:07:23 btrfs-delalloc [btrfs-delalloc] | ||
| 78 | I< 0 235 2 0 0 0.0 26-03:07:23 btrfs-flush_del [btrfs-flush_del] | ||
| 79 | I< 0 236 2 0 0 0.0 26-03:07:23 btrfs-cache [btrfs-cache] | ||
| 80 | I< 0 237 2 0 0 0.0 26-03:07:23 btrfs-fixup [btrfs-fixup] | ||
| 81 | I< 0 238 2 0 0 0.0 26-03:07:23 btrfs-endio [btrfs-endio] | ||
| 82 | I< 0 239 2 0 0 0.0 26-03:07:23 btrfs-endio-met [btrfs-endio-met] | ||
| 83 | I< 0 240 2 0 0 0.0 26-03:07:23 btrfs-endio-met [btrfs-endio-met] | ||
| 84 | I< 0 241 2 0 0 0.0 26-03:07:23 btrfs-endio-rai [btrfs-endio-rai] | ||
| 85 | I< 0 242 2 0 0 0.0 26-03:07:23 btrfs-rmw [btrfs-rmw] | ||
| 86 | I< 0 243 2 0 0 0.0 26-03:07:23 btrfs-endio-wri [btrfs-endio-wri] | ||
| 87 | I< 0 244 2 0 0 0.0 26-03:07:23 btrfs-freespace [btrfs-freespace] | ||
| 88 | I< 0 245 2 0 0 0.0 26-03:07:23 btrfs-delayed-m [btrfs-delayed-m] | ||
| 89 | I< 0 246 2 0 0 0.0 26-03:07:23 btrfs-readahead [btrfs-readahead] | ||
| 90 | I< 0 247 2 0 0 0.0 26-03:07:23 btrfs-qgroup-re [btrfs-qgroup-re] | ||
| 91 | S 0 248 2 0 0 0.0 26-03:07:23 btrfs-cleaner [btrfs-cleaner] | ||
| 92 | S 0 249 2 0 0 0.2 26-03:07:23 btrfs-transacti [btrfs-transacti] | ||
| 93 | I< 0 317 2 0 0 0.0 26-03:07:22 rpciod [rpciod] | ||
| 94 | I< 0 322 2 0 0 0.0 26-03:07:22 xprtiod [xprtiod] | ||
| 95 | S 0 381 2 0 0 0.0 26-03:07:22 irq/133-mei_me [irq/133-mei_me] | ||
| 96 | S 0 422 2 0 0 0.0 26-03:07:22 watchdogd [watchdogd] | ||
| 97 | I< 0 523 2 0 0 0.0 26-03:07:22 led_workqueue [led_workqueue] | ||
| 98 | I< 0 583 2 0 0 0.0 26-03:07:22 cryptd [cryptd] | ||
| 99 | I< 0 590 2 0 0 0.0 26-03:07:22 ext4-rsv-conver [ext4-rsv-conver] | ||
| 100 | Ss 104 693 1 12324 4292 0.5 26-03:07:21 dbus-daemon /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only | ||
| 101 | Ss 0 731 1 575120 1368 0.0 26-03:07:21 systemd-logind /lib/systemd/systemd-logind | ||
| 102 | Ssl 0 1111 1 121248 732 0.0 26-03:07:18 unattended-upgr /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal | ||
| 103 | S 0 1141 2 0 0 0.0 26-03:07:18 lockd [lockd] | ||
| 104 | I< 0 1459 2 0 0 0.0 26-03:07:16 nfsiod [nfsiod] | ||
| 105 | S 0 1621 2 0 0 0.0 26-03:07:15 NFSv4 callback [NFSv4 callback] | ||
| 106 | Ssl 0 1771 1 1548340 676 0.0 26-03:07:13 libvirtd /usr/sbin/libvirtd | ||
| 107 | I< 0 24315 2 0 0 0.0 26-02:49:02 cifsiod [cifsiod] | ||
| 108 | I< 0 24316 2 0 0 0.0 26-02:49:02 smb3decryptd [smb3decryptd] | ||
| 109 | I< 0 24317 2 0 0 0.0 26-02:49:02 cifsfileinfoput [cifsfileinfoput] | ||
| 110 | I< 0 24318 2 0 0 0.0 26-02:49:02 cifsoplockd [cifsoplockd] | ||
| 111 | I< 0 24319 2 0 0 0.0 26-02:49:02 cifs-dfscache [cifs-dfscache] | ||
| 112 | S 0 24322 2 0 0 0.0 26-02:49:02 cifsd [cifsd] | ||
| 113 | I< 0 24413 2 0 0 0.0 26-02:48:57 btrfs-worker [btrfs-worker] | ||
| 114 | I< 0 24414 2 0 0 0.0 26-02:48:57 btrfs-worker-hi [btrfs-worker-hi] | ||
| 115 | I< 0 24415 2 0 0 0.0 26-02:48:57 btrfs-delalloc [btrfs-delalloc] | ||
| 116 | I< 0 24416 2 0 0 0.0 26-02:48:57 btrfs-flush_del [btrfs-flush_del] | ||
| 117 | I< 0 24418 2 0 0 0.0 26-02:48:57 btrfs-cache [btrfs-cache] | ||
| 118 | I< 0 24419 2 0 0 0.0 26-02:48:57 btrfs-fixup [btrfs-fixup] | ||
| 119 | I< 0 24420 2 0 0 0.0 26-02:48:57 btrfs-endio [btrfs-endio] | ||
| 120 | I< 0 24421 2 0 0 0.0 26-02:48:57 btrfs-endio-met [btrfs-endio-met] | ||
| 121 | I< 0 24422 2 0 0 0.0 26-02:48:57 btrfs-endio-met [btrfs-endio-met] | ||
| 122 | I< 0 24423 2 0 0 0.0 26-02:48:57 btrfs-endio-rai [btrfs-endio-rai] | ||
| 123 | I< 0 24424 2 0 0 0.0 26-02:48:57 btrfs-rmw [btrfs-rmw] | ||
| 124 | I< 0 24425 2 0 0 0.0 26-02:48:57 btrfs-endio-wri [btrfs-endio-wri] | ||
| 125 | I< 0 24426 2 0 0 0.0 26-02:48:57 btrfs-freespace [btrfs-freespace] | ||
| 126 | I< 0 24427 2 0 0 0.0 26-02:48:57 btrfs-delayed-m [btrfs-delayed-m] | ||
| 127 | I< 0 24428 2 0 0 0.0 26-02:48:57 btrfs-readahead [btrfs-readahead] | ||
| 128 | I< 0 24429 2 0 0 0.0 26-02:48:57 btrfs-qgroup-re [btrfs-qgroup-re] | ||
| 129 | S 0 24450 2 0 0 0.0 26-02:48:53 btrfs-cleaner [btrfs-cleaner] | ||
| 130 | S 0 24451 2 0 0 0.0 26-02:48:53 btrfs-transacti [btrfs-transacti] | ||
| 131 | I< 0 747708 2 0 0 0.0 16-21:06:20 xfsalloc [xfsalloc] | ||
| 132 | I< 0 747709 2 0 0 0.0 16-21:06:20 xfs_mru_cache [xfs_mru_cache] | ||
| 133 | S 0 747713 2 0 0 0.0 16-21:06:20 jfsIO [jfsIO] | ||
| 134 | S 0 747714 2 0 0 0.0 16-21:06:20 jfsCommit [jfsCommit] | ||
| 135 | S 0 747715 2 0 0 0.0 16-21:06:20 jfsCommit [jfsCommit] | ||
| 136 | S 0 747716 2 0 0 0.0 16-21:06:20 jfsCommit [jfsCommit] | ||
| 137 | S 0 747717 2 0 0 0.0 16-21:06:20 jfsCommit [jfsCommit] | ||
| 138 | S 0 747718 2 0 0 0.0 16-21:06:20 jfsSync [jfsSync] | ||
| 139 | Ss 0 1071687 1 105976 28304 0.0 3-03:12:31 systemd-journal /lib/systemd/systemd-journald | ||
| 140 | Ss 0 1934146 1 25672 4704 0.0 11:19:31 cupsd /usr/sbin/cupsd -l | ||
| 141 | Ssl 0 1934148 1 182868 8540 0.0 11:19:31 cups-browsed /usr/sbin/cups-browsed | ||
| 142 | S 13 1934155 3392655 5752 88 0.0 11:19:31 pinger (pinger) | ||
| 143 | S< 33 1934166 3393034 57996 5460 0.0 11:19:31 apache2 /usr/sbin/apache2 -k start | ||
| 144 | S< 33 1934167 3393034 216944 13892 0.0 11:19:30 apache2 /usr/sbin/apache2 -k start | ||
| 145 | S< 33 1934168 3393034 216944 13756 0.0 11:19:30 apache2 /usr/sbin/apache2 -k start | ||
| 146 | S< 33 1934169 3393034 216936 13732 0.0 11:19:30 apache2 /usr/sbin/apache2 -k start | ||
| 147 | S< 33 1934170 3393034 216944 13888 0.0 11:19:30 apache2 /usr/sbin/apache2 -k start | ||
| 148 | S< 33 1934172 3393034 216944 15388 0.0 11:19:30 apache2 /usr/sbin/apache2 -k start | ||
| 149 | S< 33 1934701 3393034 216936 13736 0.0 11:19:29 apache2 /usr/sbin/apache2 -k start | ||
| 150 | S< 33 1935056 3393034 216920 13724 0.0 11:19:28 apache2 /usr/sbin/apache2 -k start | ||
| 151 | S 7 1936834 1934146 16652 832 0.0 11:18:12 dbus /usr/lib/cups/notifier/dbus dbus:// | ||
| 152 | S< 33 1955909 3393034 216928 13792 0.0 11:00:25 apache2 /usr/sbin/apache2 -k start | ||
| 153 | I< 0 2531464 2 0 0 0.0 06:35:47 kworker/u9:0-i9 [kworker/u9:0-i915_flip] | ||
| 154 | I 0 2570506 2 0 0 0.0 06:27:41 kworker/1:0-cgr [kworker/1:0-cgroup_destroy] | ||
| 155 | I 0 2596195 2 0 0 0.0 06:21:52 kworker/1:1-eve [kworker/1:1-events] | ||
| 156 | I 0 2785341 2 0 0 0.0 03:34:16 kworker/u8:8-bt [kworker/u8:8-btrfs-endio-write] | ||
| 157 | I 0 2785520 2 0 0 0.0 03:33:50 kworker/3:0-eve [kworker/3:0-events] | ||
| 158 | I 0 2798669 2 0 0 0.0 03:21:09 kworker/u8:5-bt [kworker/u8:5-btrfs-endio-write] | ||
| 159 | Ss 0 2803015 1 5616 3108 0.0 03:17:54 cron /usr/sbin/cron -f | ||
| 160 | I 0 2845483 2 0 0 0.0 02:38:11 kworker/0:3-eve [kworker/0:3-events] | ||
| 161 | I 0 2939490 2 0 0 0.1 01:10:32 kworker/0:0-eve [kworker/0:0-events] | ||
| 162 | I 0 2939754 2 0 0 0.0 01:10:26 kworker/u8:1-i9 [kworker/u8:1-i915] | ||
| 163 | I 0 2942040 2 0 0 0.0 01:08:02 kworker/u8:7-bt [kworker/u8:7-btrfs-endio-meta] | ||
| 164 | S 117 2954268 3392551 40044 5772 0.0 56:37 pickup pickup -l -t unix -u -c | ||
| 165 | I 0 2965195 2 0 0 0.0 46:00 kworker/u8:0-bt [kworker/u8:0-btrfs-worker] | ||
| 166 | I 0 2977972 2 0 0 0.0 33:54 kworker/u8:2-bt [kworker/u8:2-btrfs-endio-write] | ||
| 167 | I 0 2985488 2 0 0 0.0 27:02 kworker/u8:3-bl [kworker/u8:3-blkcg_punt_bio] | ||
| 168 | I 0 2987519 2 0 0 1.0 25:15 kworker/2:1-eve [kworker/2:1-events] | ||
| 169 | I 0 2987601 2 0 0 0.0 25:03 kworker/u8:9-i9 [kworker/u8:9-i915] | ||
| 170 | I< 0 2995218 2 0 0 0.0 18:41 kworker/u9:2-xp [kworker/u9:2-xprtiod] | ||
| 171 | I 0 2997170 2 0 0 0.0 16:41 kworker/3:1-rcu [kworker/3:1-rcu_gp] | ||
| 172 | I 0 3001264 2 0 0 0.0 13:01 kworker/u8:4-bt [kworker/u8:4-btrfs-endio-write] | ||
| 173 | I 0 3004697 2 0 0 0.7 09:41 kworker/2:0-eve [kworker/2:0-events] | ||
| 174 | I 0 3010619 2 0 0 1.0 04:29 kworker/2:2-eve [kworker/2:2-events] | ||
| 175 | I 0 3014612 2 0 0 0.0 00:41 kworker/3:2-eve [kworker/3:2-events] | ||
| 176 | S 0 3015082 2803015 6716 3028 0.0 00:30 cron /usr/sbin/CRON -f | ||
| 177 | I 0 3015382 2 0 0 0.0 00:00 kworker/u8:6-bt [kworker/u8:6-btrfs-endio-meta] | ||
| 178 | Ss 1 3392068 1 5592 504 0.0 15-02:34:39 atd /usr/sbin/atd -f | ||
| 179 | Ssl 0 3392072 1 235796 1740 0.0 15-02:34:39 accounts-daemon /usr/libexec/accounts-daemon | ||
| 180 | Ssl 106 3392076 1 315708 6128 0.0 15-02:34:39 colord /usr/libexec/colord | ||
| 181 | Ss 0 3392083 1 8120 720 0.0 15-02:34:39 haveged /usr/sbin/haveged --Foreground --verbose=1 | ||
| 182 | Ss 0 3392090 1 5168 132 0.0 15-02:34:39 blkmapd /usr/sbin/blkmapd | ||
| 183 | SNsl 111 3392094 1 155648 440 0.0 15-02:34:39 rtkit-daemon /usr/libexec/rtkit-daemon | ||
| 184 | Ssl 0 3392097 1 290168 1352 0.0 15-02:34:39 packagekitd /usr/libexec/packagekitd | ||
| 185 | Ss 128 3392100 1 7960 448 0.0 15-02:34:39 rpcbind /sbin/rpcbind -f -w | ||
| 186 | Ss 0 3392114 1 13432 616 0.0 15-02:34:39 systemd-machine /lib/systemd/systemd-machined | ||
| 187 | Ss 0 3392118 1 13316 848 0.0 15-02:34:39 sshd sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups | ||
| 188 | Ssl 0 3392124 1 244072 2456 0.0 15-02:34:39 upowerd /usr/libexec/upowerd | ||
| 189 | Ssl 0 3392138 1 1634748 10684 0.0 15-02:34:39 containerd /usr/bin/containerd | ||
| 190 | Ssl 0 3392139 1 222768 1784 0.0 15-02:34:39 rsyslogd /usr/sbin/rsyslogd -n -iNONE | ||
| 191 | Ss 13 3392140 1 3344 152 0.0 15-02:34:39 polipo /usr/bin/polipo -c /etc/polipo/config pidFile=/var/run/polipo/polipo.pid daemonise=true | ||
| 192 | Ssl 119 3392156 1 76472 1688 0.0 15-02:34:39 ntpd /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 119:126 | ||
| 193 | Ss 120 3392168 1 4656 276 0.0 15-02:34:39 rpc.statd /sbin/rpc.statd --no-notify | ||
| 194 | Ss 0 3392171 1 5072 432 0.0 15-02:34:39 rpc.mountd /usr/sbin/rpc.mountd --manage-gids | ||
| 195 | Ss 0 3392176 1 5008 288 0.0 15-02:34:39 rpc.idmapd /usr/sbin/rpc.idmapd | ||
| 196 | Ss 105 3392184 1 15544 6816 3.5 15-02:34:39 avahi-daemon avahi-daemon: running [tsui.local] | ||
| 197 | Ss 0 3392186 1 25288 3860 0.0 15-02:34:39 systemd-udevd /lib/systemd/systemd-udevd | ||
| 198 | S 105 3392190 3392184 8788 52 0.0 15-02:34:39 avahi-daemon avahi-daemon: chroot helper | ||
| 199 | Ssl 0 3392197 1 396120 4188 0.0 15-02:34:39 udisksd /usr/libexec/udisks2/udisksd | ||
| 200 | Ssl 0 3392214 1 237504 6632 0.0 15-02:34:39 polkitd /usr/libexec/polkitd --no-debug | ||
| 201 | Ss 0 3392284 1 9684 560 0.0 15-02:34:38 xinetd /usr/sbin/xinetd -pidfile /run/xinetd.pid -stayalive -inetd_compat -inetd_ipv6 | ||
| 202 | Ssl 0 3392285 1 314840 1352 0.0 15-02:34:38 ModemManager /usr/sbin/ModemManager | ||
| 203 | Ss 0 3392317 1 2352 140 0.0 15-02:34:38 acpid /usr/sbin/acpid | ||
| 204 | S 0 3392400 2 0 0 0.0 15-02:34:38 nfsd [nfsd] | ||
| 205 | S 0 3392401 2 0 0 0.0 15-02:34:38 nfsd [nfsd] | ||
| 206 | S 0 3392402 2 0 0 0.0 15-02:34:38 nfsd [nfsd] | ||
| 207 | S 0 3392403 2 0 0 0.0 15-02:34:38 nfsd [nfsd] | ||
| 208 | S 0 3392404 2 0 0 0.0 15-02:34:38 nfsd [nfsd] | ||
| 209 | S 0 3392405 2 0 0 0.0 15-02:34:38 nfsd [nfsd] | ||
| 210 | S 0 3392407 2 0 0 0.0 15-02:34:38 nfsd [nfsd] | ||
| 211 | S 0 3392410 2 0 0 0.0 15-02:34:38 nfsd [nfsd] | ||
| 212 | Ss 0 3392551 1 40092 1304 0.0 15-02:34:37 master /usr/lib/postfix/sbin/master -w | ||
| 213 | S 117 3392553 3392551 40156 568 0.0 15-02:34:37 qmgr qmgr -l -t unix -u | ||
| 214 | Ss 0 3392650 1 63652 4 0.0 15-02:34:36 squid /usr/sbin/squid --foreground -sYC | ||
| 215 | Ssl 116 3392652 1 1675196 93848 0.0 15-02:34:36 mariadbd /usr/sbin/mariadbd | ||
| 216 | S 13 3392655 3392650 81776 21232 0.0 15-02:34:36 squid (squid-1) --kid squid-1 --foreground -sYC | ||
| 217 | S 13 3392657 3392655 5572 68 0.0 15-02:34:36 log_file_daemon (logfile-daemon) /var/log/squid/access.log | ||
| 218 | S<s 0 3393034 1 216648 7560 0.0 15-02:34:34 apache2 /usr/sbin/apache2 -k start | ||
| 219 | Ss 33 3393037 1 3432 180 0.0 15-02:34:34 htcacheclean /usr/bin/htcacheclean -d 120 -p /var/cache/apache2/mod_cache_disk -l 300M -n | ||
| diff --git a/plugins/tests/var/ps_axwo.debian b/plugins/tests/var/ps_axwo.debian deleted file mode 100644 index 37a2d35e..00000000 --- a/plugins/tests/var/ps_axwo.debian +++ /dev/null | |||
| @@ -1,84 +0,0 @@ | |||
| 1 | STAT UID PID PPID VSZ RSS %CPU COMMAND COMMAND | ||
| 2 | S 0 1 0 1504 428 0.0 init init [2] | ||
| 3 | SN 0 2 1 0 0 0.0 ksoftirqd/0 [ksoftirqd/0] | ||
| 4 | S< 0 3 1 0 0 0.0 events/0 [events/0] | ||
| 5 | S< 0 4 3 0 0 0.0 khelper [khelper] | ||
| 6 | S< 0 5 3 0 0 0.0 kacpid [kacpid] | ||
| 7 | S< 0 38 3 0 0 0.0 kblockd/0 [kblockd/0] | ||
| 8 | S 0 48 3 0 0 0.0 pdflush [pdflush] | ||
| 9 | S< 0 51 3 0 0 0.0 aio/0 [aio/0] | ||
| 10 | S 0 50 1 0 0 0.0 kswapd0 [kswapd0] | ||
| 11 | S 0 193 1 0 0 0.0 kseriod [kseriod] | ||
| 12 | S 0 214 1 0 0 0.0 scsi_eh_0 [scsi_eh_0] | ||
| 13 | S 0 221 1 0 0 0.0 khubd [khubd] | ||
| 14 | S 0 299 1 0 0 0.3 kjournald [kjournald] | ||
| 15 | S 0 1148 1 0 0 0.0 pciehpd_event [pciehpd_event] | ||
| 16 | S 0 1168 1 0 0 0.0 shpchpd_event [shpchpd_event] | ||
| 17 | Ss 1 1795 1 1612 276 0.0 portmap /sbin/portmap | ||
| 18 | Ss 0 2200 1 1652 568 0.0 vmware-guestd /usr/sbin/vmware-guestd --background /var/run/vmware-guestd.pid | ||
| 19 | Ss 0 2209 1 2240 532 0.0 inetd /usr/sbin/inetd | ||
| 20 | Ss 0 2319 1 3468 792 0.0 sshd /usr/sbin/sshd | ||
| 21 | Ss 0 2323 1 2468 676 0.0 rpc.statd /sbin/rpc.statd | ||
| 22 | Ss 1 2332 1 1684 488 0.0 atd /usr/sbin/atd | ||
| 23 | Ss 0 2335 1 1764 636 0.0 cron /usr/sbin/cron | ||
| 24 | Ss+ 0 2350 1 1500 348 0.0 getty /sbin/getty 38400 tty1 | ||
| 25 | Ss+ 0 2351 1 1500 348 0.0 getty /sbin/getty 38400 tty2 | ||
| 26 | Ss+ 0 2352 1 1500 348 0.0 getty /sbin/getty 38400 tty3 | ||
| 27 | Ss+ 0 2353 1 1500 348 0.0 getty /sbin/getty 38400 tty4 | ||
| 28 | Ss+ 0 2354 1 1500 348 0.0 getty /sbin/getty 38400 tty5 | ||
| 29 | Ss+ 0 2355 1 1500 348 0.0 getty /sbin/getty 38400 tty6 | ||
| 30 | S 0 6907 1 2308 892 0.0 mysqld_safe /bin/sh /usr/bin/mysqld_safe | ||
| 31 | S 103 6944 6907 123220 27724 0.0 mysqld /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock | ||
| 32 | S 0 6945 6907 1488 420 0.0 logger logger -p daemon.err -t mysqld_safe -i -t mysqld | ||
| 33 | S 1001 17778 1 6436 1588 0.0 snmpd /usr/sbin/snmpd -u nagios -Lsd -Lf /dev/null -p/var/run/snmpd.pid | ||
| 34 | Ss 0 17789 1 9496 5556 0.0 snmptrapd /usr/sbin/snmptrapd -t -m ALL -M /usr/share/snmp/mibs:/usr/local/monitoring/snmp/load -p /var/run/snmptrapd.pid | ||
| 35 | Ss 0 847 2319 14452 1752 0.0 sshd sshd: tonvoon [priv] | ||
| 36 | S 1000 857 847 14616 1832 0.0 sshd sshd: tonvoon@pts/3 | ||
| 37 | Ss 1000 860 857 2984 1620 0.0 bash -bash | ||
| 38 | S 0 868 860 2588 1428 0.0 bash -su | ||
| 39 | S+ 1001 877 868 2652 1568 0.0 bash -su | ||
| 40 | S 0 6086 3 0 0 0.0 pdflush [pdflush] | ||
| 41 | Ss 0 17832 2319 14452 1752 0.0 sshd sshd: tonvoon [priv] | ||
| 42 | S 1000 18155 17832 14620 1840 0.0 sshd sshd: tonvoon@pts/0 | ||
| 43 | Ss 1000 18156 18155 2984 1620 0.0 bash -bash | ||
| 44 | S 0 18518 18156 2588 1428 0.0 bash -su | ||
| 45 | S 1001 18955 18518 2672 1600 0.0 bash -su | ||
| 46 | Ss 0 21683 2319 14452 1756 0.0 sshd sshd: tonvoon [priv] | ||
| 47 | S 1000 21742 21683 14620 1896 0.0 sshd sshd: tonvoon@pts/1 | ||
| 48 | Ss 1000 21743 21742 2984 1620 0.0 bash -bash | ||
| 49 | S 0 21748 21743 2592 1432 0.0 bash -su | ||
| 50 | S 1001 21757 21748 2620 1540 0.0 bash -su | ||
| 51 | Ss 0 2334 2319 14452 1756 0.0 sshd sshd: tonvoon [priv] | ||
| 52 | S 1000 2343 2334 14620 1840 0.0 sshd sshd: tonvoon@pts/2 | ||
| 53 | Ss 1000 2344 2343 2984 1620 0.0 bash -bash | ||
| 54 | S 0 2349 2344 2592 1432 0.0 bash -su | ||
| 55 | S+ 1001 2364 2349 2620 1520 0.0 bash -su | ||
| 56 | T 1001 2454 2364 2096 1032 0.0 vi vi configure.in.rej | ||
| 57 | S+ 1001 8500 21757 69604 52576 0.0 opsview_web_ser /usr/bin/perl -w ./script/opsview_web_server.pl -f -d | ||
| 58 | Ss 0 7609 2319 14452 1756 0.0 sshd sshd: tonvoon [priv] | ||
| 59 | S 1000 7617 7609 14460 1828 0.0 sshd sshd: tonvoon@pts/4 | ||
| 60 | Ss 1000 7618 7617 2984 1620 0.0 bash -bash | ||
| 61 | S 0 7623 7618 2592 1432 0.0 bash -su | ||
| 62 | S+ 1001 7632 7623 2620 1528 0.0 bash -su | ||
| 63 | Ss 1001 12678 1 20784 17728 0.0 opsviewd opsviewd | ||
| 64 | Ss 0 832 1 14512 6360 0.0 apache2 /usr/sbin/apache2 -k start -DSSL | ||
| 65 | S 33 842 832 14648 6596 0.0 apache2 /usr/sbin/apache2 -k start -DSSL | ||
| 66 | S 33 843 832 14512 6504 0.0 apache2 /usr/sbin/apache2 -k start -DSSL | ||
| 67 | S 33 844 832 14512 6476 0.0 apache2 /usr/sbin/apache2 -k start -DSSL | ||
| 68 | S 33 845 832 14512 6476 0.0 apache2 /usr/sbin/apache2 -k start -DSSL | ||
| 69 | S 33 846 832 14512 6476 0.0 apache2 /usr/sbin/apache2 -k start -DSSL | ||
| 70 | Ss 7 4081 1 2464 884 0.0 lpd /usr/sbin/lpd -s | ||
| 71 | S 33 26484 832 14512 6476 0.0 apache2 /usr/sbin/apache2 -k start -DSSL | ||
| 72 | Ss 1001 22324 1 20252 1612 0.1 nagios ../../bin/nagios -d /usr/local/nagios/etc/nagios.cfg | ||
| 73 | Ss 0 23336 2319 14452 1756 0.0 sshd sshd: tonvoon [priv] | ||
| 74 | S 1000 23339 23336 14620 1840 0.0 sshd sshd: tonvoon@pts/5 | ||
| 75 | Ss 1000 23340 23339 2996 1636 0.0 bash -bash | ||
| 76 | S 0 23367 23340 3020 1628 0.0 bash bash | ||
| 77 | S 1001 23370 23367 3064 1748 0.0 bash bash | ||
| 78 | Ss 1001 23783 1 3220 764 0.0 ndo2db /usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg | ||
| 79 | Ss 1001 23784 1 6428 4948 0.0 import_ndologsd import_ndologsd | ||
| 80 | S+ 1001 9803 18955 4132 1936 0.0 ssh ssh altinity@cube02.lei.altinity | ||
| 81 | S 1001 22505 22324 20256 1616 0.0 nagios ../../bin/nagios -d /usr/local/nagios/etc/nagios.cfg | ||
| 82 | S 1001 22506 22505 1676 608 0.0 check_ping /usr/local/libexec/check_ping -H 192.168.10.23 -w 3000.0,80% -c 5000.0,100% -p 1 | ||
| 83 | S 1001 22507 22506 1660 492 0.0 ping /bin/ping -n -U -w 10 -c 1 192.168.10.23 | ||
| 84 | R+ 1001 22508 23370 2308 680 0.0 ps ps axwo stat uid pid ppid vsz rss pcpu comm args | ||
| diff --git a/plugins/utils.c b/plugins/utils.c index 348ec022..ebdae2e1 100644 --- a/plugins/utils.c +++ b/plugins/utils.c | |||
| @@ -27,6 +27,8 @@ | |||
| 27 | #include "utils_base.h" | 27 | #include "utils_base.h" | 
| 28 | #include <stdarg.h> | 28 | #include <stdarg.h> | 
| 29 | #include <limits.h> | 29 | #include <limits.h> | 
| 30 | #include <string.h> | ||
| 31 | #include <errno.h> | ||
| 30 | 32 | ||
| 31 | #include <arpa/inet.h> | 33 | #include <arpa/inet.h> | 
| 32 | 34 | ||
| @@ -239,6 +241,46 @@ is_intnonneg (char *number) | |||
| 239 | return FALSE; | 241 | return FALSE; | 
| 240 | } | 242 | } | 
| 241 | 243 | ||
| 244 | /* | ||
| 245 | * Checks whether the number in the string _number_ can be put inside a int64_t | ||
| 246 | * On success the number will be written to the _target_ address, if _target_ is not set | ||
| 247 | * to NULL. | ||
| 248 | */ | ||
| 249 | int is_int64(char *number, int64_t *target) { | ||
| 250 | errno = 0; | ||
| 251 | uint64_t tmp = strtoll(number, NULL, 10); | ||
| 252 | if (errno != 0) { | ||
| 253 | return 0; | ||
| 254 | } | ||
| 255 | if (tmp < INT64_MIN || tmp > INT64_MAX) { | ||
| 256 | return 0; | ||
| 257 | } | ||
| 258 | if (target != NULL) { | ||
| 259 | *target = tmp; | ||
| 260 | } | ||
| 261 | return 1; | ||
| 262 | } | ||
| 263 | |||
| 264 | /* | ||
| 265 | * Checks whether the number in the string _number_ can be put inside a uint64_t | ||
| 266 | * On success the number will be written to the _target_ address, if _target_ is not set | ||
| 267 | * to NULL. | ||
| 268 | */ | ||
| 269 | int is_uint64(char *number, uint64_t *target) { | ||
| 270 | errno = 0; | ||
| 271 | uint64_t tmp = strtoll(number, NULL, 10); | ||
| 272 | if (errno != 0) { | ||
| 273 | return 0; | ||
| 274 | } | ||
| 275 | if (tmp < 0 || tmp > UINT64_MAX) { | ||
| 276 | return 0; | ||
| 277 | } | ||
| 278 | if (target != NULL) { | ||
| 279 | *target = tmp; | ||
| 280 | } | ||
| 281 | return 1; | ||
| 282 | } | ||
| 283 | |||
| 242 | int | 284 | int | 
| 243 | is_intpercent (char *number) | 285 | is_intpercent (char *number) | 
| 244 | { | 286 | { | 
| @@ -556,6 +598,88 @@ char *perfdata (const char *label, | |||
| 556 | } | 598 | } | 
| 557 | 599 | ||
| 558 | 600 | ||
| 601 | char *perfdata_uint64 (const char *label, | ||
| 602 | uint64_t val, | ||
| 603 | const char *uom, | ||
| 604 | int warnp, /* Warning present */ | ||
| 605 | uint64_t warn, | ||
| 606 | int critp, /* Critical present */ | ||
| 607 | uint64_t crit, | ||
| 608 | int minp, /* Minimum present */ | ||
| 609 | uint64_t minv, | ||
| 610 | int maxp, /* Maximum present */ | ||
| 611 | uint64_t maxv) | ||
| 612 | { | ||
| 613 | char *data = NULL; | ||
| 614 | |||
| 615 | if (strpbrk (label, "'= ")) | ||
| 616 | xasprintf (&data, "'%s'=%ld%s;", label, val, uom); | ||
| 617 | else | ||
| 618 | xasprintf (&data, "%s=%ld%s;", label, val, uom); | ||
| 619 | |||
| 620 | if (warnp) | ||
| 621 | xasprintf (&data, "%s%lu;", data, warn); | ||
| 622 | else | ||
| 623 | xasprintf (&data, "%s;", data); | ||
| 624 | |||
| 625 | if (critp) | ||
| 626 | xasprintf (&data, "%s%lu;", data, crit); | ||
| 627 | else | ||
| 628 | xasprintf (&data, "%s;", data); | ||
| 629 | |||
| 630 | if (minp) | ||
| 631 | xasprintf (&data, "%s%lu;", data, minv); | ||
| 632 | else | ||
| 633 | xasprintf (&data, "%s;", data); | ||
| 634 | |||
| 635 | if (maxp) | ||
| 636 | xasprintf (&data, "%s%lu", data, maxv); | ||
| 637 | |||
| 638 | return data; | ||
| 639 | } | ||
| 640 | |||
| 641 | |||
| 642 | char *perfdata_int64 (const char *label, | ||
| 643 | int64_t val, | ||
| 644 | const char *uom, | ||
| 645 | int warnp, /* Warning present */ | ||
| 646 | int64_t warn, | ||
| 647 | int critp, /* Critical present */ | ||
| 648 | int64_t crit, | ||
| 649 | int minp, /* Minimum present */ | ||
| 650 | int64_t minv, | ||
| 651 | int maxp, /* Maximum present */ | ||
| 652 | int64_t maxv) | ||
| 653 | { | ||
| 654 | char *data = NULL; | ||
| 655 | |||
| 656 | if (strpbrk (label, "'= ")) | ||
| 657 | xasprintf (&data, "'%s'=%ld%s;", label, val, uom); | ||
| 658 | else | ||
| 659 | xasprintf (&data, "%s=%ld%s;", label, val, uom); | ||
| 660 | |||
| 661 | if (warnp) | ||
| 662 | xasprintf (&data, "%s%ld;", data, warn); | ||
| 663 | else | ||
| 664 | xasprintf (&data, "%s;", data); | ||
| 665 | |||
| 666 | if (critp) | ||
| 667 | xasprintf (&data, "%s%ld;", data, crit); | ||
| 668 | else | ||
| 669 | xasprintf (&data, "%s;", data); | ||
| 670 | |||
| 671 | if (minp) | ||
| 672 | xasprintf (&data, "%s%ld;", data, minv); | ||
| 673 | else | ||
| 674 | xasprintf (&data, "%s;", data); | ||
| 675 | |||
| 676 | if (maxp) | ||
| 677 | xasprintf (&data, "%s%ld", data, maxv); | ||
| 678 | |||
| 679 | return data; | ||
| 680 | } | ||
| 681 | |||
| 682 | |||
| 559 | char *fperfdata (const char *label, | 683 | char *fperfdata (const char *label, | 
| 560 | double val, | 684 | double val, | 
| 561 | const char *uom, | 685 | const char *uom, | 
| diff --git a/plugins/utils.h b/plugins/utils.h index 33a20547..5b54da3c 100644 --- a/plugins/utils.h +++ b/plugins/utils.h | |||
| @@ -16,6 +16,7 @@ suite of plugins. */ | |||
| 16 | /* now some functions etc are being defined in ../lib/utils_base.c */ | 16 | /* now some functions etc are being defined in ../lib/utils_base.c */ | 
| 17 | #include "utils_base.h" | 17 | #include "utils_base.h" | 
| 18 | 18 | ||
| 19 | |||
| 19 | #ifdef NP_EXTRA_OPTS | 20 | #ifdef NP_EXTRA_OPTS | 
| 20 | /* Include extra-opts functions if compiled in */ | 21 | /* Include extra-opts functions if compiled in */ | 
| 21 | #include "extra_opts.h" | 22 | #include "extra_opts.h" | 
| @@ -38,6 +39,8 @@ int is_intpos (char *); | |||
| 38 | int is_intneg (char *); | 39 | int is_intneg (char *); | 
| 39 | int is_intnonneg (char *); | 40 | int is_intnonneg (char *); | 
| 40 | int is_intpercent (char *); | 41 | int is_intpercent (char *); | 
| 42 | int is_uint64(char *number, uint64_t *target); | ||
| 43 | int is_int64(char *number, int64_t *target); | ||
| 41 | 44 | ||
| 42 | int is_numeric (char *); | 45 | int is_numeric (char *); | 
| 43 | int is_positive (char *); | 46 | int is_positive (char *); | 
| @@ -88,6 +91,12 @@ void usage_va(const char *fmt, ...) __attribute__((noreturn)); | |||
| 88 | char *perfdata (const char *, long int, const char *, int, long int, | 91 | char *perfdata (const char *, long int, const char *, int, long int, | 
| 89 | int, long int, int, long int, int, long int); | 92 | int, long int, int, long int, int, long int); | 
| 90 | 93 | ||
| 94 | char *perfdata_uint64 (const char *, uint64_t , const char *, int, uint64_t, | ||
| 95 | int, uint64_t, int, uint64_t, int, uint64_t); | ||
| 96 | |||
| 97 | char *perfdata_int64 (const char *, int64_t, const char *, int, int64_t, | ||
| 98 | int, int64_t, int, int64_t, int, int64_t); | ||
| 99 | |||
| 91 | char *fperfdata (const char *, double, const char *, int, double, | 100 | char *fperfdata (const char *, double, const char *, int, double, | 
| 92 | int, double, int, double, int, double); | 101 | int, double, int, double, int, double); | 
| 93 | 102 | ||
