X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fcheck_nt.c;h=c877f9cc6d4857b019c8b2590677aa7205524163;hb=25d1ee331dbe4977a4a1a756c67f32bd51d9b070;hp=8d66092d4f9781547020e7ccfede00afd31aab29;hpb=ec69901ec2f01b4b6346a4daf29ca86856f28f35;p=nagiosplug.git diff --git a/plugins/check_nt.c b/plugins/check_nt.c index 8d66092..c877f9c 100644 --- a/plugins/check_nt.c +++ b/plugins/check_nt.c @@ -1,32 +1,40 @@ -/****************************************************************************** - * - * CHECK_NT.C - * - * 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. - * - *****************************************************************************/ +/***************************************************************************** +* +* Nagios check_nt plugin +* +* License: GPL +* Copyright (c) 2000-2002 Yves Rubin (rubiyz@yahoo.com) +* Copyright (c) 2003-2007 Nagios Plugins Development Team +* +* Description: +* +* This file contains the check_nt plugin +* +* This plugin collects data from the NSClient service running on a +* Windows NT/2000/XP/2003 server. +* This plugin requires NSClient software to run on NT +* (http://nsclient.ready2run.nl/) +* +* +* 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 3 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, see . +* +* +*****************************************************************************/ + +const char *progname = "check_nt"; +const char *copyright = "2000-2007"; +const char *email = "nagiosplug-devel@lists.sourceforge.net"; #include "common.h" #include "netutils.h" @@ -42,7 +50,8 @@ enum checkvars { CHECK_PROCSTATE, CHECK_MEMUSE, CHECK_COUNTER, - CHECK_FILEAGE + CHECK_FILEAGE, + CHECK_INSTANCES }; enum { @@ -63,8 +72,6 @@ int check_critical_value=FALSE; enum checkvars vars_to_check = CHECK_NONE; int show_all=FALSE; -const char *progname = "check_nt"; - char recv_buffer[MAX_INPUT_BUFFER]; void fetch_data (const char* address, int port, const char* sendb); @@ -75,6 +82,9 @@ void print_help(void); void print_usage(void); 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; @@ -83,6 +93,7 @@ int main(int argc, char **argv){ char *temp_string_perf=NULL; char *description=NULL,*counter_unit = NULL; char *minval = NULL, *maxval = NULL, *errcvt = NULL; + char *fds=NULL, *tds=NULL; double total_disk_space=0; double free_disk_space=0; @@ -95,7 +106,7 @@ int main(int argc, char **argv){ unsigned long utilization; unsigned long uptime; unsigned long age_in_minutes; - double counter_value; + double counter_value = 0.0; int offset=0; int updays=0; int uphours=0; @@ -108,8 +119,11 @@ int main(int argc, char **argv){ bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); - if(process_arguments(argc,argv)==ERROR) - usage(_("Could not parse arguments\n")); + /* Parse extra opts if any */ + argv=np_extra_opts (&argc, argv, progname); + + if(process_arguments(argc,argv) == ERROR) + usage4 (_("Could not parse arguments")); /* initialize alarm signal handling */ signal(SIGALRM,socket_timeout_alarm_handler); @@ -143,12 +157,12 @@ int main(int argc, char **argv){ 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[0+offset]<=(unsigned long)17280 && lvalue_list[1+offset]> (unsigned long)0 && - lvalue_list[1+offset]<=(unsigned long)100 && + lvalue_list[1+offset]<=(unsigned long)100 && lvalue_list[2+offset]> (unsigned long)0 && lvalue_list[2+offset]<=(unsigned long)100) { @@ -157,7 +171,7 @@ int main(int argc, char **argv){ 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; @@ -171,13 +185,13 @@ int main(int argc, char **argv){ asprintf(&temp_string_perf,"%s%s",temp_string_perf,perfdata); offset+=3; /* move across the array */ } - + if (strlen(temp_string)>10) { /* 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: @@ -185,10 +199,10 @@ int main(int argc, char **argv){ asprintf(&send_buffer, "%s&3", req_password); fetch_data (server_address, server_port, send_buffer); uptime=strtoul(recv_buffer,NULL,10); - updays = uptime / 86400; + 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); + asprintf(&output_message,_("System Uptime - %u day(s) %u hour(s) %u minute(s)"),updays,uphours, upminutes); return_code=STATE_OK; break; @@ -201,13 +215,18 @@ int main(int argc, char **argv){ 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 = ((float)warning_value / 100) * total_disk_space; - critical_used_space = ((float)critical_value / 100) * total_disk_space; + fds=strtok(recv_buffer,"&"); + tds=strtok(NULL,"&"); + if(fds!=NULL) + free_disk_space=atof(fds); + if(tds!=NULL) + total_disk_space=atof(tds); + + if (total_disk_space>0 && free_disk_space>=0) { + percent_used_space = ((total_disk_space - free_disk_space) / total_disk_space) * 100; + warning_used_space = ((float)warning_value / 100) * total_disk_space; + critical_used_space = ((float)critical_value / 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); @@ -218,14 +237,14 @@ int main(int argc, char **argv){ 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; + return_code=STATE_WARNING; else - return_code=STATE_OK; + return_code=STATE_OK; output_message = strdup (temp_string); perfdata = temp_string_perf; } else { - output_message = strdup (_("Free disk space : Invalid drive ")); + output_message = strdup (_("Free disk space : Invalid drive")); return_code=STATE_UNKNOWN; } } @@ -248,7 +267,7 @@ int main(int argc, char **argv){ 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,"&")); @@ -257,126 +276,129 @@ int main(int argc, char **argv){ 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, + /* 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, + 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; + return_code=STATE_WARNING; break; case CHECK_COUNTER: - /* + /* CHECK_COUNTER has been modified to provide extensive perfdata information. - In order to do this, some modifications have been done to the code - and some constraints have been introduced. - - 1) For the sake of simplicity of the code, perfdata information will only be - provided when the "description" field is added. - - 2) If the counter you're going to measure is percent-based, the code will detect - the percent sign in its name and will attribute minimum (0%) and maximum (100%) - values automagically, as well the ¨%" sign to graph units. - - 3) OTOH, if the counter is "absolute", you'll have to provide the following - the counter unit - that is, the dimensions of the counter you're getting. Examples: - pages/s, packets transferred, etc. - - 4) If you want, you may provide the minimum and maximum values to expect. They aren't mandatory, - but once specified they MUST have the same order of magnitude and units of -w and -c; otherwise. - strange things will happen when you make graphs of your data. + In order to do this, some modifications have been done to the code + and some constraints have been introduced. + + 1) For the sake of simplicity of the code, perfdata information will only be + provided when the "description" field is added. + + 2) If the counter you're going to measure is percent-based, the code will detect + the percent sign in its name and will attribute minimum (0%) and maximum (100%) + values automagically, as well the ¨%" sign to graph units. + + 3) OTOH, if the counter is "absolute", you'll have to provide the following + the counter unit - that is, the dimensions of the counter you're getting. Examples: + pages/s, packets transferred, etc. + + 4) If you want, you may provide the minimum and maximum values to expect. They aren't mandatory, + but once specified they MUST have the same order of magnitude and units of -w and -c; otherwise. + strange things will happen when you make graphs of your data. */ - if (value_list == NULL) + if (value_list == NULL) output_message = strdup (_("No counter specified")); - else + else { - preparelist (value_list); /* replace , between services with & to send the request */ - isPercent = (strchr (value_list, '%') != NULL); - - strtok (value_list, "&"); /* burn the first parameters */ - 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); + preparelist (value_list); /* replace , between services with & to send the request */ + isPercent = (strchr (value_list, '%') != NULL); + strtok (value_list, "&"); /* burn the first parameters */ + 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 (description == NULL) - asprintf (&output_message, "%.f", counter_value); - else if (isPercent) - { - counter_unit = strdup ("%"); - allRight = TRUE; - } + if (description == NULL) + asprintf (&output_message, "%.f", counter_value); + else if (isPercent) + { + counter_unit = strdup ("%"); + allRight = TRUE; + } - if ((counter_unit != NULL) && (!allRight)) - { - minval = strtok (NULL, "&"); - maxval = strtok (NULL, "&"); + if ((counter_unit != NULL) && (!allRight)) + { + minval = strtok (NULL, "&"); + maxval = strtok (NULL, "&"); - /* All parameters specified. Let's check the numbers */ + /* All parameters specified. Let's check the numbers */ - fminval = (minval != NULL) ? strtod (minval, &errcvt) : -1; - fmaxval = (minval != NULL) ? strtod (maxval, &errcvt) : -1; + fminval = (minval != NULL) ? strtod (minval, &errcvt) : -1; + fmaxval = (minval != NULL) ? strtod (maxval, &errcvt) : -1; - if ((fminval == 0) && (minval == errcvt)) + if ((fminval == 0) && (minval == errcvt)) output_message = strdup (_("Minimum value contains non-numbers")); - else + else { - if ((fmaxval == 0) && (maxval == errcvt)) - output_message = strdup (_("Maximum value contains non-numbers")); - else - allRight = TRUE; /* Everything is OK. */ + if ((fmaxval == 0) && (maxval == errcvt)) + output_message = strdup (_("Maximum value contains non-numbers")); + else + allRight = TRUE; /* Everything is OK. */ } - } - else if ((counter_unit == NULL) && (description != NULL)) - output_message = strdup (_("No unit counter specified")); - - if (allRight) - { - /* Let's format the output string, finally... */ - - asprintf (&output_message, "%s = %.2f %s", description, counter_value, counter_unit); - output_message = strcat (output_message, "|"); - output_message = strcat (output_message, - fperfdata (description, counter_value, counter_unit, - 1, warning_value, 1, critical_value, - (!(isPercent) && (minval != NULL)), fminval, - (!(isPercent) && (minval != NULL)), fmaxval)); - } + } + else if ((counter_unit == NULL) && (description != NULL)) + output_message = strdup (_("No unit counter specified")); + + if (allRight) + { + /* Let's format the output string, finally... */ + if (strstr(description, "%") == NULL) { + asprintf (&output_message, "%s = %.2f %s", description, counter_value, counter_unit); + } else { + /* has formatting, will segv if wrong */ + asprintf (&output_message, description, counter_value); + } + asprintf (&output_message, "%s |", output_message); + asprintf (&output_message,"%s %s", output_message, + fperfdata (description, counter_value, + counter_unit, 1, warning_value, 1, critical_value, + (!(isPercent) && (minval != NULL)), fminval, + (!(isPercent) && (minval != NULL)), fmaxval)); + } } - if (critical_value > warning_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; + 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 + 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; + 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; - + break; + case CHECK_FILEAGE: if (value_list==NULL) @@ -388,29 +410,44 @@ int main(int argc, char **argv){ age_in_minutes = atoi(strtok(recv_buffer,"&")); description = strtok(NULL,"&"); 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; + return_code=STATE_WARNING; else - return_code=STATE_OK; - } + 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; + return_code=STATE_WARNING; else - return_code=STATE_OK; + return_code=STATE_OK; + } + } + break; + + case CHECK_INSTANCES: + if (value_list==NULL) + output_message = strdup (_("No counter specified")); + else { + asprintf(&send_buffer,"%s&10&%s", req_password,value_list); + fetch_data (server_address, server_port, send_buffer); + if (!strncmp(recv_buffer,"ERROR",5)) { + printf("NSClient - %s\n",recv_buffer); + exit(STATE_UNKNOWN); } + asprintf(&output_message,"%s",recv_buffer); + return_code=STATE_OK; } break; case CHECK_NONE: default: - usage (_("Please specify a variable to check")); + usage4 (_("Please specify a variable to check")); break; } @@ -427,22 +464,23 @@ int main(int argc, char **argv){ - - - /* 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'}, {"hostname", required_argument,0,'H'}, + {"params", required_argument,0,'l'}, + {"secret", required_argument,0,'s'}, + {"display", required_argument,0,'d'}, + {"unknown-timeout", no_argument, 0, 'u'}, {"version", no_argument, 0,'V'}, {"help", no_argument, 0,'h'}, {0,0,0,0} @@ -459,35 +497,31 @@ int process_arguments(int argc, char **argv){ argc--; } - for (c=1;c\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\n\ - Print this help screen\n\ --V, --version\n\ - Print version information\n"), - PORT, DEFAULT_SOCKET_TIMEOUT); - printf (_("\ --v, --variable=STRING\n\ - Variable to check. Valid variables are:\n")); - printf (_("\ - CLIENTVERSION = Get the NSClient version\n\ - If -l is specified, will return warning if versions differ.\n")); - 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")); - printf (_("\ - UPTIME = Get the uptime of the machine.\n\ - No specific parameters. No warning or critical threshold\n")); - printf (_("\ - USEDDISKSPACE = Size and percentage of disk use.\n\ - Request a -l parameter containing the drive letter only.\n\ - Warning and critical thresholds can be specified with -w and -c.\n")); - printf (_("\ - MEMUSE = Memory use.\n\ - Warning and critical thresholds can be specified with -w and -c.\n")); - 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")); - printf (_("\ - PROCSTATE = Check if one or several process are running.\n\ - Same syntax as SERVICESTATE.\n")); - printf (_("\ - COUNTER = Check any performance counter of Windows NT/2000.\n\ - Request a -l parameters with the following syntax:\n\ - -l \"\\\\\\\\counter\",\"\n\ - The parameter is optional and \n\ - is given to a printf output command which require a float parameters.\n\ - Some examples:\n\ - \"Paging file usage is %%.2f %%%%\"\n\ - \"%%.f %%%% paging file used.\"\n")); - printf (_("Notes:\n\ - - The NSClient service should be running on the server to get any information\n\ - (http://nsclient.ready2run.nl).\n\ - - Critical thresholds should be lower than warning thresholds\n")); -} + printf (UT_HELP_VRSN); + printf (UT_EXTRA_OPTS); + + printf ("%s\n", _("Options:")); + printf (" %s\n", "-H, --hostname=HOST"); + printf (" %s\n", _("Name of the host to check")); + printf (" %s\n", "-p, --port=INTEGER"); + printf (" %s", _("Optional port number (default: ")); + printf ("%d)\n", PORT); + printf (" %s\n", "-s, --secret="); + printf (" %s\n", _("Password needed for the request")); + printf (" %s\n", "-w, --warning=INTEGER"); + printf (" %s\n", _("Threshold which will result in a warning status")); + printf (" %s\n", "-c, --critical=INTEGER"); + printf (" %s\n", _("Threshold which will result in a critical status")); + printf (" %s\n", "-t, --timeout=INTEGER"); + printf (" %s", _("Seconds before connection attempt times out (default: ")); + printf (" %s\n", "-l, --params="); + printf (" %s", _("Parameters passed to specified check (see below)")); + printf (" %s\n", "-d, --display={SHOWALL}"); + printf (" %s", _("Display options (currently only SHOWALL works)")); + printf (" %s\n", "-u, --unknown-timeout"); + printf (" %s", _("Return UNKNOWN on timeouts")); + printf ("%d)\n", DEFAULT_SOCKET_TIMEOUT); + printf (" %s\n", "-h, --help"); + printf (" %s\n", _("Print this help screen")); + printf (" %s\n", "-V, --version"); + printf (" %s\n", _("Print version information")); + printf (" %s\n", "-v, --variable=STRING"); + printf (" %s\n\n", _("Variable to check")); + printf ("%s\n", _("Valid variables are:")); + printf (" %s", "CLIENTVERSION ="); + printf (" %s\n", _("Get the NSClient version")); + printf (" %s\n", _("If -l is specified, will return warning if versions differ.")); + printf (" %s\n", "CPULOAD ="); + printf (" %s\n", _("Average CPU load on last x minutes.")); + printf (" %s\n", _("Request a -l parameter with the following syntax:")); + printf (" %s\n", _("-l ,,.")); + printf (" %s\n", _(" should be less than 24*60.")); + printf (" %s\n", _("Thresholds are percentage and up to 10 requests can be done in one shot.")); + printf (" %s\n", "ie: -l 60,90,95,120,90,95"); + printf (" %s\n", "UPTIME ="); + printf (" %s\n", _("Get the uptime of the machine.")); + printf (" %s\n", _("No specific parameters. No warning or critical threshold")); + printf (" %s\n", "USEDDISKSPACE ="); + printf (" %s\n", _("Size and percentage of disk use.")); + printf (" %s\n", _("Request a -l parameter containing the drive letter only.")); + printf (" %s\n", _("Warning and critical thresholds can be specified with -w and -c.")); + printf (" %s\n", "MEMUSE ="); + printf (" %s\n", _("Memory use.")); + printf (" %s\n", _("Warning and critical thresholds can be specified with -w and -c.")); + printf (" %s\n", "SERVICESTATE ="); + printf (" %s\n", _("Check the state of one or several services.")); + printf (" %s\n", _("Request a -l parameters with the following syntax:")); + printf (" %s\n", _("-l ,,,...")); + printf (" %s\n", _("You can specify -d SHOWALL in case you want to see working services")); + printf (" %s\n", _("in the returned string.")); + printf (" %s\n", "PROCSTATE ="); + printf (" %s\n", _("Check if one or several process are running.")); + printf (" %s\n", _("Same syntax as SERVICESTATE.")); + printf (" %s\n", "COUNTER ="); + printf (" %s\n", _("Check any performance counter of Windows NT/2000.")); + printf (" %s\n", _("Request a -l parameters with the following syntax:")); + printf (" %s\n", _("-l \"\\\\\\\\counter\",\"")); + printf (" %s\n", _("The parameter is optional and is given to a printf ")); + printf (" %s\n", _("output command which requires a float parameter.")); + printf (" %s\n", _("If does not include \"%%\", it is used as a label.")); + printf (" %s\n", _("Some examples:")); + printf (" %s\n", "\"Paging file usage is %%.2f %%%%\""); + printf (" %s\n", "\"%%.f %%%% paging file used.\""); + printf (" %s\n", "INSTANCES ="); + printf (" %s\n", _("Check any performance counter object of Windows NT/2000.")); + printf (" %s\n", _("Syntax: check_nt -H -p -v INSTANCES -l ")); + printf (" %s\n", _(" is a Windows Perfmon Counter object (eg. Process),")); + printf (" %s\n", _("if it is two words, it should be enclosed in quotes")); + printf (" %s\n", _("The returned results will be a comma-separated list of instances on ")); + printf (" %s\n", _(" the selected computer for that object.")); + printf (" %s\n", _("The purpose of this is to be run from command line to determine what instances")); + printf (" %s\n", _(" are available for monitoring without having to log onto the Windows server")); + printf (" %s\n", _(" to run Perfmon directly.")); + printf (" %s\n", _("It can also be used in scripts that automatically create Nagios service")); + printf (" %s\n", _(" configuration files.")); + printf (" %s\n", _("Some examples:")); + printf (" %s\n\n", _("check_nt -H 192.168.1.1 -p 1248 -v INSTANCES -l Process")); + + printf ("%s\n", _("Notes:")); + printf (" %s\n", _("- The NSClient service should be running on the server to get any information")); + printf (" %s\n", "(http://nsclient.ready2run.nl)."); + printf (" %s\n", _("- Critical thresholds should be lower than warning thresholds")); + printf (" %s\n", _("- Default port 1248 is sometimes in use by other services. The error")); + printf (" %s\n", _("output when this happens contains \"Cannot map xxxxx to protocol number\".")); + printf (" %s\n", _("One fix for this is to change the port to something else on check_nt ")); + printf (" %s\n", _("and on the client service it\'s connecting to.")); +#ifdef NP_EXTRA_OPTS + printf (" -%s", UT_EXTRA_OPTS_NOTES); +#endif + + printf (UT_SUPPORT); +} void print_usage(void) { - printf(_("\ -Usage: %s -H host -v variable [-p port] [-w warning] [-c critical]\n\ - [-l params] [-d SHOWALL] [-t timeout]\n"), progname); - printf (_(UT_HLP_VRS), progname, progname); + printf (_("Usage:")); + printf ("%s -H host -v variable [-p port] [-w warning] [-c critical]\n",progname); + printf ("[-l params] [-d SHOWALL] [-u] [-t timeout]\n"); } +