Revision: 1980
http://nagiosplug.svn.sourceforge.net/nagiosplug/?rev=1980&view=rev
Author: tonvoon
Date: 2008-04-21 01:38:43 -0700 (Mon, 21 Apr 2008)
Log Message:
-----------
Use utils_cmd to run check_procs' command. Added a
utils_cmd simulation of a filename, for testing purposes
Modified Paths:
--------------
nagiosplug/branches/new_threshold_syntax/lib/utils_cmd.c
nagiosplug/branches/new_threshold_syntax/lib/utils_cmd.h
nagiosplug/branches/new_threshold_syntax/plugins/check_procs.c
Modified: nagiosplug/branches/new_threshold_syntax/lib/utils_cmd.c
===================================================================
--- nagiosplug/branches/new_threshold_syntax/lib/utils_cmd.c 2008-04-17 10:46:22 UTC (rev 1979)
+++ nagiosplug/branches/new_threshold_syntax/lib/utils_cmd.c 2008-04-21 08:38:43 UTC (rev 1980)
@@ -45,6 +45,7 @@
#include "common.h"
#include "utils_cmd.h"
#include "utils_base.h"
+#include <fcntl.h>
#ifdef HAVE_SYS_WAIT_H
# include <sys/wait.h>
@@ -377,3 +378,20 @@
return _cmd_close (fd);
}
+
+int
+cmd_file_read ( char *filename, output *out, int flags)
+{
+ int fd;
+ if(out)
+ memset (out, 0, sizeof(output));
+
+ if ((fd = open(filename, O_RDONLY)) == -1) {
+ die( STATE_UNKNOWN, _("Error opening %s: %s"), filename, strerror(errno) );
+ }
+
+ if(out)
+ out->lines = _cmd_fetch_output (fd, out, flags);
+
+ return 0;
+}
Modified: nagiosplug/branches/new_threshold_syntax/lib/utils_cmd.h
===================================================================
--- nagiosplug/branches/new_threshold_syntax/lib/utils_cmd.h 2008-04-17 10:46:22 UTC (rev 1979)
+++ nagiosplug/branches/new_threshold_syntax/lib/utils_cmd.h 2008-04-21 08:38:43 UTC (rev 1980)
@@ -22,6 +22,7 @@
/** prototypes **/
int cmd_run (const char *, output *, output *, int);
int cmd_run_array (char *const *, output *, output *, int);
+int cmd_file_read (char *, output *, int);
/* only multi-threaded plugins need to bother with this */
void cmd_init (void);
Modified: nagiosplug/branches/new_threshold_syntax/plugins/check_procs.c
===================================================================
--- nagiosplug/branches/new_threshold_syntax/plugins/check_procs.c 2008-04-17 10:46:22 UTC (rev 1979)
+++ nagiosplug/branches/new_threshold_syntax/plugins/check_procs.c 2008-04-21 08:38:43 UTC (rev 1980)
@@ -41,8 +41,8 @@
const char *email = "[email protected]";
#include "common.h"
-#include "popen.h"
#include "utils.h"
+#include "utils_cmd.h"
#include "regex.h"
#include "utils_base.h"
@@ -144,7 +144,7 @@
int pos; /* number of spaces before 'args' in `ps` output */
int cols; /* number of columns in ps output */
int expected_cols = PS_COLS - 1;
- int i = 0; /* Temporary values */
+ int i = 0, j = 0; /* Temporary values */
double rss_sum = 0;
double vsz_sum = 0;
double cpu_sum = 0;
@@ -153,6 +153,7 @@
double cpu_max = 0;
int multiple_process_output_flag = 0;
int number_threshold_failure_flag = 0;
+ output chld_out, chld_err;
setlocale (LC_ALL, "");
@@ -173,42 +174,28 @@
mypid = getpid();
/* Set signal handling and alarm timeout */
- if (signal (SIGALRM, popen_timeout_alarm_handler) == SIG_ERR) {
- usage4 (_("Cannot catch SIGALRM"));
+ if (signal (SIGALRM, timeout_alarm_handler) == SIG_ERR) {
+ die (STATE_UNKNOWN, _("Cannot catch SIGALRM"));
}
- alarm (timeout_interval);
+ (void) alarm ((unsigned) timeout_interval);
if (verbose >= 3)
printf (_("CMD: %s\n"), PS_COMMAND);
if (input_filename == NULL) {
- ps_input = spopen (PS_COMMAND);
- if (ps_input == NULL) {
- printf (_("Could not open pipe: %s\n"), PS_COMMAND);
- return STATE_UNKNOWN;
+ result = cmd_run( PS_COMMAND, &chld_out, &chld_err, 0);
+ if (chld_err.lines > 0) {
+ printf ("%s: %s", _("System call sent warnings to stderr"), chld_err.line[0]);
+ exit(STATE_WARNING);
}
- child_stderr = fdopen (child_stderr_array[fileno (ps_input)], "r");
- if (child_stderr == NULL)
- printf (_("Could not open stderr for %s\n"), PS_COMMAND);
} else {
- ps_input = fopen(input_filename, "r");
- if (ps_input == NULL) {
- die( STATE_UNKNOWN, _("Error opening %s\n"), input_filename );
- }
+ result = cmd_file_read( input_filename, &chld_out, 0);
}
- /* flush first line */
- fgets (input_buffer, MAX_INPUT_BUFFER - 1, ps_input);
- while ( input_buffer[strlen(input_buffer)-1] != '\n' )
- fgets (input_buffer, MAX_INPUT_BUFFER - 1, ps_input);
+ /* flush first line: j starts at 1 */
+ for (j = 1; j < chld_out.lines; j++) {
+ input_line = chld_out.line[j];
- while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, ps_input)) {
- asprintf (&input_line, "%s", input_buffer);
- while ( input_buffer[strlen(input_buffer)-1] != '\n' ) {
- fgets (input_buffer, MAX_INPUT_BUFFER - 1, ps_input);
- asprintf (&input_line, "%s%s", input_line, input_buffer);
- }
-
if (verbose >= 3)
printf ("%s", input_line);
@@ -353,27 +340,9 @@
}
}
- /* If we get anything on STDERR, at least set warning */
- if (input_filename == NULL) {
- while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_stderr)) {
- if (verbose)
- printf ("STDERR: %s", input_buffer);
- result = max_state (result, STATE_WARNING);
- printf (_("System call sent warnings to stderr\n"));
- }
-
- (void) fclose (child_stderr);
-
- /* close the pipe */
- if (spclose (ps_input)) {
- printf (_("System call returned nonzero status\n"));
- result = max_state (result, STATE_WARNING);
- }
- }
-
if (found == 0) { /* no process lines parsed so return STATE_UNKNOWN */
printf (_("Unable to read output\n"));
- return result;
+ return STATE_UNKNOWN;
}
if ( result == STATE_UNKNOWN )
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.