Procházet zdrojové kódy

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
Ton Voon před 22 roky
rodič
revize
4fe50f4297
2 změnil soubory, kde provedl 70 přidání a 25 odebrání
  1. 40 19
      configure.in
  2. 30 6
      plugins/check_swap.c

+ 40 - 19
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 The plugin works through all the swap devices and adds up the total swap
 dnl available.
 dnl available.
 AC_PATH_PROG(PATH_TO_SWAP,swap)
 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
 then
-
+AC_MSG_CHECKING([for $PATH_TO_SWAP format])
 if [$PATH_TO_SWAP -l 2>&1 >/dev/null]
 if [$PATH_TO_SWAP -l 2>&1 >/dev/null]
 then
 then
 	ac_cv_have_swap=yes
 	ac_cv_have_swap=yes
@@ -1306,8 +1292,15 @@ then
 
 
 	fi
 	fi
 	EXTRAS="$EXTRAS check_swap"
 	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
 then
 	ac_cv_have_swap=yes
 	ac_cv_have_swap=yes
 	ac_cv_swap_command="$PATH_TO_SWAPINFO -k"
 	ac_cv_swap_command="$PATH_TO_SWAPINFO -k"
@@ -1328,6 +1321,23 @@ then
 	ac_cv_swap_conv=1024
 	ac_cv_swap_conv=1024
 	AC_MSG_RESULT([using HP-UX format swapinfo])
 	AC_MSG_RESULT([using HP-UX format swapinfo])
 fi
 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" 
 if test "x$ac_cv_have_swap" != "x" 
 then
 then
@@ -1343,8 +1353,19 @@ then
 		[Conversion factor to MB])
 		[Conversion factor to MB])
 fi
 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_PATH_PROG(PATH_TO_DIG,dig)
 AC_DEFINE_UNQUOTED(PATH_TO_DIG,"$PATH_TO_DIG",[Path to dig command, if present])
 AC_DEFINE_UNQUOTED(PATH_TO_DIG,"$PATH_TO_DIG",[Path to dig command, if present])

+ 30 - 6
plugins/check_swap.c

@@ -47,10 +47,6 @@ long unsigned int crit_size = 0;
 int verbose;
 int verbose;
 int allswaps;
 int allswaps;
 
 
-#if !defined(sun)
-int sun = 0;	/* defined by compiler if it is a sun solaris system */
-#endif
-
 int
 int
 main (int argc, char **argv)
 main (int argc, char **argv)
 {
 {
@@ -103,10 +99,18 @@ main (int argc, char **argv)
 	fclose(fp);
 	fclose(fp);
 #else
 #else
 # ifdef HAVE_SWAP
 # 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_command, "%s", "/usr/sbin/swap -s");
 		asprintf(&swap_format, "%s", "%*s %*dk %*s %*s + %*dk %*s = %dk %*s %dk %*s");
 		asprintf(&swap_format, "%s", "%*s %*dk %*s %*s + %*dk %*s = %dk %*s %dk %*s");
 		conv_factor = 2048;
 		conv_factor = 2048;
+# endif
+#endif
 	} else {
 	} else {
 		asprintf(&swap_command, "%s", SWAP_COMMAND);
 		asprintf(&swap_command, "%s", SWAP_COMMAND);
 		asprintf(&swap_format, "%s", SWAP_FORMAT);
 		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);
 		sscanf (input_buffer, swap_format, &used_swap, &free_swap);
 		used_swap = used_swap / 1024;
 		used_swap = used_swap / 1024;
 		free_swap = free_swap / 1024;
 		free_swap = free_swap / 1024;
 		total_swap = used_swap + free_swap;
 		total_swap = used_swap + free_swap;
+# endif
+#endif
 	} else {
 	} else {
 		while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) {
 		while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) {
 			sscanf (input_buffer, swap_format, &dsktotal, &dskfree);
 			sscanf (input_buffer, swap_format, &dsktotal, &dskfree);
 
 
 			dsktotal = dsktotal / conv_factor;
 			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;
 			dskfree = dskfree / conv_factor;
+#endif
 			if (verbose >= 3)
 			if (verbose >= 3)
 				printf (_("total=%d, free=%d\n"), dsktotal, dskfree);
 				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\
 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\
 Will be discrepencies because swap -s counts allocated swap and includes\n\
 real memory\n"));
 real memory\n"));
+#endif
+#ifdef _AIX
+	printf (_("\n\
+On AIX, if -a is specified, uses lsps -a, otherwise uses lsps -s.\n"));
 #endif
 #endif
 
 
 	printf (_(UT_SUPPORT));
 	printf (_(UT_SUPPORT));