From 3b3b7e5b98de86da500329e0a8c84debc51d8b4d Mon Sep 17 00:00:00 2001 From: Sebastian Harl Date: Wed, 11 Apr 2007 00:25:57 +0200 Subject: [PATCH] perl plugin: Added "BaseName" config option. 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 --- 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 3aa13065..67b2bcf4 100644 --- a/src/collectd.conf.in +++ b/src/collectd.conf.in @@ -148,6 +148,7 @@ # # +# BaseName "Collectd::Plugin" # LoadPlugin foo # diff --git a/src/perl.c b/src/perl.c index 0c5e8829..566a62c7 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; } -- 2.30.2