summaryrefslogtreecommitdiffstats
path: root/web/attachments/456909-nagios-plugins-metadata.patch
diff options
context:
space:
mode:
Diffstat (limited to 'web/attachments/456909-nagios-plugins-metadata.patch')
-rw-r--r--web/attachments/456909-nagios-plugins-metadata.patch315
1 files changed, 315 insertions, 0 deletions
diff --git a/web/attachments/456909-nagios-plugins-metadata.patch b/web/attachments/456909-nagios-plugins-metadata.patch
new file mode 100644
index 0000000..421a1fa
--- /dev/null
+++ b/web/attachments/456909-nagios-plugins-metadata.patch
@@ -0,0 +1,315 @@
1commit ba0449fe8534bdcc03d3a15e36c8af711a2a72d2
2Author: Dejan Muhamedagic <dejan@suse.de>
3Date: Thu Nov 22 15:47:27 2012 +0100
4
5 Support for meta-data (XML)
6
7 Enables nagios plugins to be deployed as resource agents with
8 pacemaker clusters. The meta-data is defined here:
9
10 https://github.com/ClusterLabs/resource-agents/blob/master/heartbeat/ra-api-1.dtd
11
12 This commit does not change behaviour of any plugins.
13
14diff --git a/plugins/Makefile.am b/plugins/Makefile.am
15index 0eb0255..0ef8d50 100644
16--- a/plugins/Makefile.am
17+++ b/plugins/Makefile.am
18@@ -39,12 +39,12 @@ EXTRA_PROGRAMS = check_mysql check_radius check_pgsql check_snmp check_hpjd \
19 check_nagios check_by_ssh check_dns check_nt check_ide_smart \
20 check_procs check_mysql_query check_apt check_dbi
21
22-EXTRA_DIST = t tests utils.c netutils.c sslutils.c popen.c utils.h netutils.h \
23- popen.h common.h runcmd.c runcmd.h
24+EXTRA_DIST = t tests utils.c netutils.c sslutils.c popen.c help.c \
25+ utils.h netutils.h popen.h common.h runcmd.c runcmd.h help.h
26
27 PLUGINHDRS = common.h
28
29-BASEOBJS = utils.o ../lib/libnagiosplug.a ../gl/libgnu.a
30+BASEOBJS = utils.o help.o ../lib/libnagiosplug.a ../gl/libgnu.a
31 NETOBJS = netutils.o $(BASEOBJS) $(EXTRA_NETOBJS)
32 SSLOBJS = sslutils.o
33 NETLIBS = $(NETOBJS) $(SOCKETLIBS)
34@@ -159,6 +159,8 @@ runcmd.o: runcmd.c runcmd.h $(PLUGINHDRS)
35
36 utils.o: utils.c utils.h $(PLUGINHDRS)
37
38+help.o: help.c help.h
39+
40 netutils.o: netutils.c netutils.h $(PLUGINHDRS)
41 sslutils.o: sslutils.c netutils.h $(PLUGINHDRS)
42
43diff --git a/plugins/help.c b/plugins/help.c
44new file mode 100644
45index 0000000..214707e
46--- /dev/null
47+++ b/plugins/help.c
48@@ -0,0 +1,140 @@
49+/*
50+ * help.c: custom help functions to print help text and XML
51+ * meta-data
52+ *
53+ * Copyright (C) 2012 Dejan Muhamedagic <dejan@hello-penguin.com>
54+ *
55+ *
56+ * This library is free software; you can redistribute it and/or
57+ * modify it under the terms of the GNU Lesser General Public
58+ * License as published by the Free Software Foundation; either
59+ * version 2.1 of the License, or (at your option) any later version.
60+ *
61+ * This library is distributed in the hope that it will be useful,
62+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
63+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
64+ * Lesser General Public License for more details.
65+ *
66+ * You should have received a copy of the GNU Lesser General Public
67+ * License along with this library; if not, write to the Free Software
68+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
69+ *
70+ */
71+
72+#include "common.h"
73+#include "help.h"
74+
75+static void meta_long_desc_from_short(const char *, const char *);
76+static void meta_long_desc(const char *, const char *);
77+static void meta_short_desc(const char *, const char *);
78+static void meta_param(const char *, struct parameter_help *);
79+static void indent(const char *, const char *);
80+
81+static void
82+meta_long_desc_from_short(const char *lang, const char *s)
83+{
84+ printf(XML_LONGDESC_BEGIN, lang);
85+ printf("%s\n", _(s));
86+ printf(XML_LONGDESC_END);
87+}
88+
89+static void
90+meta_long_desc(const char *lang, const char *s)
91+{
92+ printf(XML_LONGDESC_BEGIN, lang);
93+ printf("%s", _(s));
94+ printf(XML_LONGDESC_END);
95+}
96+
97+static void
98+meta_short_desc(const char *lang, const char *s)
99+{
100+ printf(XML_SHORTDESC_BEGIN, lang);
101+ printf("%s", _(s));
102+ printf(XML_SHORTDESC_END);
103+}
104+
105+static void
106+meta_param(const char *lang, struct parameter_help *ph)
107+{
108+ printf(XML_PARAMETER_BEGIN, ph->name, ph->unique, ph->required);
109+ if (ph->long_desc) {
110+ meta_long_desc(lang, ph->long_desc);
111+ } else {
112+ meta_long_desc_from_short(lang, ph->short_desc);
113+ }
114+ meta_short_desc(lang, ph->short_desc);
115+ printf(XML_PARAMETER_CONTENT, ph->type, ph->dflt_value);
116+ printf(XML_PARAMETER_END);
117+}
118+
119+void
120+print_meta_data(struct help_head *hh, struct parameter_help *ph)
121+{
122+ struct parameter_help *p;
123+
124+ printf(XML_START, hh->name);
125+ if (hh->long_desc) {
126+ meta_long_desc(LANG, hh->long_desc);
127+ } else {
128+ meta_long_desc_from_short(LANG, hh->short_desc);
129+ }
130+ meta_short_desc(LANG, hh->short_desc);
131+ printf("\n");
132+ printf(XML_PARAMETERS_BEGIN);
133+ printf("\n");
134+ for (p = ph; p->short_desc; p++) {
135+ meta_param(LANG, p);
136+ printf("\n");
137+ }
138+ printf(XML_PARAMETERS_END);
139+ printf("\n");
140+ printf(XML_ACTIONS);
141+ printf("\n");
142+ printf(XML_END);
143+}
144+
145+static void
146+indent(const char *s, const char *tab)
147+{
148+ const char *p, *q;
149+ int len;
150+
151+ if (!s )
152+ return;
153+ for (p = s; p < s+strlen(s) && *p; p = q+1) {
154+ q = strchr(p, '\n');
155+ if( q ) {
156+ printf("%s%.*s", tab, q-p+1, p);
157+ } else {
158+ printf("%s%s\n", tab, p);
159+ }
160+ }
161+}
162+
163+void
164+print_help_head(struct help_head *hh)
165+{
166+ if (hh->long_desc) {
167+ printf(_(hh->long_desc));
168+ } else {
169+ printf("%s\n", _(hh->short_desc));
170+ }
171+}
172+
173+void
174+print_parameters_help(struct parameter_help *ph)
175+{
176+ struct parameter_help *p;
177+
178+ for (p = ph; p->short_desc; p++) {
179+ if (p->short_opt) {
180+ printf(" -%c, --%s=%s\n", (unsigned char)(p->short_opt),
181+ p->name, p->value_desc);
182+ } else {
183+ printf(" --%s=%s\n", p->name, p->value_desc);
184+ }
185+ indent(_(p->long_desc), " ");
186+ printf(UT_METADATA);
187+ }
188+}
189diff --git a/plugins/help.h b/plugins/help.h
190new file mode 100644
191index 0000000..4486424
192--- /dev/null
193+++ b/plugins/help.h
194@@ -0,0 +1,108 @@
195+/*
196+ * help.h: custom help functions to print help text and XML
197+ * meta-data
198+ *
199+ * Copyright (C) 2012 Dejan Muhamedagic <dejan@hello-penguin.com>
200+ *
201+ *
202+ * This library is free software; you can redistribute it and/or
203+ * modify it under the terms of the GNU Lesser General Public
204+ * License as published by the Free Software Foundation; either
205+ * version 2.1 of the License, or (at your option) any later version.
206+ *
207+ * This library is distributed in the hope that it will be useful,
208+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
209+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
210+ * Lesser General Public License for more details.
211+ *
212+ * You should have received a copy of the GNU Lesser General Public
213+ * License along with this library; if not, write to the Free Software
214+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
215+ *
216+ */
217+
218+#ifndef NP_HELP_H
219+#define NP_HELP_H
220+/* Header file for nagios plugins help.c */
221+
222+/* This file should be included in all plugins */
223+
224+#include <stdio.h>
225+#include <stdlib.h>
226+#include <string.h>
227+#include <getopt.h>
228+
229+/*
230+ * The generic constants for XML
231+ */
232+
233+#define XML_START \
234+ "<?xml version=\"1.0\"?>\n" \
235+ "<!DOCTYPE resource-agent SYSTEM \"ra-api-1.dtd\">\n" \
236+ "<resource-agent name=\"%s\">\n" \
237+ "<version>1.0</version>\n\n"
238+#define XML_ACTIONS \
239+ "<actions>\n" \
240+ "<action name=\"start\" timeout=\"20\" />\n" \
241+ "<action name=\"stop\" timeout=\"15\" />\n" \
242+ "<action name=\"status\" timeout=\"20\" />\n" \
243+ "<action name=\"monitor\" timeout=\"20\" interval=\"60\" />\n" \
244+ "<action name=\"meta-data\" timeout=\"15\" />\n" \
245+ "</actions>\n"
246+#define XML_END \
247+ "</resource-agent>\n"
248+
249+/* <parameters>?</parameters> */
250+#define XML_PARAMETERS_BEGIN "<parameters>\n"
251+#define XML_PARAMETERS_END "</parameters>\n"
252+
253+/* <parameter name="ipaddr" required="1" unique="1">
254+ <content type="string" default="value"/>
255+ ?
256+ </parameter>
257+ */
258+#define XML_PARAMETER_BEGIN \
259+ "<parameter name=\"%s\" unique=\"%d\" required=\"%d\">\n"
260+#define XML_PARAMETER_CONTENT \
261+ "<content type=\"%s\" default=\"%s\" />\n"
262+#define XML_PARAMETER_END "</parameter>\n"
263+
264+/* <shortdesc lang="en">?</shortdesc> */
265+#define XML_SHORTDESC_BEGIN \
266+ "<shortdesc lang=\"%s\">"
267+#define XML_SHORTDESC_END "</shortdesc>\n"
268+
269+/* <longdesc lang="en">?</longdesc> */
270+#define XML_LONGDESC_BEGIN \
271+ "<longdesc lang=\"%s\">\n"
272+#define XML_LONGDESC_END "</longdesc>\n"
273+
274+#define LANG "en"
275+
276+#define UT_METADATA _("\
277+ --metadata\n\
278+ Print resource agent meta-data.\n")
279+
280+struct parameter_help {
281+ const char *name;
282+ int short_opt;
283+ const char *short_desc;
284+ int unique;
285+ int required;
286+ const char *type;
287+ const char *dflt_value;
288+ const char *value_desc;
289+ const char *long_desc;
290+};
291+
292+struct help_head {
293+ const char *name;
294+ const char *short_desc;
295+ const char *long_desc;
296+};
297+
298+void print_meta_data(struct help_head *, struct parameter_help *);
299+void print_parameters_help(struct parameter_help *);
300+void print_help_head(struct help_head *);
301+
302+#endif /* NP_HELP_H */
303diff --git a/plugins/utils.h b/plugins/utils.h
304index 822be94..f0d0e50 100644
305--- a/plugins/utils.h
306+++ b/plugins/utils.h
307@@ -24,6 +24,8 @@ suite of plugins. */
308 #define np_extra_opts(acptr,av,pr) av
309 #endif
310
311+#include "help.h"
312+
313 /* Standardize version information, termination */
314
315 void support (void);