aboutsummaryrefslogtreecommitdiff
path: root/contrib/check_uptime.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/check_uptime.c')
-rw-r--r--contrib/check_uptime.c99
1 files changed, 99 insertions, 0 deletions
diff --git a/contrib/check_uptime.c b/contrib/check_uptime.c
new file mode 100644
index 00000000..46a1b826
--- /dev/null
+++ b/contrib/check_uptime.c
@@ -0,0 +1,99 @@
+/******************************************************************************
+ *
+ * CHECK_UPTIME.C
+ *
+ * Program: Uptime plugin for Nagios
+ * License: GPL
+ * Copyright (c) 2000 Teresa Ramanan (teresa@redowl.org)
+ *
+ * Based on CHECK_LOAD.C
+ * Copyright (c) 1999 Felipe Gustavo de Almeida <galmeida@linux.ime.usp.br>
+ *
+ * Last Modified: $Date$
+ *
+ * Command line: CHECK_UPTIME <host_address>
+ *
+ * Description:
+ *
+ * This plugin parses the output from "uptime", tokenizing it with ',' as the
+ * delimiter. Returning only the number of days and/or the hours and minutes
+ * a machine has been up and running.
+ *
+ *****************************************************************************/
+
+#include "common/config.h"
+#include "common/common.h"
+#include "common/utils.h"
+#include "common/popen.h"
+
+int main(int argc, char **argv)
+{
+
+ int result;
+ char input_buffer[MAX_INPUT_BUFFER];
+ int ct;
+ int i;
+ char *tok1 = NULL;
+ char *daytok = NULL;
+ char *hrmintok = NULL;
+ char *runstr = NULL;
+ char tempp;
+ char ch;
+ char delim[] = ",";
+
+ if(argc != 2){
+ printf("Incorrect number of arguments supplied\n");
+ printf("\n");
+ print_revision(argv[0],"$Revision$");
+ printf("Copyright (c) 2000 Teresa Ramanan (tlr@redowl.org)\n");
+ printf("\n");
+ printf("Usage: %s <host_address>\n",argv[0]);
+ printf("\n");
+ return STATE_UNKNOWN;
+ }
+
+ child_process = spopen(PATH_TO_UPTIME);
+ if(child_process==NULL){
+ printf("Error opening %s\n",PATH_TO_UPTIME);
+ return STATE_UNKNOWN;
+ }
+ child_stderr=fdopen(child_stderr_array[fileno(child_process)],"r");
+ if(child_stderr==NULL){
+ printf("Could not open stderr for %s\n",PATH_TO_UPTIME);
+ }
+ fgets(input_buffer,MAX_INPUT_BUFFER-1,child_process);
+ i = 0;
+ ct = 0;
+
+ /* Let's mark the end of this string for parsing purposes */
+ input_buffer[strlen(input_buffer)-1]='\0';
+
+ tempp = input_buffer[0];
+ while(ch != '\0'){
+ ch = (&tempp)[i];
+ if (ch == ',') { ct++; }
+ i++;
+ }
+ runstr = input_buffer;
+ tok1 = strsep(&runstr, delim);
+ if (ct > 4) {
+ hrmintok = strsep(&runstr, delim);
+ hrmintok++;
+ daytok = strstr(tok1,"up");
+ }
+ else {
+ hrmintok = strstr(tok1, "up");
+ }
+
+ result = spclose(child_process);
+ if(result){
+ printf("Error code %d returned in %s\n",result,PATH_TO_UPTIME);
+ return STATE_UNKNOWN;
+ }
+ if (hrmintok == NULL) {
+ printf("Problem - unexpected data returned\n");
+ return STATE_UNKNOWN;
+ }
+ printf("%s%s%s\n",(daytok == NULL)?"":daytok,(daytok == NULL)?"":",",hrmintok);
+ return STATE_OK;
+}