/****************************************************************************** * * CHECK_NT.C -modified from official plugins version 1.4 beta1 * downloaded on Jan 30,2005 * * Program: Windows NT plugin for Nagios * License: GPL * Copyright (c) 2000-2002 Yves Rubin (rubiyz@yahoo.com) * * Description: * * This requires NSClient software to run on NT (http://nsclient.ready2run.nl/) * * License Information: * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id: check_nt.c,v 1.24 2005/04/23 11:54:01 amontibello Exp $ * *****************************************************************************/ const char *progname = "check_nc_net"; const char *revision = "$Revision: 1.24 $"; const char *copyright = "2003-2005"; const char *email = "nagiosplug-devel@lists.sourceforge.net"; #include "common.h" #include "netutils.h" #include "utils.h" enum checkvars { CHECK_NONE, CHECK_CLIENTVERSION, CHECK_CPULOAD, CHECK_UPTIME, CHECK_USEDDISKSPACE, CHECK_FREEDISKSPACE, CHECK_SERVICESTATE, CHECK_PROCSTATE, CHECK_MEMUSE, CHECK_COUNTER, CHECK_FILEAGE, CHECK_INSTANCES, CHECK_EVENTLOG, CHECK_WMICHECK, CHECK_CONFIG, ENUM_CONFIG, ENUM_PASSIVE, /* ADDPASSIVE - is implemented as a switch -S */ CONFIG_DELPASSIVE, ENUM_PROCESS, ENUM_SERVICE, CHECK_WMICOUNTER, ENUM_COUNTER, ENUM_COUNTERDESC, CHECK_WMICAT }; enum { MAX_VALUE_LIST = 30, PORT = 1248 }; char *server_address=NULL; char *volume_name=NULL; int server_port=PORT; char *value_list=NULL; char *req_password=NULL; char *service_desc=NULL; char *check_type=NULL; unsigned long lvalue_list[MAX_VALUE_LIST]; unsigned long warning_value=0L; unsigned long critical_value=0L; int check_warning_value=FALSE; int check_critical_value=FALSE; char *critical_value_string=NULL; char *warning_value_string=NULL; enum checkvars vars_to_check = CHECK_NONE; int show_all=FALSE; int add_passive_check=FALSE; /*change buffer size from MAX_INPUT_BUFFER to 4096*/ char recv_buffer[4096]; void fetch_data (const char* address, int port, const char* sendb); int process_arguments(int, char **); void preparelist(char *string); void preparelist2(char *string, char c); int strtoularray(unsigned long *array, char *string, const char *delim); void print_help(void); void print_usage(void); void print_command( char * opts); int main(int argc, char **argv){ /* should be int result = STATE_UNKNOWN; */ int return_code = STATE_UNKNOWN; char *send_buffer=NULL; char *output_message=NULL; char *perfdata=NULL; char *temp_string=NULL; char *temp_string_perf=NULL; char *description=NULL,*counter_unit = NULL; char *minval = NULL, *maxval = NULL, *errcvt = NULL; double total_disk_space=0; double free_disk_space=0; double percent_used_space=0; double warning_used_space=0; double critical_used_space=0; double mem_commitLimit=0; double mem_commitByte=0; double fminval = 0, fmaxval = 0; unsigned long utilization; unsigned long uptime; unsigned long age_in_minutes; double counter_value = 0.0; int offset=0; int updays=0; int uphours=0; int upminutes=0; int isPercent = FALSE; int allRight = FALSE; setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); if(process_arguments(argc,argv) == ERROR) usage4 (_("Could not parse arguments")); /* initialize alarm signal handling */ signal(SIGALRM,socket_timeout_alarm_handler); /* set socket timeout */ alarm(socket_timeout); if ( add_passive_check == TRUE ) { asprintf(&send_buffer, "%s&98", req_password); /* Tells NC_Net to add to passive.cfg */ /*each concatination to original string is a paired set based on args entered*/ asprintf(&send_buffer, "%s&%s&%s", send_buffer, check_type,service_desc ); if (check_warning_value==TRUE ) { /* check for warning*/ asprintf(&send_buffer, "%s&-w&%s", send_buffer, warning_value_string ); } if (check_critical_value==TRUE ) { /* check for critical*/ asprintf(&send_buffer, "%s&-c&%s", send_buffer, critical_value_string ); } if ( value_list != NULL ) { asprintf(&send_buffer, "%s&-l&%s", send_buffer, value_list ); } if ( vars_to_check== CHECK_SERVICESTATE|| vars_to_check ==CHECK_PROCSTATE ) { if (show_all==TRUE) asprintf(&send_buffer, "%s&-d&SHOWALL", send_buffer ); else asprintf(&send_buffer, "%s&-d&SHOWFAIL", send_buffer ); } fetch_data (server_address, server_port, send_buffer); /* asprintf (&output_message, "Running addpassive check -S: %s -v: %s",service_desc,check_type );*/ return_code=atoi(strtok(recv_buffer,"&")); temp_string=strtok(NULL,"&"); output_message = strdup (temp_string); } else /* run Switch statment*/ switch (vars_to_check) { case CHECK_CLIENTVERSION: asprintf(&send_buffer, "%s&1", req_password); fetch_data (server_address, server_port, send_buffer); if (value_list != NULL && strcmp(recv_buffer, value_list) != 0) { asprintf (&output_message, _("Wrong client version - running: %s, required: %s"), recv_buffer, value_list); return_code = STATE_WARNING; } else { asprintf (&output_message, "%s", recv_buffer); return_code = STATE_OK; } break; case CHECK_CPULOAD: if (value_list==NULL) output_message = strdup (_("missing -l parameters")); else if (strtoularray(lvalue_list,value_list,",")==FALSE) output_message = strdup (_("wrong -l parameter.")); else { /* -l parameters is present with only integers */ return_code=STATE_OK; temp_string = strdup (_("CPU Load")); temp_string_perf = strdup (" "); /* loop until one of the parameters is wrong or not present */ while (lvalue_list[0+offset]> (unsigned long)0 && lvalue_list[0+offset]<=(unsigned long)17280 && lvalue_list[1+offset]> (unsigned long)0 && lvalue_list[1+offset]<=(unsigned long)100 && lvalue_list[2+offset]> (unsigned long)0 && lvalue_list[2+offset]<=(unsigned long)100) { /* Send request and retrieve data */ asprintf(&send_buffer,"%s&2&%lu",req_password,lvalue_list[0+offset]); fetch_data (server_address, server_port, send_buffer); utilization=strtoul(recv_buffer,NULL,10); /* Check if any of the request is in a warning or critical state */ if(utilization >= lvalue_list[2+offset]) return_code=STATE_CRITICAL; else if(utilization >= lvalue_list[1+offset] && return_code10) { /* we had at least one loop */ output_message = strdup (temp_string); perfdata = temp_string_perf; } else output_message = strdup (_("not enough values for -l parameters")); } break; case CHECK_UPTIME: asprintf(&send_buffer, "%s&3", req_password); fetch_data (server_address, server_port, send_buffer); uptime=strtoul(recv_buffer,NULL,10); updays = uptime / 86400; uphours = (uptime % 86400) / 3600; upminutes = ((uptime % 86400) % 3600) / 60; asprintf(&output_message,_("System Uptime - %u day(s) %u hour(s) %u minute(s)"),updays,uphours, upminutes); return_code=STATE_OK; break; case CHECK_USEDDISKSPACE: case CHECK_FREEDISKSPACE: if (value_list==NULL) output_message = strdup (_("missing -l parameters")); else if (strlen(value_list)!=1) output_message = strdup (_("wrong -l argument")); else { asprintf(&send_buffer,"%s&4&%s", req_password, value_list); fetch_data (server_address, server_port, send_buffer); free_disk_space=atof(strtok(recv_buffer,"&")); total_disk_space=atof(strtok(NULL,"&")); percent_used_space = ((total_disk_space - free_disk_space) / total_disk_space) * 100; warning_used_space = ( warning_value > 100 )?warning_value*1024.0*1024:(warning_value*1.0 / 100) * total_disk_space; critical_used_space = ( critical_value > 100 )?critical_value*1024.0*1024:(critical_value*1.0 / 100) * total_disk_space; if (free_disk_space>=0) { asprintf(&temp_string,_("%s: - total: %.2f Gb - used: %.2f Gb (%.0f%%) - free %.2f Gb (%.0f%%)"), value_list, total_disk_space / 1073741824, (total_disk_space - free_disk_space) / 1073741824, percent_used_space, free_disk_space / 1073741824, (free_disk_space / total_disk_space)*100); asprintf(&temp_string_perf,_("'%s: Used Space'=%.2fGb;%.2f;%.2f;0.00;%.2f"), value_list, (total_disk_space - free_disk_space) / 1073741824, warning_used_space / 1073741824, critical_used_space / 1073741824, total_disk_space / 1073741824); return_code=STATE_OK; if (check_warning_value==TRUE ) { if (vars_to_check==CHECK_FREEDISKSPACE) { if ( free_disk_space < warning_used_space ) { return_code=STATE_WARNING; } }else { /* test useddiskspace*/ if ( total_disk_space - free_disk_space > warning_used_space ) { return_code=STATE_WARNING; } } } if (check_critical_value==TRUE ) { if (vars_to_check==CHECK_FREEDISKSPACE) { if ( free_disk_space < critical_used_space ) { return_code=STATE_CRITICAL; } }else { /* test useddiskspace*/ if ( total_disk_space - free_disk_space > critical_used_space ) { return_code=STATE_CRITICAL; } } } output_message = strdup (temp_string); perfdata = temp_string_perf; } else { output_message = strdup (_("Free disk space : Invalid drive ")); return_code=STATE_UNKNOWN; } } break; case CHECK_SERVICESTATE: case CHECK_PROCSTATE: if (value_list==NULL) output_message = strdup (_("No service/process specified")); else { preparelist(value_list); /* replace , between services with & to send the request */ asprintf(&send_buffer,"%s&%u&%s&%s", req_password,(vars_to_check==CHECK_SERVICESTATE)?5:6, (show_all==TRUE) ? "ShowAll" : "ShowFail",value_list); fetch_data (server_address, server_port, send_buffer); return_code=atoi(strtok(recv_buffer,"&")); temp_string=strtok(NULL,"&"); output_message = strdup (temp_string); } break; case CHECK_MEMUSE: asprintf(&send_buffer,"%s&7", req_password); fetch_data (server_address, server_port, send_buffer); mem_commitLimit=atof(strtok(recv_buffer,"&")); mem_commitByte=atof(strtok(NULL,"&")); percent_used_space = (mem_commitByte / mem_commitLimit) * 100; warning_used_space = ((float)warning_value / 100) * mem_commitLimit; critical_used_space = ((float)critical_value / 100) * mem_commitLimit; /* Divisor should be 1048567, not 3044515, as we are measuring "Commit Charge" here, which equals RAM + Pagefiles. */ asprintf(&output_message,_("Memory usage: total:%.2f Mb - used: %.2f Mb (%.0f%%) - free: %.2f Mb (%.0f%%)"), mem_commitLimit / 1048567, mem_commitByte / 1048567, percent_used_space, (mem_commitLimit - mem_commitByte) / 1048567, (mem_commitLimit - mem_commitByte) / mem_commitLimit * 100); asprintf(&perfdata,_("'Memory usage'=%.2fMb;%.2f;%.2f;0.00;%.2f"), mem_commitByte / 1048567, warning_used_space / 1048567, critical_used_space / 1048567, mem_commitLimit / 1048567); return_code=STATE_OK; if(check_critical_value==TRUE && percent_used_space >= critical_value) return_code=STATE_CRITICAL; else if (check_warning_value==TRUE && percent_used_space >= warning_value) return_code=STATE_WARNING; break; case CHECK_COUNTER: /* Check_Counter has been rewriten for NC_Net now it processes the pref data in a more consistent way to the Nagios plug-in development guidelines. 1) if no Units of mesurement use a 0 (zero) for the UOM in the check and the units will be omited from the output. 2) it will do MIN without a MAX 3) still processes custom min and max even if it is % 4) % has a default of min 0, max 100 5) -w and -c are no longer causing a seg fault. old code said to always process both for perf data, but it should have checked that they were in use. 6) the description is only a label for perf data not a formatter... */ if (value_list == NULL) output_message = strdup (_("No counter specified")); else { preparelist (value_list); /* replace , between services with & to send the request */ temp_string = strtok (value_list, "&"); isPercent = (strchr (temp_string, '%') != NULL); description = strtok (NULL, "&"); counter_unit = strtok (NULL, "&"); asprintf (&send_buffer, "%s&8&%s", req_password, value_list); fetch_data (server_address, server_port, send_buffer); counter_value = atof (recv_buffer); if (isPercent) counter_unit = strdup ("%"); if ( description != NULL && counter_unit == NULL ) counter_unit = strdup ( "0" ); if ( counter_unit != NULL && description != NULL) { if ( counter_unit[0] == '0' ) counter_unit[0] = '\0'; minval = strtok (NULL, "&"); maxval = strtok (NULL, "&"); if ( minval == NULL && isPercent ) asprintf(&minval,"0"); if ( minval != NULL ) fminval = strtod ( minval, NULL ) ; if ( maxval == NULL && isPercent ) asprintf(&maxval,"100"); if ( maxval != NULL ) fmaxval = strtod (maxval, NULL); allRight = TRUE; /* Let's format the output string, finally... */ asprintf (&output_message, "%s = %.2f %s", description, counter_value, counter_unit); asprintf (&output_message,"%s | %s", output_message, fperfdata (description, counter_value, counter_unit, check_warning_value, warning_value, check_critical_value, critical_value, (minval != NULL), fminval, (maxval != NULL), fmaxval )); } else if (isPercent) asprintf(&output_message, "%s = %.2f %%",temp_string,counter_value); else asprintf(&output_message, "%s = %.2f",temp_string,counter_value); } if (critical_value > warning_value) { /* Normal thresholds */ if (check_critical_value == TRUE && counter_value >= critical_value) return_code = STATE_CRITICAL; else if (check_warning_value == TRUE && counter_value >= warning_value) return_code = STATE_WARNING; else return_code = STATE_OK; } else { /* inverse thresholds */ return_code = STATE_OK; if (check_critical_value == TRUE && counter_value <= critical_value) return_code = STATE_CRITICAL; else if (check_warning_value == TRUE && counter_value <= warning_value) return_code = STATE_WARNING; } break; case CHECK_FILEAGE: if (value_list==NULL) output_message = strdup (_("No file specified")); else { preparelist(value_list); /* replace , between services with & to send the request */ asprintf(&send_buffer,"%s&9&%s", req_password,value_list); fetch_data (server_address, server_port, send_buffer); age_in_minutes = atoi(strtok(recv_buffer,"&")); description = strtok(NULL,"&"); /* output message modified as per several requests */ /* output_message = strdup (description); */ if (critical_value > warning_value) { /* Normal thresholds */ if(check_critical_value==TRUE && age_in_minutes >= critical_value) return_code=STATE_CRITICAL; else if (check_warning_value==TRUE && age_in_minutes >= warning_value) return_code=STATE_WARNING; else return_code=STATE_OK; } else { /* inverse thresholds */ if(check_critical_value==TRUE && age_in_minutes <= critical_value) return_code=STATE_CRITICAL; else if (check_warning_value==TRUE && age_in_minutes <= warning_value) return_code=STATE_WARNING; else return_code=STATE_OK; } if ( return_code == STATE_OK ) asprintf ( &output_message,"OK: %u Minutes, %s", age_in_minutes, value_list); else if ( return_code == STATE_WARNING ) asprintf ( &output_message,"WARNING: %u Minutes, %s", age_in_minutes, value_list); else if ( return_code == STATE_CRITICAL ) asprintf ( &output_message,"CRITICAL: %u Minutes, %s", age_in_minutes, value_list); else output_message = strdup (description); } break; case CHECK_INSTANCES: if (value_list==NULL) output_message = strdup (_("No Perfomance counter Category specified")); else { preparelist(value_list); asprintf(&send_buffer,"%s&10&%s", req_password,value_list); fetch_data (server_address, server_port, send_buffer); asprintf (&output_message, "%s", recv_buffer); return_code = STATE_OK; } break; case CHECK_EVENTLOG: if (value_list==NULL) asprintf(&send_buffer,"%s&11", req_password); else { asprintf(&send_buffer,"%s&11&%s", req_password,value_list); } fetch_data (server_address, server_port, send_buffer); return_code=atoi(strtok(recv_buffer,"&")); temp_string=strtok(NULL,"&"); if(check_critical_value==TRUE && return_code >= critical_value) return_code=STATE_CRITICAL; else if (check_warning_value==TRUE && return_code >= warning_value) return_code=STATE_WARNING; else if (check_warning_value==TRUE || check_critical_value==TRUE) return_code=STATE_OK; else if ( return_code == 0 ) return_code = STATE_OK; else if ( return_code != STATE_OK ) return_code=STATE_CRITICAL; output_message = strdup (temp_string); break; case CHECK_WMICHECK: if (value_list==NULL) output_message = strdup (_("No Query specified")); else { preparelist2(value_list,'^'); asprintf(&send_buffer, "%s&12&%s", req_password,value_list); fetch_data (server_address, server_port, send_buffer); asprintf (&output_message, "%s", recv_buffer); return_code = STATE_OK; } break; case CHECK_CONFIG: if (value_list==NULL) output_message = strdup (_("missing -l parameters")); else { preparelist(value_list);/* replace , between parameters with & to send the request */ asprintf(&send_buffer,"%s&99&%s", req_password,value_list); fetch_data (server_address, server_port, send_buffer); asprintf (&output_message, "%s", recv_buffer); return_code = STATE_OK; } break; case ENUM_CONFIG: asprintf(&send_buffer,"%s&18", req_password); fetch_data (server_address, server_port, send_buffer); asprintf (&output_message, "%s", recv_buffer); return_code = STATE_OK; break; case ENUM_PASSIVE: asprintf(&send_buffer,"%s&19", req_password); fetch_data (server_address, server_port, send_buffer); asprintf (&output_message, "%s", recv_buffer); return_code = STATE_OK; break; case CONFIG_DELPASSIVE: if (value_list==NULL) output_message = strdup (_("missing -l parameters")); else { asprintf(&send_buffer,"%s&97&%s", req_password, value_list); fetch_data (server_address, server_port, send_buffer); return_code=atoi(strtok(recv_buffer,"&")); temp_string=strtok(NULL,"&"); output_message = strdup (temp_string); } break; case ENUM_PROCESS: asprintf(&send_buffer,"%s&17", req_password); fetch_data (server_address, server_port, send_buffer); asprintf (&output_message, "%s", recv_buffer); return_code = STATE_OK; break; case ENUM_SERVICE: if ( value_list == NULL ) asprintf(&send_buffer,"%s&16&all", req_password); else { preparelist(value_list); asprintf(&send_buffer,"%s&16&%s", req_password,value_list); } fetch_data (server_address, server_port, send_buffer); asprintf (&output_message, "%s", recv_buffer); return_code = STATE_OK; break; case ENUM_COUNTER: if ( value_list == NULL ) asprintf(&send_buffer,"%s&15", req_password); else { preparelist(value_list); asprintf(&send_buffer,"%s&15&%s", req_password,value_list); } fetch_data (server_address, server_port, send_buffer); asprintf (&output_message, "%s", recv_buffer); return_code = STATE_OK; break; case CHECK_WMICOUNTER: /* requires -d input showall for checking against max showfail check against min */ if (value_list==NULL) output_message = strdup (_("No Query specified")); else { preparelist2(value_list,'^'); if ( show_all == FALSE ) /*&& warning_value > critical_value )*/ asprintf(&send_buffer, "%s&14&SHOWFAIL&%s", req_password,value_list); else asprintf(&send_buffer, "%s&14&SHOWALL&%s", req_password,value_list); fetch_data (server_address, server_port, send_buffer); asprintf (&output_message, "%s", recv_buffer); counter_value =atof(output_message); return_code = STATE_OK; if ( show_all == TRUE ) { /* returned a max value*/ asprintf (&output_message, "%s \n%f Showall ", output_message, counter_value); if (check_warning_value == TRUE && counter_value >= atof(warning_value_string) ){ return_code = STATE_WARNING; } if (check_critical_value == TRUE && counter_value >= atof(critical_value_string)){ return_code = STATE_CRITICAL; } }else { /* returned a min value */ asprintf (&output_message, "%s \n%f Showfail ", output_message, counter_value ); if (check_warning_value == TRUE && counter_value <= atof(warning_value_string) ){ return_code = STATE_WARNING; } if (check_critical_value == TRUE && counter_value <= atof(critical_value_string) ){ return_code = STATE_CRITICAL; } } } break; case ENUM_COUNTERDESC: if ( value_list == NULL ) output_message = strdup (_("-l missing, no category specified.")); else { preparelist(value_list); asprintf(&send_buffer,"%s&20&%s", req_password,value_list); } fetch_data (server_address, server_port, send_buffer); asprintf (&output_message, "%s", recv_buffer); return_code = STATE_OK; break; case CHECK_WMICAT: if (value_list==NULL) output_message = strdup (_("No Query specified")); else { preparelist2(value_list,'^'); asprintf(&send_buffer, "%s&21&%s", req_password,value_list); fetch_data (server_address, server_port, send_buffer); asprintf (&output_message, "%s", recv_buffer); return_code = STATE_OK; } break; case CHECK_NONE: default: usage4 (_("Please specify a variable to check")); break; } /* reset timeout */ alarm(0); if (perfdata==NULL) printf("%s\n",output_message); else printf("%s | %s\n",output_message,perfdata); return return_code; } /* process command-line arguments */ int process_arguments(int argc, char **argv){ int c; int option = 0; static struct option longopts[] = { {"port", required_argument,0,'p'}, {"timeout", required_argument,0,'t'}, {"critical", required_argument,0,'c'}, {"warning", required_argument,0,'w'}, {"variable", required_argument,0,'v'}, {"addpassive", required_argument,0,'S'}, {"hostname", required_argument,0,'H'}, {"version", no_argument, 0,'V'}, {"help", optional_argument,0,'h'}, {0,0,0,0} }; /* no options were supplied */ if(argc<2) return ERROR; /* change default timeout to 20 seconds */ socket_timeout = 20; /* backwards compatibility */ if (! is_option(argv[1])) { server_address = strdup(argv[1]); argv[1]=argv[0]; argv=&argv[1]; argc--; } for (c=1;c delimited string into a long array */ int idx=0; char *t1; for (idx=0;idx\n\ Password needed for the request\n\ -w, --warning=INTEGER\n\ Threshold which will result in a warning status\n\ -c, --critical=INTEGER\n\ Threshold which will result in a critical status\n\ -t, --timeout=INTEGER\n\ Seconds before connection attempt times out (default: %d)\n\ -h, --help=STRING\n\ Print this help screen\n\ -V, --version\n\ Print version information\n"), PORT, 20); printf (_("\ -v, --variable=STRING\n\ Variable to check. Valid variables are:\n\ Use --help= -- to list help for that command.\n")); printf (_("\ CLIENTVERSION = Get the Check_nt version Number\n\ CPULOAD = Average CPU load on last x minutes.\n\ UPTIME = Get the uptime of the machine.\n\ USEDDISKSPACE = check Size(in Megs) or percentage of disk use.\n\ FREEDISKSPACE = check Size(in Megs) or percentage of disk free.\n\ MEMUSE = Memory use.\n\ SERVICESTATE = Check the state of one or several services.\n\ PROCSTATE = Check if one or several process are running.\n\ COUNTER = Check any performance counter of Windows NT/2000.\n\ FILEAGE = Checks how old a file is .\n\ INSTANCES = Check any performance counter Category for availible instances.\n\ EVENTLOG = Check any Event Log in Windows for any entry.\n\ WMICHECK = performs a WMI query on Windows server.\n\ WMICOUNTER = Checks -w -c against a specific querry\n\ WMICAT = Runs WMI Query and outputs Concatinated results\n\ CONFIG = push a configuration variable change to NC_Net via active checks.\n\ ENUMCONFIG = Prints NC_Net's configuration.\n\ ENUMPASSIVE = Print out list of service descriptions from passive.cfg\n\ DELPASSIVE = Deletes a passive check from NC_Net passive.cfg.\n\ ENUMCOUNTER = Enumerates performance counters.\n\ ENUMCOUNTERDESC = Prints the internal detailed description of a performance counter.\n\ ENUMSERVICE = Print out list of all services\n\ ENUMPROCESS = Prints all running processes.\n\n\ ADDPASSIVE = Add a passive check to passive.cfg.\n\ DO NOT use -v ADDPASSIVE \n\ Instead run the desired passive check as an active check from the command line.\n\ then after you tested the command add the switch -S \n\ (NOTE this is a capital S) \n")); printf (_("\ -S --addpassive=STRING\n\ the STRING should be the Nagios service description. (unique for each host)\n\ This option is used primarily to add a passive check to NC_Net's passive.cfg.\n\ Active checks do not require the service description. \n\ When this option is added to a service check it will send the check as an addition \n\ to the passive.cfg. This test will verify the check will return an OK result. \n\ If the check does not return OK the check will not be added or modified to passive.cfg\n")); printf (_("Notes:\n\ - NC_Net should be running. \n\ (http://www.shatterit.com/NC_Net).\n")); } void print_usage(void) { printf("\ Usage: %s -H host -v variable [-p port] [-w warning] [-c critical] \n\ [-l params] [-d SHOWALL] [-t timeout] [-S Service_description]\n", progname); } void print_command_CLIENTVERSION(void){ printf (_("\ CLIENTVERSION = Get the NSClient version\n\ If -l is specified, will return warning if versions differ.\n")); } void print_command_CPULOAD(void){ printf (_("\ CPULOAD = Average CPU load on last x minutes.\n\ Request a -l parameter with the following syntax:\n\ -l ,,.\n\ should be less than 24*60.\n\ Thresholds are percentage and up to 10 requests can be done in one shot.\n\ ie: -l 60,90,95,120,90,95\n")); } void print_command_UPTIME(void){ printf (_("\ UPTIME = Get the uptime of the machine.\n\ No specific parameters. No warning or critical threshold\n")); } void print_command_USEDDISKSPACE(void){ printf (_("\ USEDDISKSPACE = Size and percentage of disk use.\n\ Request a -l parameter containing the drive letter only.\n\ Thresholds can be specified (in precentage used) with -w and -c.\n\ When the warning or critical value is less than 100 it is evaluated as a percentage of space.\n\ When the warning or critical value are above 100 they are evaluated as MegaBytes.\n")); } void print_command_FREEDISKSPACE(void){ printf (_("\ FREEDISKSPACE = Size and percentage of disk use.\n\ Request a -l parameter containing the drive letter only.\n\ Thresholds can be specified (in megabytes free) with -w and -c.\n\ When the warning or critical value is less than 100 it is evaluated as a percentage of space.\n\ When the warning or critical value are above 100 they are evaluated as bytes.\n\ Warning and critical are Integers and therfore limited to numbers less than 4 gigs.\n")); } void print_command_MEMUSE(void){ printf (_("\ MEMUSE = Memory use.\n\ Warning and critical thresholds can be specified with -w and -c.\n")); } void print_command_SERVICESTATE(void){ printf (_("\ SERVICESTATE = Check the state of one or several services.\n\ Request a -l parameters with the following syntax:\n\ -l ,,,...\n\ You can specify -d SHOWALL in case you want to see working services\n\ in the returned string.\n")); } void print_command_PROCSTATE(void){ printf (_("\ PROCSTATE = Check if one or several process are running.\n\ Same syntax as SERVICESTATE.\n")); } void print_command_COUNTER(void){ printf (_("\ COUNTER = Check any performance counter of Windows NT/2000.\n\ This check accepts -w and -c\n\ Request a -l parameters with the following syntax:\n\ -l \"\\\\\\\\counter\"[,\"