summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/developer-guidelines.sgml146
1 files changed, 73 insertions, 73 deletions
diff --git a/doc/developer-guidelines.sgml b/doc/developer-guidelines.sgml
index 6f31f365..28674e05 100644
--- a/doc/developer-guidelines.sgml
+++ b/doc/developer-guidelines.sgml
@@ -13,7 +13,7 @@
13 13
14 <pubdate>2013</pubdate> 14 <pubdate>2013</pubdate>
15 <title>Monitoring Plugins Development Guidelines</title> 15 <title>Monitoring Plugins Development Guidelines</title>
16 16
17 <revhistory> 17 <revhistory>
18 <revision> 18 <revision>
19 <revnumber>1796</revnumber> 19 <revnumber>1796</revnumber>
@@ -72,14 +72,14 @@
72</section> 72</section>
73 73
74<section id="PlugOutput"><title>Plugin Output for Nagios</title> 74<section id="PlugOutput"><title>Plugin Output for Nagios</title>
75 75
76 <para>You should always print something to STDOUT that tells if the 76 <para>You should always print something to STDOUT that tells if the
77 service is working or why it is failing. Try to keep the output short - 77 service is working or why it is failing. Try to keep the output short -
78 probably less that 80 characters. Remember that you ideally would like 78 probably less that 80 characters. Remember that you ideally would like
79 the entire output to appear in a pager message, which will get chopped 79 the entire output to appear in a pager message, which will get chopped
80 off after a certain length.</para> 80 off after a certain length.</para>
81 81
82 <para>As Nagios does not capture stderr output, you should only output to 82 <para>As Nagios does not capture stderr output, you should only output to
83 STDOUT and not print to STDERR.</para> 83 STDOUT and not print to STDERR.</para>
84 84
85 <section><title>Print only one line of text</title> 85 <section><title>Print only one line of text</title>
@@ -101,7 +101,7 @@
101 SERVICE STATUS: Information text 101 SERVICE STATUS: Information text
102 </literallayout> 102 </literallayout>
103 <para>However, note that this is not a requirement of the API, so you cannot depend on this 103 <para>However, note that this is not a requirement of the API, so you cannot depend on this
104 being an accurate reflection of the status of the service - the status should always 104 being an accurate reflection of the status of the service - the status should always
105 be determined by the return code.</para> 105 be determined by the return code.</para>
106 </section> 106 </section>
107 107
@@ -148,7 +148,7 @@
148 <para>Code and output should try to respect the 80x25 size of a 148 <para>Code and output should try to respect the 80x25 size of a
149 crt (remember when fixing stuff in the server room!)</para> 149 crt (remember when fixing stuff in the server room!)</para>
150 </section> 150 </section>
151 151
152 <section><title>Plugin Return Codes</title> 152 <section><title>Plugin Return Codes</title>
153 <para>The return codes below are based on the POSIX spec of returning 153 <para>The return codes below are based on the POSIX spec of returning
154 a positive value. Netsaint prior to v0.0.7 supported non-POSIX 154 a positive value. Netsaint prior to v0.0.7 supported non-POSIX
@@ -157,11 +157,11 @@
157 157
158 <para>Note: Some plugins will on occasion print on STDOUT that an error 158 <para>Note: Some plugins will on occasion print on STDOUT that an error
159 occurred and error code is 138 or 255 or some such number. These 159 occurred and error code is 138 or 255 or some such number. These
160 are usually caused by plugins using system commands and having not 160 are usually caused by plugins using system commands and having not
161 enough checks to catch unexpected output. Developers should include a 161 enough checks to catch unexpected output. Developers should include a
162 default catch-all for system command output that returns an UNKNOWN 162 default catch-all for system command output that returns an UNKNOWN
163 return code.</para> 163 return code.</para>
164 164
165 <table id="ReturnCodes"><title>Plugin Return Codes</title> 165 <table id="ReturnCodes"><title>Plugin Return Codes</title>
166 <tgroup cols="3"> 166 <tgroup cols="3">
167 <thead> 167 <thead>
@@ -175,20 +175,20 @@
175 <row> 175 <row>
176 <entry align="center"><para>0</para></entry> 176 <entry align="center"><para>0</para></entry>
177 <entry valign="middle"><para>OK</para></entry> 177 <entry valign="middle"><para>OK</para></entry>
178 <entry><para>The plugin was able to check the service and it 178 <entry><para>The plugin was able to check the service and it
179 appeared to be functioning properly</para></entry> 179 appeared to be functioning properly</para></entry>
180 </row> 180 </row>
181 <row> 181 <row>
182 <entry align="center"><para>1</para></entry> 182 <entry align="center"><para>1</para></entry>
183 <entry valign="middle"><para>Warning</para></entry> 183 <entry valign="middle"><para>Warning</para></entry>
184 <entry><para>The plugin was able to check the service, but it 184 <entry><para>The plugin was able to check the service, but it
185 appeared to be above some "warning" threshold or did not appear 185 appeared to be above some "warning" threshold or did not appear
186 to be working properly</para></entry> 186 to be working properly</para></entry>
187 </row> 187 </row>
188 <row> 188 <row>
189 <entry align="center"><para>2</para></entry> 189 <entry align="center"><para>2</para></entry>
190 <entry valign="middle"><para>Critical</para></entry> 190 <entry valign="middle"><para>Critical</para></entry>
191 <entry><para>The plugin detected that either the service was not 191 <entry><para>The plugin detected that either the service was not
192 running or it was above some "critical" threshold</para></entry> 192 running or it was above some "critical" threshold</para></entry>
193 </row> 193 </row>
194 <row> 194 <row>
@@ -207,7 +207,7 @@
207 </tgroup> 207 </tgroup>
208 </table> 208 </table>
209 209
210 210
211 </section> 211 </section>
212 212
213 <section id="thresholdformat"><title>Threshold and ranges</title> 213 <section id="thresholdformat"><title>Threshold and ranges</title>
@@ -218,7 +218,7 @@
218 set_thresholds(thresholds *, char *, char *) function to set the thresholds. 218 set_thresholds(thresholds *, char *, char *) function to set the thresholds.
219 </para> 219 </para>
220 <para>The theory is that the plugin will do some sort of check which returns 220 <para>The theory is that the plugin will do some sort of check which returns
221 back a numerical value, or metric, which is then compared to the warning and 221 back a numerical value, or metric, which is then compared to the warning and
222 critical thresholds. Use the get_status(double, thresholds *) function to 222 critical thresholds. Use the get_status(double, thresholds *) function to
223 compare the value against the thresholds.</para> 223 compare the value against the thresholds.</para>
224 <para>This is the generalised format for ranges:</para> 224 <para>This is the generalised format for ranges:</para>
@@ -226,14 +226,14 @@
226 <literallayout> 226 <literallayout>
227 [@]start:end 227 [@]start:end
228 </literallayout> 228 </literallayout>
229 229
230 <para>Notes:</para> 230 <para>Notes:</para>
231 <orderedlist> 231 <orderedlist>
232 <listitem><para>start &le; end</para> 232 <listitem><para>start &le; end</para>
233 </listitem> 233 </listitem>
234 <listitem><para>start and ":" is not required if start=0</para> 234 <listitem><para>start and ":" is not required if start=0</para>
235 </listitem> 235 </listitem>
236 <listitem><para>if range is of format "start:" and end is not specified, 236 <listitem><para>if range is of format "start:" and end is not specified,
237 assume end is infinity</para> 237 assume end is infinity</para>
238 </listitem> 238 </listitem>
239 <listitem><para>to specify negative infinity, use "~"</para> 239 <listitem><para>to specify negative infinity, use "~"</para>
@@ -245,7 +245,7 @@
245 (inclusive of endpoints)</para> 245 (inclusive of endpoints)</para>
246 </listitem> 246 </listitem>
247 </orderedlist> 247 </orderedlist>
248 248
249 <para>Note: Not all plugins are coded to expect ranges in this format yet. 249 <para>Note: Not all plugins are coded to expect ranges in this format yet.
250 There will be some work in providing multiple metrics.</para> 250 There will be some work in providing multiple metrics.</para>
251 251
@@ -344,7 +344,7 @@
344 </listitem> 344 </listitem>
345 <listitem><para>label can contain any characters except the equals sign or single quote (')</para> 345 <listitem><para>label can contain any characters except the equals sign or single quote (')</para>
346 </listitem> 346 </listitem>
347 <listitem><para>the single quotes for the label are optional. Required if 347 <listitem><para>the single quotes for the label are optional. Required if
348 spaces are in the label</para> 348 spaces are in the label</para>
349 </listitem> 349 </listitem>
350 <listitem><para>label length is arbitrary, but ideally the first 19 characters 350 <listitem><para>label length is arbitrary, but ideally the first 19 characters
@@ -353,7 +353,7 @@
353 </listitem> 353 </listitem>
354 <listitem><para>to specify a quote character, use two single quotes</para> 354 <listitem><para>to specify a quote character, use two single quotes</para>
355 </listitem> 355 </listitem>
356 <listitem><para>warn, crit, min or max may be null (for example, if the threshold is 356 <listitem><para>warn, crit, min or max may be null (for example, if the threshold is
357 not defined or min and max do not apply). Trailing unfilled semicolons can be 357 not defined or min and max do not apply). Trailing unfilled semicolons can be
358 dropped</para> 358 dropped</para>
359 </listitem> 359 </listitem>
@@ -363,12 +363,12 @@
363 same UOM. value may be a literal "U" instead, this would indicate that the 363 same UOM. value may be a literal "U" instead, this would indicate that the
364 actual value couldn't be determined</para> 364 actual value couldn't be determined</para>
365 </listitem> 365 </listitem>
366 <listitem><para>warn and crit are in the range format (see 366 <listitem><para>warn and crit are in the range format (see
367 <xref linkend="thresholdformat">). Must be the same UOM</para> 367 <xref linkend="thresholdformat">). Must be the same UOM</para>
368 </listitem> 368 </listitem>
369 <listitem><para>UOM (unit of measurement) is one of:</para> 369 <listitem><para>UOM (unit of measurement) is one of:</para>
370 <orderedlist> 370 <orderedlist>
371 <listitem><para>no unit specified - assume a number (int or float) 371 <listitem><para>no unit specified - assume a number (int or float)
372 of things (eg, users, processes, load averages)</para> 372 of things (eg, users, processes, load averages)</para>
373 </listitem> 373 </listitem>
374 <listitem><para>s - seconds (also us, ms)</para></listitem> 374 <listitem><para>s - seconds (also us, ms)</para></listitem>
@@ -385,9 +385,9 @@
385 </section> 385 </section>
386 386
387 <section><title>Translations</title> 387 <section><title>Translations</title>
388 <para>If possible, use translation tools for all output to respect the user's language 388 <para>If possible, use translation tools for all output to respect the user's language
389 settings. See <xref linkend="translationsdevelopers"> for guidelines 389 settings. See <xref linkend="translationsdevelopers"> for guidelines
390 for the core plugins. 390 for the core plugins.
391 </para> 391 </para>
392 </section> 392 </section>
393</section> 393</section>
@@ -436,7 +436,7 @@
436 </section> 436 </section>
437 437
438</section> 438</section>
439 439
440 440
441 441
442 442
@@ -447,17 +447,17 @@
447 Perl Nagios (ePN) requires stricter use of the some of Perl's features. 447 Perl Nagios (ePN) requires stricter use of the some of Perl's features.
448 This section outlines some of the steps needed to use ePN 448 This section outlines some of the steps needed to use ePN
449 effectively.</para> 449 effectively.</para>
450 450
451 <orderedlist> 451 <orderedlist>
452 452
453 <listitem><para> Do not use BEGIN and END blocks since they will be called 453 <listitem><para> Do not use BEGIN and END blocks since they will be called
454 only once (when Nagios starts and shuts down) with Embedded Perl (ePN). In 454 only once (when Nagios starts and shuts down) with Embedded Perl (ePN). In
455 particular, do not use BEGIN blocks to initialize variables.</para> 455 particular, do not use BEGIN blocks to initialize variables.</para>
456 </listitem> 456 </listitem>
457 457
458 <listitem><para>To use utils.pm, you need to provide a full path to the 458 <listitem><para>To use utils.pm, you need to provide a full path to the
459 module in order for it to work.</para> 459 module in order for it to work.</para>
460 460
461 <literallayout> 461 <literallayout>
462 e.g. 462 e.g.
463 use lib "/usr/local/nagios/libexec"; 463 use lib "/usr/local/nagios/libexec";
@@ -467,24 +467,24 @@
467 467
468 <listitem><para>Perl scripts should be called with "-w"</para> 468 <listitem><para>Perl scripts should be called with "-w"</para>
469 </listitem> 469 </listitem>
470 470
471 <listitem><para>All Perl plugins must compile cleanly under "use strict" - i.e. at 471 <listitem><para>All Perl plugins must compile cleanly under "use strict" - i.e. at
472 least explicitly package names as in "$main::x" or predeclare every 472 least explicitly package names as in "$main::x" or predeclare every
473 variable. </para> 473 variable. </para>
474 474
475 475
476 <para>Explicitly initialize each variable in use. Otherwise with 476 <para>Explicitly initialize each variable in use. Otherwise with
477 caching enabled, the plugin will not be recompiled each time, and 477 caching enabled, the plugin will not be recompiled each time, and
478 therefore Perl will not reinitialize all the variables. All old 478 therefore Perl will not reinitialize all the variables. All old
479 variable values will still be in effect.</para> 479 variable values will still be in effect.</para>
480 </listitem> 480 </listitem>
481 481
482 <listitem><para>Do not use &gt;DATA&lt; handles (these simply do not compile under ePN).</para> 482 <listitem><para>Do not use &gt;DATA&lt; handles (these simply do not compile under ePN).</para>
483 </listitem> 483 </listitem>
484 484
485 <listitem><para>Do not use global variables in named subroutines. This is bad practise anyway, but with ePN the 485 <listitem><para>Do not use global variables in named subroutines. This is bad practise anyway, but with ePN the
486 compiler will report an error "&lt;global_var&gt; will not stay shared ..". Values used by 486 compiler will report an error "&lt;global_var&gt; will not stay shared ..". Values used by
487 subroutines should be passed in the argument list.</para> 487 subroutines should be passed in the argument list.</para>
488 </listitem> 488 </listitem>
489 489
490 <listitem><para>If writing to a file (perhaps recording 490 <listitem><para>If writing to a file (perhaps recording
@@ -492,8 +492,8 @@
492 calls <emphasis role="strong">exit</emphasis>; that is caught by 492 calls <emphasis role="strong">exit</emphasis>; that is caught by
493 p1.pl, so output streams are never closed.</para> 493 p1.pl, so output streams are never closed.</para>
494 </listitem> 494 </listitem>
495 495
496 <listitem><para>As in <xref linkend="runtime"> all plugins need 496 <listitem><para>As in <xref linkend="runtime"> all plugins need
497 to monitor their runtime, specially if they are using network 497 to monitor their runtime, specially if they are using network
498 resources. Use of the <emphasis>alarm</emphasis> is recommended 498 resources. Use of the <emphasis>alarm</emphasis> is recommended
499 noting that some Perl modules (eg LWP) manage timers, so that an alarm 499 noting that some Perl modules (eg LWP) manage timers, so that an alarm
@@ -507,9 +507,9 @@
507 and then "exit $ERRORS{'OK'}" rather than "exit 0" 507 and then "exit $ERRORS{'OK'}" rather than "exit 0"
508 </para> 508 </para>
509 </listitem> 509 </listitem>
510 510
511 </orderedlist> 511 </orderedlist>
512 512
513</section> 513</section>
514 514
515<section id="runtime"><title>Runtime Timeouts</title> 515<section id="runtime"><title>Runtime Timeouts</title>
@@ -524,14 +524,14 @@
524 df could lock up like that. Plus, it should just be more error 524 df could lock up like that. Plus, it should just be more error
525 resistant to be able to time out rather than consume 525 resistant to be able to time out rather than consume
526 resources.</para> 526 resources.</para>
527 527
528 <section><title>Use DEFAULT_SOCKET_TIMEOUT</title> 528 <section><title>Use DEFAULT_SOCKET_TIMEOUT</title>
529 529
530 <para>All network plugins should use DEFAULT_SOCKET_TIMEOUT to timeout</para> 530 <para>All network plugins should use DEFAULT_SOCKET_TIMEOUT to timeout</para>
531 531
532 </section> 532 </section>
533 533
534 534
535 <section><title>Add alarms to network plugins</title> 535 <section><title>Add alarms to network plugins</title>
536 536
537 <para>If you write a plugin which communicates with another 537 <para>If you write a plugin which communicates with another
@@ -543,16 +543,16 @@
543 543
544 </section> 544 </section>
545 545
546 546
547 547
548</section> 548</section>
549 549
550<section id="PlugOptions"><title>Plugin Options</title> 550<section id="PlugOptions"><title>Plugin Options</title>
551 551
552 <para>A well written plugin should have --help as a way to get 552 <para>A well written plugin should have --help as a way to get
553 verbose help. Code and output should try to respect the 80x25 size of a 553 verbose help. Code and output should try to respect the 80x25 size of a
554 crt (remember when fixing stuff in the server room!)</para> 554 crt (remember when fixing stuff in the server room!)</para>
555 555
556 <section><title>Option Processing</title> 556 <section><title>Option Processing</title>
557 557
558 <para>For plugins written in C, we recommend the C standard 558 <para>For plugins written in C, we recommend the C standard
@@ -585,11 +585,11 @@
585 -p port or password (--port or --passwd/--password)monitors operational 585 -p port or password (--port or --passwd/--password)monitors operational
586 -u url or username (--url or --username) 586 -u url or username (--url or --username)
587 </literallayout> 587 </literallayout>
588 588
589 <para>Look at check_pgsql and check_procs to see how I currently 589 <para>Look at check_pgsql and check_procs to see how I currently
590 think this can work. Standard options are:</para> 590 think this can work. Standard options are:</para>
591 591
592 592
593 <para>The option -V or --version should be present in all 593 <para>The option -V or --version should be present in all
594 plugins. For C plugins it should result in a call to print_revision, a 594 plugins. For C plugins it should result in a call to print_revision, a
595 function in utils.c which takes two character arguments, the 595 function in utils.c which takes two character arguments, the
@@ -603,7 +603,7 @@
603 603
604 <para>The option -h or --help should be present in all plugins. 604 <para>The option -h or --help should be present in all plugins.
605 In C plugins, it should result in a call to print_help (or 605 In C plugins, it should result in a call to print_help (or
606 equivalent). The function print_help should call print_revision, 606 equivalent). The function print_help should call print_revision,
607 then print_usage, then should provide detailed 607 then print_usage, then should provide detailed
608 help. Help text should fit on an 80-character width display, but 608 help. Help text should fit on an 80-character width display, but
609 may run as many lines as needed.</para> 609 may run as many lines as needed.</para>
@@ -666,7 +666,7 @@
666 666
667 <para>As always, comments are welcome - making this consistent 667 <para>As always, comments are welcome - making this consistent
668 without a host of long options was quite a hassle, and I would 668 without a host of long options was quite a hassle, and I would
669 suspect that there are flaws in this strategy. 669 suspect that there are flaws in this strategy.
670 </para> 670 </para>
671 </section> 671 </section>
672</section> 672</section>
@@ -678,7 +678,7 @@ create and update test cases where possible.
678</para> 678</para>
679 679
680<para> 680<para>
681To run a test, from the top level directory, run "make test". This will run 681To run a test, from the top level directory, run "make test". This will run
682all the current tests and report an overall success rate. 682all the current tests and report an overall success rate.
683</para> 683</para>
684 684
@@ -697,7 +697,7 @@ This runs the test in a summary format.
697</para> 697</para>
698 698
699<para> 699<para>
700For a good and amusing tutorial on using Test::More, see this 700For a good and amusing tutorial on using Test::More, see this
701<ulink url="http://search.cpan.org/dist/Test-Simple/lib/Test/Tutorial.pod"> 701<ulink url="http://search.cpan.org/dist/Test-Simple/lib/Test/Tutorial.pod">
702link</ulink> 702link</ulink>
703</para> 703</para>
@@ -706,16 +706,16 @@ link</ulink>
706 706
707<section><title>Testing the C library functions</title> 707<section><title>Testing the C library functions</title>
708<para> 708<para>
709We use <ulink url="http://jc.ngo.org.uk/trac-bin/trac.cgi/wiki/LibTap">the libtap library</ulink>, which gives 709We use <ulink url="http://jc.ngo.org.uk/trac-bin/trac.cgi/wiki/LibTap">the libtap library</ulink>, which gives
710perl's TAP 710perl's TAP
711(Test Anything Protocol) output. This is used by the FreeBSD team for their regression testing. 711(Test Anything Protocol) output. This is used by the FreeBSD team for their regression testing.
712</para> 712</para>
713 713
714<para> 714<para>
715To run tests using the libtap library, download the latest tar ball and extract. 715To run tests using the libtap library, download the latest tar ball and extract.
716There is a problem with tap-1.01 where 716There is a problem with tap-1.01 where
717<ulink url="http://jc.ngo.org.uk/trac-bin/trac.cgi/ticket/25">pthread support doesn't appear to work</ulink> 717<ulink url="http://jc.ngo.org.uk/trac-bin/trac.cgi/ticket/25">pthread support doesn't appear to work</ulink>
718properly on non-FreeBSD systems. Install with 'CPPFLAGS="-UHAVE_LIBPTHREAD" ./configure && make && make check && make install'. 718properly on non-FreeBSD systems. Install with 'CPPFLAGS="-UHAVE_LIBPTHREAD" ./configure && make && make check && make install'.
719</para> 719</para>
720 720
721<para> 721<para>
@@ -729,8 +729,8 @@ setup the tests. Run "make test" to run all the tests.
729 <para>See <ulink url="http://www.gnu.org/prep/standards_toc.html">GNU 729 <para>See <ulink url="http://www.gnu.org/prep/standards_toc.html">GNU
730 Coding standards</ulink> for general guidelines.</para> 730 Coding standards</ulink> for general guidelines.</para>
731 <section><title>C coding</title> 731 <section><title>C coding</title>
732 732
733 <para>Variables should be declared at the beginning of code blocks and 733 <para>Variables should be declared at the beginning of code blocks and
734 not inline because of portability with older compilers.</para> 734 not inline because of portability with older compilers.</para>
735 735
736 <para>You should use /* */ for comments and not // as some compilers 736 <para>You should use /* */ for comments and not // as some compilers
@@ -745,8 +745,8 @@ setup the tests. Run "make test" to run all the tests.
745 <para>If you have copied a routine from another source, make sure the licence 745 <para>If you have copied a routine from another source, make sure the licence
746 from your source allows this. Add a comment referencing the ACKNOWLEDGEMENTS 746 from your source allows this. Add a comment referencing the ACKNOWLEDGEMENTS
747 file, where you can put more detail about the source.</para> 747 file, where you can put more detail about the source.</para>
748 <para>For contributed code, do not add any named credits in the source code 748 <para>For contributed code, do not add any named credits in the source code
749 - contributors should be added into the THANKS.in file instead. 749 - contributors should be added into the THANKS.in file instead.
750 </para> 750 </para>
751 </section> 751 </section>
752 752
@@ -809,11 +809,11 @@ setup the tests. Run "make test" to run all the tests.
809 809
810 810
811 <section id="Contributedplugins"><title>Contributed plugins</title> 811 <section id="Contributedplugins"><title>Contributed plugins</title>
812 <para>Plugins that have been contributed to the project and 812 <para>Plugins that have been contributed to the project and
813 distributed with the Monitoring Plugins files are held in the contrib/ directory and are not installed 813 distributed with the Monitoring Plugins files are held in the contrib/ directory and are not installed
814 by default. These plugins are not officially supported by the team. 814 by default. These plugins are not officially supported by the team.
815 The current policy is that these plugins should be owned and maintained by the original 815 The current policy is that these plugins should be owned and maintained by the original
816 contributor, preferably hosted on <ulink url="http://monitoringexchange.org">Monitoring Exchange</ulink>. 816 contributor, preferably hosted on <ulink url="https://exchange.icinga.com/">Icinga Exchange</ulink>.
817 </para> 817 </para>
818 <para>If patches or bugs are raised to an contributed plugin, we will start communications with the 818 <para>If patches or bugs are raised to an contributed plugin, we will start communications with the
819 original contributor, but seek to remove the plugin from our distribution. 819 original contributor, but seek to remove the plugin from our distribution.
@@ -824,11 +824,11 @@ setup the tests. Run "make test" to run all the tests.
824 824
825 <section id="Newplugins"><title>New plugins</title> 825 <section id="Newplugins"><title>New plugins</title>
826 <para>If you would like others to use your plugins, please add it to 826 <para>If you would like others to use your plugins, please add it to
827 the official 3rd party plugin repository, 827 the official 3rd party plugin repository,
828 <ulink url="http://monitoringexchange.org">Monitoring Exchange</ulink>. 828 <ulink url="https://exchange.icinga.com/">Icinga Exchange</ulink>.
829 </para> 829 </para>
830 830
831 <para>We are not accepting requests for inclusion of plugins into 831 <para>We are not accepting requests for inclusion of plugins into
832 our distribution at the moment, but when we do, these are the minimum 832 our distribution at the moment, but when we do, these are the minimum
833 requirements: 833 requirements:
834 </para> 834 </para>
@@ -843,9 +843,9 @@ setup the tests. Run "make test" to run all the tests.
843 --timeout, --warning, --critical)</para> 843 --timeout, --warning, --critical)</para>
844 </listitem> 844 </listitem>
845 <listitem> 845 <listitem>
846 <para>It is determined to be not redundant (for instance, we would not 846 <para>It is determined to be not redundant (for instance, we would not
847 add a new version of check_disk just because someone had provide 847 add a new version of check_disk just because someone had provide
848 a plugin that had perf checking - we would incorporate the features 848 a plugin that had perf checking - we would incorporate the features
849 into an exisiting plugin)</para> 849 into an exisiting plugin)</para>
850 </listitem> 850 </listitem>
851 <listitem> 851 <listitem>
@@ -857,7 +857,7 @@ setup the tests. Run "make test" to run all the tests.
857utils (perl or c or sh) rather than using its own</para> 857utils (perl or c or sh) rather than using its own</para>
858 </listitem> 858 </listitem>
859 <listitem> 859 <listitem>
860 <para>Includes patches to configure.in if required (via the EXTRAS list if 860 <para>Includes patches to configure.in if required (via the EXTRAS list if
861 it will only work on some platforms)</para> 861 it will only work on some platforms)</para>
862 </listitem> 862 </listitem>
863 <listitem> 863 <listitem>
@@ -870,5 +870,5 @@ utils (perl or c or sh) rather than using its own</para>
870 870
871</section> 871</section>
872</article> 872</article>
873 873
874</book> 874</book>