| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931 |
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
- <HTML
- ><HEAD
- ><TITLE
- >Nagios plug-in development guidelines</TITLE
- ><META
- NAME="GENERATOR"
- CONTENT="Modular DocBook HTML Stylesheet Version 1.64
- "></HEAD
- ><BODY
- CLASS="BOOK"
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#840084"
- ALINK="#0000FF"
- ><DIV
- CLASS="BOOK"
- ><A
- NAME="AEN1"
- ></A
- ><DIV
- CLASS="TITLEPAGE"
- ><H1
- CLASS="TITLE"
- ><A
- NAME="AEN3"
- >Nagios plug-in development guidelines</A
- ></H1
- ><H3
- CLASS="AUTHOR"
- ><A
- NAME="AEN5"
- >Karl DeBisschop</A
- ></H3
- ><DIV
- CLASS="AFFILIATION"
- ><DIV
- CLASS="ADDRESS"
- ><P
- CLASS="ADDRESS"
- >karl@debisschop.net</P
- ></DIV
- ></DIV
- ><H3
- CLASS="AUTHOR"
- ><A
- NAME="AEN11"
- >Ethan Galstad</A
- ></H3
- ><DIV
- CLASS="AFFILIATION"
- ><DIV
- CLASS="ADDRESS"
- ><P
- CLASS="ADDRESS"
- >netsaint@linuxbox.com</P
- ></DIV
- ></DIV
- ><H3
- CLASS="AUTHOR"
- ><A
- NAME="AEN21"
- >Hugo Gayosso</A
- ></H3
- ><DIV
- CLASS="AFFILIATION"
- ><DIV
- CLASS="ADDRESS"
- ><P
- CLASS="ADDRESS"
- >hgayosso@gnu.org</P
- ></DIV
- ></DIV
- ><H3
- CLASS="AUTHOR"
- ><A
- NAME="AEN27"
- >Subhendu Ghosh</A
- ></H3
- ><DIV
- CLASS="AFFILIATION"
- ><DIV
- CLASS="ADDRESS"
- ><P
- CLASS="ADDRESS"
- >sghosh@sourceforge.net</P
- ></DIV
- ></DIV
- ><H3
- CLASS="AUTHOR"
- ><A
- NAME="AEN33"
- >Stanley Hopcroft</A
- ></H3
- ><DIV
- CLASS="AFFILIATION"
- ><DIV
- CLASS="ADDRESS"
- ><P
- CLASS="ADDRESS"
- >stanleyhopcroft@sourceforge.net</P
- ></DIV
- ></DIV
- ><P
- CLASS="COPYRIGHT"
- >Copyright © 2000 2001 2002 by Karl DeBisschop, Ethan Galstad,
- Hugo Gayosso, Stanley Hopcroft, Subhendu Ghosh</P
- ><HR></DIV
- ><DIV
- CLASS="TOC"
- ><DL
- ><DT
- ><B
- >Table of Contents</B
- ></DT
- ><DT
- ><A
- HREF="#PREFACE"
- >About the guidelines</A
- ></DT
- ><DD
- ><DL
- ><DT
- ><A
- HREF="#AEN51"
- >Copyright</A
- ></DT
- ></DL
- ></DD
- ><DT
- ><A
- HREF="#AEN56"
- ></A
- ></DT
- ><DD
- ><DL
- ><DT
- ><A
- HREF="#PLUGOUTPUT"
- >Plugin Output for Nagios</A
- ></DT
- ><DD
- ><DL
- ><DT
- ><A
- HREF="#AEN60"
- >Print only one line of text</A
- ></DT
- ><DT
- ><A
- HREF="#AEN63"
- >Screen Output</A
- ></DT
- ><DT
- ><A
- HREF="#AEN67"
- >Return the proper status code</A
- ></DT
- ><DT
- ><A
- HREF="#AEN71"
- >Plugin Return Codes</A
- ></DT
- ></DL
- ></DD
- ><DT
- ><A
- HREF="#SYSCMDAUXFILES"
- >System Commands and Auxiliary Files</A
- ></DT
- ><DD
- ><DL
- ><DT
- ><A
- HREF="#AEN117"
- >Don't execute system commands without specifying their
- full path</A
- ></DT
- ><DT
- ><A
- HREF="#AEN121"
- >Use spopen() if external commands must be executed</A
- ></DT
- ><DT
- ><A
- HREF="#AEN125"
- >Don't make temp files unless absolutely required</A
- ></DT
- ><DT
- ><A
- HREF="#AEN128"
- >Don't be tricked into following symlinks</A
- ></DT
- ><DT
- ><A
- HREF="#AEN131"
- >Validate all input</A
- ></DT
- ></DL
- ></DD
- ><DT
- ><A
- HREF="#PERLPLUGIN"
- >Perl Plugins</A
- ></DT
- ><DT
- ><A
- HREF="#RUNTIME"
- >Runtime Timeouts</A
- ></DT
- ><DD
- ><DL
- ><DT
- ><A
- HREF="#AEN165"
- >Use DEFAULT_SOCKET_TIMEOUT</A
- ></DT
- ><DT
- ><A
- HREF="#AEN168"
- >Add alarms to network plugins</A
- ></DT
- ></DL
- ></DD
- ><DT
- ><A
- HREF="#PLUGOPTIONS"
- >Plugin Options</A
- ></DT
- ><DD
- ><DL
- ><DT
- ><A
- HREF="#AEN174"
- >Option Processing</A
- ></DT
- ><DT
- ><A
- HREF="#AEN187"
- >Plugins with more than one type of threshold, or with
- threshold ranges</A
- ></DT
- ></DL
- ></DD
- ><DT
- ><A
- HREF="#SUBMITTINGCHANGES"
- >New submissions and patches</A
- ></DT
- ></DL
- ></DD
- ></DL
- ></DIV
- ><DIV
- CLASS="PREFACE"
- ><HR><H1
- ><A
- NAME="PREFACE"
- >About the guidelines</A
- ></H1
- ><P
- >The purpose of this guidelines is to provide a reference for
- the plug-in developers and encourage the standarization of the
- different kind of plug-ins: C, shell, perl, python, etc.</P
- ><DIV
- CLASS="SECTION"
- ><HR><H1
- CLASS="SECTION"
- ><A
- NAME="AEN51"
- >Copyright</A
- ></H1
- ><P
- >Nagios Plug-in Development Guidelines Copyright (C) 2000 2001
- 2002
- Karl DeBisschop, Ethan Galstad, Hugo Gayosso, Stanley Hopcroft,
- Subhendu Ghosh</P
- ><P
- >Permission is granted to make and distribute verbatim
- copies of this manual provided the copyright notice and this
- permission notice are preserved on all copies.</P
- ><P
- >The plugins themselves are copyrighted by their respective
- authors.</P
- ></DIV
- ></DIV
- ><DIV
- CLASS="ARTICLE"
- ><DIV
- CLASS="TOC"
- ><DL
- ><DT
- ><B
- >Table of Contents</B
- ></DT
- ><DT
- ><A
- HREF="#PLUGOUTPUT"
- >Plugin Output for Nagios</A
- ></DT
- ><DT
- ><A
- HREF="#SYSCMDAUXFILES"
- >System Commands and Auxiliary Files</A
- ></DT
- ><DT
- ><A
- HREF="#PERLPLUGIN"
- >Perl Plugins</A
- ></DT
- ><DT
- ><A
- HREF="#RUNTIME"
- >Runtime Timeouts</A
- ></DT
- ><DT
- ><A
- HREF="#PLUGOPTIONS"
- >Plugin Options</A
- ></DT
- ><DT
- ><A
- HREF="#SUBMITTINGCHANGES"
- >New submissions and patches</A
- ></DT
- ></DL
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><H1
- CLASS="SECTION"
- ><A
- NAME="PLUGOUTPUT"
- >Plugin Output for Nagios</A
- ></H1
- ><P
- >You should always print something to STDOUT that tells if the
- service is working or why its failing. Try to keep the output short -
- probably less that 80 characters. Remember that you ideally would like
- the entire output to appear in a pager message, which will get chopped
- off after a certain length.</P
- ><DIV
- CLASS="SECTION"
- ><HR><H2
- CLASS="SECTION"
- ><A
- NAME="AEN60"
- >Print only one line of text</A
- ></H2
- ><P
- >Nagios will only grab the first line of text from STDOUT
- when it notifies contacts about potential problems. If you print
- multiple lines, you're out of luck. Remember, keep it short and
- to the point.</P
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H2
- CLASS="SECTION"
- ><A
- NAME="AEN63"
- >Screen Output</A
- ></H2
- ><P
- >The plug-in should print the diagnostic and just the
- synopsis part of the help message. A well written plugin would
- then have --help as a way to get the verbose help.</P
- ><P
- >Code and output should try to respect the 80x25 size of a
- crt (remember when fixing stuff in the server room!)</P
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H2
- CLASS="SECTION"
- ><A
- NAME="AEN67"
- >Return the proper status code</A
- ></H2
- ><P
- >See <A
- HREF="#RETURNCODES"
- >Table 1 in the section called <I
- >Plugin Return Codes</I
- ></A
- > below
- for the numeric values of status codes and their
- description. Remember to return an UNKNOWN state if bogus or
- invalid command line arguments are supplied or it you are unable
- to check the service.</P
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H2
- CLASS="SECTION"
- ><A
- NAME="AEN71"
- >Plugin Return Codes</A
- ></H2
- ><P
- >The return codes below are based on the POSIX spec of returning
- a positive value. Netsaint prior to v0.0.7 supported non-POSIX
- compliant return code of "-1" for unknown. Nagios supports POSIX return
- codes by default.</P
- ><P
- >Note: Some plugins will on occasion print on STDOUT that an error
- occurred and error code is 138 or 255 or some such number. These
- are usually caused by plugins using system commands and having not
- enough checks to catch unexpected output. Developers should include a
- default catch-all for system command output that returns an UNKOWN
- return code.</P
- ><DIV
- CLASS="TABLE"
- ><A
- NAME="RETURNCODES"
- ></A
- ><P
- ><B
- >Table 1. Plugin Return Codes</B
- ></P
- ><TABLE
- BORDER="1"
- BGCOLOR="#E0E0E0"
- CELLSPACING="0"
- CELLPADDING="4"
- CLASS="CALSTABLE"
- ><THEAD
- ><TR
- ><TH
- ALIGN="LEFT"
- VALIGN="TOP"
- ><P
- >Numeric Value</P
- ></TH
- ><TH
- ALIGN="LEFT"
- VALIGN="TOP"
- ><P
- >Service Status</P
- ></TH
- ><TH
- ALIGN="LEFT"
- VALIGN="TOP"
- ><P
- >Status Description</P
- ></TH
- ></TR
- ></THEAD
- ><TBODY
- ><TR
- ><TD
- ALIGN="CENTER"
- VALIGN="TOP"
- ><P
- >0</P
- ></TD
- ><TD
- ALIGN="LEFT"
- VALIGN="MIDDLE"
- ><P
- >OK</P
- ></TD
- ><TD
- ALIGN="LEFT"
- VALIGN="TOP"
- ><P
- >The plugin was able to check the service and it
- appeared to be functioning properly</P
- ></TD
- ></TR
- ><TR
- ><TD
- ALIGN="CENTER"
- VALIGN="TOP"
- ><P
- >1</P
- ></TD
- ><TD
- ALIGN="LEFT"
- VALIGN="MIDDLE"
- ><P
- >Warning</P
- ></TD
- ><TD
- ALIGN="LEFT"
- VALIGN="TOP"
- ><P
- >The plugin was able to check the service, but it
- appeared to be above some "warning" threshold or did not appear
- to be working properly</P
- ></TD
- ></TR
- ><TR
- ><TD
- ALIGN="CENTER"
- VALIGN="TOP"
- ><P
- >2</P
- ></TD
- ><TD
- ALIGN="LEFT"
- VALIGN="MIDDLE"
- ><P
- >Critical</P
- ></TD
- ><TD
- ALIGN="LEFT"
- VALIGN="TOP"
- ><P
- >The plugin detected that either the service was not
- running or it was above some "critical" threshold</P
- ></TD
- ></TR
- ><TR
- ><TD
- ALIGN="CENTER"
- VALIGN="TOP"
- ><P
- >3</P
- ></TD
- ><TD
- ALIGN="LEFT"
- VALIGN="MIDDLE"
- ><P
- >Unknown</P
- ></TD
- ><TD
- ALIGN="LEFT"
- VALIGN="TOP"
- ><P
- >Invalid command line arguments were supplied to the
- plugin or the plugin was unable to check the status of the given
- hosts/service</P
- ></TD
- ></TR
- ></TBODY
- ></TABLE
- ></DIV
- ></DIV
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H1
- CLASS="SECTION"
- ><A
- NAME="SYSCMDAUXFILES"
- >System Commands and Auxiliary Files</A
- ></H1
- ><DIV
- CLASS="SECTION"
- ><H2
- CLASS="SECTION"
- ><A
- NAME="AEN117"
- >Don't execute system commands without specifying their
- full path</A
- ></H2
- ><P
- >Don't use exec(), popen(), etc. to execute external
- commands without explicity using the full path of the external
- program.</P
- ><P
- >Doing otherwise makes the plugin vulnerable to hijacking
- by a trojan horse earlier in the search path. See the main
- plugin distribution for examples on how this is done.</P
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H2
- CLASS="SECTION"
- ><A
- NAME="AEN121"
- >Use spopen() if external commands must be executed</A
- ></H2
- ><P
- >If you have to execute external commands from within your
- plugin and you're writing it in C, use the spopen() function
- that Karl DeBisschop has written.</P
- ><P
- >The code for spopen() and spclose() is included with the
- core plugin distribution.</P
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H2
- CLASS="SECTION"
- ><A
- NAME="AEN125"
- >Don't make temp files unless absolutely required</A
- ></H2
- ><P
- >If temp files are needed, make sure that the plugin will
- fail cleanly if the file can't be written (e.g., too few file
- handles, out of disk space, incorrect permissions, etc.) and
- delete the temp file when processing is complete.</P
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H2
- CLASS="SECTION"
- ><A
- NAME="AEN128"
- >Don't be tricked into following symlinks</A
- ></H2
- ><P
- >If your plugin opens any files, take steps to ensure that
- you are not following a symlink to another location on the
- system.</P
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H2
- CLASS="SECTION"
- ><A
- NAME="AEN131"
- >Validate all input</A
- ></H2
- ><P
- >use routines in utils.c or utils.pm and write more as needed</P
- ></DIV
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H1
- CLASS="SECTION"
- ><A
- NAME="PERLPLUGIN"
- >Perl Plugins</A
- ></H1
- ><P
- >Perl plugins are coded a little more defensively than other
- plugins because of embedded Perl. When configured as such, embedded
- Perl Nagios (ePN) requires stricter use of the some of Perl's features.
- This section outlines some of the steps needed to use ePN
- effectively.</P
- ><P
- ></P
- ><OL
- TYPE="1"
- ><LI
- ><P
- > Do not use BEGIN and END blocks since they will be called
- the first time and when Nagios shuts down with Embedded Perl (ePN). In
- particular, do not use BEGIN blocks to initialize variables.</P
- ></LI
- ><LI
- ><P
- >To use utils.pm, you need to provide a full path to the
- module in order for it to work with ePN.</P
- ><P
- CLASS="LITERALLAYOUT"
- > e.g.<br>
- use lib "/usr/local/nagios/libexec";<br>
- use utils qw(...);<br>
- </P
- ></LI
- ><LI
- ><P
- >Perl scripts should be called with "-w"</P
- ></LI
- ><LI
- ><P
- >All Perl plugins must compile cleanly under "use strict" - i.e. at
- least explicitly package names as in "$main::x" or predeclare every
- variable. </P
- ><P
- >Explicitly initialize each varialable in use. Otherwise with
- caching enabled, the plugin will not be recompilied each time, and
- therefore Perl will not reinitialize all the variables. All old
- variable values will still be in effect.</P
- ></LI
- ><LI
- ><P
- >Do not use < DATA > (these simply do not compile under ePN).</P
- ></LI
- ><LI
- ><P
- >Do not use named subroutines</P
- ></LI
- ><LI
- ><P
- >If writing to a file (perhaps recording
- performance data) explicitly close close it. The plugin never
- calls <I
- CLASS="EMPHASIS"
- >exit</I
- >; that is caught by
- p1.pl, so output streams are never closed.</P
- ></LI
- ><LI
- ><P
- >As in <A
- HREF="#RUNTIME"
- >the section called <I
- >Runtime Timeouts</I
- ></A
- > all plugins need
- to monitor their runtime, specially if they are using network
- resources. Use of the <I
- CLASS="EMPHASIS"
- >alarm</I
- > is recommended.
- Plugins may import a default time out ($TIMEOUT) from utils.pm.
- </P
- ></LI
- ><LI
- ><P
- >Perl plugins should import %ERRORS from utils.pm
- and then "exit $ERRORS{'OK'}" rather than "exit 0"
- </P
- ></LI
- ></OL
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H1
- CLASS="SECTION"
- ><A
- NAME="RUNTIME"
- >Runtime Timeouts</A
- ></H1
- ><P
- >Plugins have a very limited runtime - typically 10 sec.
- As a result, it is very important for plugins to maintain internal
- code to exit if runtime exceeds a threshold. </P
- ><P
- >All plugins should timeout gracefully, not just networking
- plugins. For instance, df may lock if you have automounted
- drives and your network fails - but on first glance, who'd think
- df could lock up like that. Plus, it should just be more error
- resistant to be able to time out rather than consume
- resources.</P
- ><DIV
- CLASS="SECTION"
- ><HR><H2
- CLASS="SECTION"
- ><A
- NAME="AEN165"
- >Use DEFAULT_SOCKET_TIMEOUT</A
- ></H2
- ><P
- >All network plugins should use DEFAULT_SOCKET_TIMEOUT to timeout</P
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H2
- CLASS="SECTION"
- ><A
- NAME="AEN168"
- >Add alarms to network plugins</A
- ></H2
- ><P
- >If you write a plugin which communicates with another
- networked host, you should make sure to set an alarm() in your
- code that prevents the plugin from hanging due to abnormal
- socket closures, etc. Nagios takes steps to protect itself
- against unruly plugins that timeout, but any plugins you create
- should be well behaved on their own.</P
- ></DIV
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H1
- CLASS="SECTION"
- ><A
- NAME="PLUGOPTIONS"
- >Plugin Options</A
- ></H1
- ><P
- >A well written plugin should have --help as a way to get
- verbose help. Code and output should try to respect the 80x25 size of a
- crt (remember when fixing stuff in the server room!)</P
- ><DIV
- CLASS="SECTION"
- ><HR><H2
- CLASS="SECTION"
- ><A
- NAME="AEN174"
- >Option Processing</A
- ></H2
- ><P
- >For plugins written in C, we recommend the C standard
- getopt library for short options. If using getopt_long, check to
- be sure that HAVE_GETOPT_H is defined (configure checks this and
- sets the #define in common/config.h).</P
- ><P
- >For plugins written in Perl, we recommend Getopt::Long module.</P
- ><P
- >Positional arguments are strongly discouraged.</P
- ><P
- >There are a few reserved options that should not be used
- for other purposes:</P
- ><P
- CLASS="LITERALLAYOUT"
- > -V version (--version)<br>
- -h help (--help)<br>
- -t timeout (--timeout)<br>
- -w warning threshold (--warning)<br>
- -c critical threshold (--critical)<br>
- -H hostname (--hostname)<br>
- </P
- ><P
- >In addition to the reserved options above, some other standard options are:</P
- ><P
- CLASS="LITERALLAYOUT"
- > -C SNMP community (--community)<br>
- -a authentication password (--authentication)<br>
- -l login name (--logname)<br>
- -p port or password (--port or --passwd/--password)monitors operational<br>
- -u url or username (--url or --username)<br>
- </P
- ><P
- >Look at check_pgsql and check_procs to see how I currently
- think this can work. Standard options are:</P
- ><P
- >The option -V or --version should be present in all
- plugins. For C plugins it should result in a call to print_revision, a
- function in utils.c which takes two character arguments, the
- command name and the plugin revision.</P
- ><P
- >The -? option, or any other unparsable set of options,
- should print out a short usage statement. Character width should
- be 80 and less and no more that 23 lines should be printed (it
- should display cleanly on a dumb terminal in a server
- room).</P
- ><P
- >The option -h or --help should be present in all plugins.
- In C plugins, it should result in a call to print_help (or
- equivalent). The function print_help should call print_revision,
- then print_usage, then should provide detailed
- help. Help text should fit on an 80-character width display, but
- may run as many lines as needed.</P
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H2
- CLASS="SECTION"
- ><A
- NAME="AEN187"
- >Plugins with more than one type of threshold, or with
- threshold ranges</A
- ></H2
- ><P
- >Old style was to do things like -ct for critical time and
- -cv for critical value. That goes out the window with POSIX
- getopt. The allowable alternatves are:</P
- ><P
- ></P
- ><OL
- TYPE="1"
- ><LI
- ><P
- >long options like -critical-time (or -ct and -cv, I
- suppose).</P
- ></LI
- ><LI
- ><P
- >repeated options like `check_load -w 10 -w 6 -w 4 -c
- 16 -c 10 -c 10`</P
- ></LI
- ><LI
- ><P
- >for brevity, the above can be expressed as `check_load
- -w 10,6,4 -c 16,10,10`</P
- ></LI
- ><LI
- ><P
- >ranges are expressed with colons as in `check_procs -C
- httpd -w 1:20 -c 1:30` which will warn above 20 instances,
- and critical at 0 and above 30</P
- ></LI
- ><LI
- ><P
- >lists are expressed with commas, so Jacob's check_nmap
- uses constructs like '-p 1000,1010,1050:1060,2000'</P
- ></LI
- ><LI
- ><P
- >If possible when writing lists, use tokens to make the
- list easy to remember and non-order dependent - so
- check_disk uses '-c 10000,10%' so that it is clear which is
- the precentage and which is the KB values (note that due to
- my own lack of foresight, that used to be '-c 10000:10%' but
- such constructs should all be changed for consistency,
- though providing reverse compatibility is fairly
- easy).</P
- ></LI
- ></OL
- ><P
- >As always, comments are welcome - making this consistent
- without a host of long options was quite a hassle, and I would
- suspect that there are flaws in this strategy. Perhaps clear
- long-options is the most important of the above choices, but not
- all POSIX systems have C libraries for long options, so the
- short forms must exist as well.</P
- ></DIV
- ></DIV
- ><DIV
- CLASS="SECTION"
- ><HR><H1
- CLASS="SECTION"
- ><A
- NAME="SUBMITTINGCHANGES"
- >New submissions and patches</A
- ></H1
- ><P
- >If you would like other to use your plugins and have it included in
- the standard distribution, please include patches for the relavant
- configuration files, in particular "configure.in" Otherwise submitted
- plugins will be included in the contrib directory.</P
- ><P
- >Plugins in the contrib directory are going to be migrated to the
- standard plugins/plugin-scripts directory as time permits and per user
- requests</P
- ><P
- >Patches should be submitted via the SourceForge and be announced to
- the mailing list.</P
- ><P
- >For new plugins, provide a diff to add to the EXTRAS list (configure.in)
- unless you are fairly sure that the plugin will work for all platforms with
- no non-standard software added.</P
- ><P
- >If possible please submit a test harness. Documentation on sample
- tests coming soon.</P
- ></DIV
- ></DIV
- ></DIV
- ></BODY
- ></HTML
- >
|