[collectd] [PATCH] perl plugin: Added "BaseName" config option.

Sebastian Harl sh<span style="display: none;">.trailing-username</span>(a)<span style="display: none;">leading-domain.</span>tokkee.org
Wed Apr 11 00:25:57 CEST 2007


This option sets the basename of a Perl plugin, i.e. the prefix to its name
when loading the module. It defaults to "Collectd::Plugin".

Signed-off-by: Sebastian Harl <sh.trailing-username(a)leading-domain.tokkee.org>
---
 src/collectd.conf.in |    1 +
 src/perl.c           |   34 +++++++++++++++++++++-------------
 2 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/src/collectd.conf.in b/src/collectd.conf.in
index 3aa1306..67b2bcf 100644
--- a/src/collectd.conf.in
+++ b/src/collectd.conf.in
@@ -148,6 +148,7 @@
 #</Plugin>
 
 #<Plugin perl>
+#	BaseName "Collectd::Plugin"
 #	LoadPlugin foo
 #</Plugin>
 
diff --git a/src/perl.c b/src/perl.c
index 0c5e882..566a62c 100644
--- a/src/perl.c
+++ b/src/perl.c
@@ -83,12 +83,15 @@ typedef struct {
 static const char *config_keys[] =
 {
 	"LoadPlugin",
+	"BaseName",
 	NULL
 };
-static int config_keys_num = 1;
+static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
 
 static PerlInterpreter *perl = NULL;
 
+static char base_name[DATA_MAX_NAME_LEN] = "Collectd::Plugin";
+
 static char *plugin_types[] = { "init", "read", "write", "shutdown" };
 static HV   *plugins[PLUGIN_TYPES];
 static HV   *data_sets;
@@ -506,6 +509,7 @@ static int pplugin_dispatch_values (char *name, HV *values)
 
 	if (NULL != (tmp = Perl_hv_fetch (perl, values, "host", 4, 0))) {
 		strncpy (list.host, SvPV_nolen (*tmp), DATA_MAX_NAME_LEN);
+		list.host[DATA_MAX_NAME_LEN - 1] = '\0';
 	}
 	else {
 		strcpy (list.host, hostname_g);
@@ -615,8 +619,8 @@ static int pplugin_call (int type, char *name, SV *sub, va_list ap)
 
 	/* prevent an endless loop */
 	if (PLUGIN_LOG != type)
-		log_debug ("pplugin_call: executing Collectd::plugin::%s->%s()",
-				name, plugin_types[type]);
+		log_debug ("pplugin_call: executing %s::%s->%s()",
+				base_name, name, plugin_types[type]);
 
 	retvals = Perl_call_sv (perl, sub, G_SCALAR | xflags);
 
@@ -624,8 +628,8 @@ static int pplugin_call (int type, char *name, SV *sub, va_list ap)
 	if (1 > retvals) {
 		if (PLUGIN_LOG != type)
 			log_warn ("pplugin_call: "
-					"Collectd::plugin::%s->%s() returned void - assuming true",
-					name, plugin_types[type]);
+					"%s::%s->%s() returned void - assuming true",
+					base_name, name, plugin_types[type]);
 	}
 	else {
 		SV *tmp = POPs;
@@ -683,22 +687,21 @@ static int pplugin_call_all (int type, ...)
 			if (p->wait_time > 86400)
 				p->wait_time = 86400;
 
-			log_warn ("Collectd::plugin::%s->read() failed. "
-					"Will suspend it for %i seconds.",
-					plugin, p->wait_left);
+			log_warn ("%s::%s->read() failed. Will suspend it for %i seconds.",
+					base_name, plugin, p->wait_left);
 		}
 		else if (PLUGIN_INIT == type) {
 			int i = 0;
 
-			log_err ("Collectd::plugin::%s->init() failed. "
-					"Plugin will be disabled.", plugin, status);
+			log_err ("%s::%s->init() failed. Plugin will be disabled.",
+					base_name, plugin, status);
 
 			for (i = 0; i < PLUGIN_TYPES; ++i)
 				pplugin_unregister (i, plugin);
 		}
 		else if (PLUGIN_LOG != type) {
-			log_warn ("Collectd::plugin::%s->%s() failed with status %i.",
-					plugin, plugin_types[type], status);
+			log_warn ("%s::%s->%s() failed with status %i.",
+					base_name, plugin, plugin_types[type], status);
 		}
 
 		va_end (ap);
@@ -918,9 +921,14 @@ static int perl_config (const char *key, const char *value)
 		log_debug ("perl_config: loading perl plugin \"%s\"", value);
 
 		Perl_load_module (perl, PERL_LOADMOD_NOIMPORT,
-				Perl_newSVpvf (perl, "Collectd::plugin::%s", value),
+				Perl_newSVpvf (perl, "%s::%s", base_name, value),
 				Nullsv);
 	}
+	else if (0 == strcasecmp (key, "BaseName")) {
+		log_debug ("perl_config: Setting plugin basename to \"%s\"", value);
+		strncpy (base_name, value, DATA_MAX_NAME_LEN);
+		base_name[DATA_MAX_NAME_LEN - 1] = '\0';
+	}
 	else {
 		return -1;
 	}
-- 
1.4.4.4

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://mailman.verplant.org/pipermail/collectd/attachments/20070411/b17afbf9/attachment.pgp


More information about the collectd mailing list