diff options
Diffstat (limited to 'contrib/check_uptime.c')
-rw-r--r-- | contrib/check_uptime.c | 99 |
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; +} |