From 4fe50f4297fa4b34d28c2d39ab83e5d2db4e1193 Mon Sep 17 00:00:00 2001 From: Ton Voon Date: Wed, 17 Sep 2003 09:31:56 +0000 Subject: [PATCH] Support for check_swap in AIX (tested on 5.1) git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@734 f882894a-f735-0410-b71e-b25c423dba1c --- configure.in | 59 ++++++++++++++++++++++++++++++-------------- plugins/check_swap.c | 36 ++++++++++++++++++++++----- 2 files changed, 70 insertions(+), 25 deletions(-) diff --git a/configure.in b/configure.in index 09e8e35..0999d7e 100644 --- a/configure.in +++ b/configure.in @@ -1263,23 +1263,9 @@ dnl SWAP info required is amount allocated/available and amount free dnl The plugin works through all the swap devices and adds up the total swap dnl available. AC_PATH_PROG(PATH_TO_SWAP,swap) -AC_PATH_PROG(PATH_TO_SWAPINFO,swapinfo) - -dnl dunno why this does not work below - use hack (kbd) -dnl fine on linux, broken on solaris -dnl if /bin/test -e "/proc/meminfo" -AC_MSG_CHECKING(for how to check memory) -if [cat /proc/meminfo > /dev/null 2>&1] -then - AC_MSG_RESULT([found /proc/meminfo]) - AC_DEFINE(HAVE_PROC_MEMINFO,1,[Define if we have /proc/meminfo]) - AC_DEFINE_UNQUOTED(PROC_MEMINFO,"/proc/meminfo",[path to /proc/meminfo if name changes]) - EXTRAS="$EXTRAS check_swap" -fi - -if ( test -n "$PATH_TO_SWAP" || test -n "$PATH_TO_SWAPINFO" ) +if (test -n "$PATH_TO_SWAP") then - +AC_MSG_CHECKING([for $PATH_TO_SWAP format]) if [$PATH_TO_SWAP -l 2>&1 >/dev/null] then ac_cv_have_swap=yes @@ -1306,8 +1292,15 @@ then fi EXTRAS="$EXTRAS check_swap" +fi +dnl end if for PATH_TO_SWAP +fi -elif [$PATH_TO_SWAPINFO -k 2>&1 | egrep -i "^Device" >/dev/null] +AC_PATH_PROG(PATH_TO_SWAPINFO,swapinfo) +if (test -n "$PATH_TO_SWAPINFO") +then +AC_MSG_CHECKING([for $PATH_TO_SWAPINFO format]) +if [$PATH_TO_SWAPINFO -k 2>&1 | egrep -i "^Device" >/dev/null] then ac_cv_have_swap=yes ac_cv_swap_command="$PATH_TO_SWAPINFO -k" @@ -1328,6 +1321,23 @@ then ac_cv_swap_conv=1024 AC_MSG_RESULT([using HP-UX format swapinfo]) fi +dnl end if for PATH_TO_SWAPINFO +fi + +AC_PATH_PROG(PATH_TO_LSPS,lsps) +if (test -n "$PATH_TO_LSPS") +then +AC_MSG_CHECKING([for $PATH_TO_LSPS format]) +if [$PATH_TO_LSPS -a 2>/dev/null | egrep -i "^Page Space" > /dev/null] +then + ac_cv_have_swap=yes + ac_cv_swap_command="$PATH_TO_LSPS -a" + ac_cv_swap_format=["%*s %*s %*s %d%*s %d %*s"] + ac_cv_swap_conv=1 + AC_MSG_RESULT([using AIX lsps]) +fi +dnl end if for PATH_TO_SWAPINFO +fi if test "x$ac_cv_have_swap" != "x" then @@ -1343,8 +1353,19 @@ then [Conversion factor to MB]) fi -dnl End of if SWAP -fi +dnl dunno why this does not work below - use hack (kbd) +dnl fine on linux, broken on solaris +dnl if /bin/test -e "/proc/meminfo" +AC_MSG_CHECKING([for /proc/meminfo]) +if [cat /proc/meminfo > /dev/null 2>&1] +then + AC_MSG_RESULT([found /proc/meminfo]) + AC_DEFINE(HAVE_PROC_MEMINFO,1,[Define if we have /proc/meminfo]) + AC_DEFINE_UNQUOTED(PROC_MEMINFO,"/proc/meminfo",[path to /proc/meminfo if name changes]) + EXTRAS="$EXTRAS check_swap" +else + AC_MSG_RESULT([no]) +fi AC_PATH_PROG(PATH_TO_DIG,dig) AC_DEFINE_UNQUOTED(PATH_TO_DIG,"$PATH_TO_DIG",[Path to dig command, if present]) diff --git a/plugins/check_swap.c b/plugins/check_swap.c index 3a799c3..2b71fd2 100644 --- a/plugins/check_swap.c +++ b/plugins/check_swap.c @@ -47,10 +47,6 @@ long unsigned int crit_size = 0; int verbose; int allswaps; -#if !defined(sun) -int sun = 0; /* defined by compiler if it is a sun solaris system */ -#endif - int main (int argc, char **argv) { @@ -103,10 +99,18 @@ main (int argc, char **argv) fclose(fp); #else # ifdef HAVE_SWAP - if (!allswaps && sun) { + if (!allswaps) { +#ifdef _AIX + asprintf(&swap_command, "%s", "/usr/sbin/lsps -s"); + asprintf(&swap_format, "%s", "%d%*s %d"); + conv_factor = 1; +#else +# ifdef sun asprintf(&swap_command, "%s", "/usr/sbin/swap -s"); asprintf(&swap_format, "%s", "%*s %*dk %*s %*s + %*dk %*s = %dk %*s %dk %*s"); conv_factor = 2048; +# endif +#endif } else { asprintf(&swap_command, "%s", SWAP_COMMAND); asprintf(&swap_format, "%s", SWAP_FORMAT); @@ -144,17 +148,33 @@ main (int argc, char **argv) } } - if (!allswaps && sun) { + if (!allswaps) { +#ifdef _AIX + fgets(input_buffer, MAX_INPUT_BUFFER - 1, child_process); /* Ignore first line */ + sscanf (input_buffer, swap_format, &total_swap, &used_swap); + free_swap = total_swap * (100 - used_swap) /100; + used_swap = total_swap - free_swap; + if (verbose >= 3) + printf (_("total=%d, used=%d, free=%d\n"), total_swap, used_swap, free_swap); +#else +# ifdef sun sscanf (input_buffer, swap_format, &used_swap, &free_swap); used_swap = used_swap / 1024; free_swap = free_swap / 1024; total_swap = used_swap + free_swap; +# endif +#endif } else { while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) { sscanf (input_buffer, swap_format, &dsktotal, &dskfree); dsktotal = dsktotal / conv_factor; + /* AIX lists percent used, so this converts to dskfree in MBs */ +#ifdef _AIX + dskfree = dsktotal * (100 - dskfree) / 100; +#else dskfree = dskfree / conv_factor; +#endif if (verbose >= 3) printf (_("total=%d, free=%d\n"), dsktotal, dskfree); @@ -372,6 +392,10 @@ print_help (void) On Solaris, if -a specified, uses swap -l, otherwise uses swap -s.\n\ Will be discrepencies because swap -s counts allocated swap and includes\n\ real memory\n")); +#endif +#ifdef _AIX + printf (_("\n\ +On AIX, if -a is specified, uses lsps -a, otherwise uses lsps -s.\n")); #endif printf (_(UT_SUPPORT)); -- 2.30.2