#include "collectd.h"
#include "common.h"
#include "plugin.h"
+#include "utils_ignorelist.h"
#include <pthread.h>
static int c_ipmi_active = 0;
static pthread_t thread_id = (pthread_t) 0;
+static const char *config_keys[] =
+{
+ "Sensor",
+ "IgnoreSelected"
+};
+static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
+
+static ignorelist_t *ignorelist = NULL;
+
/*
* Misc private functions
*/
if (IPMI_IS_OS_ERR (status))
{
- sstrerror_r (IPMI_GET_OS_ERR (status), errbuf, sizeof (errbuf));
+ sstrerror (IPMI_GET_OS_ERR (status), errbuf, sizeof (errbuf));
}
else if (IPMI_IS_IPMI_ERR (status))
{
return;
}
+ /* Both `ignorelist' and `plugin_instance' may be NULL. */
+ if (ignorelist_match (ignorelist, sensor_name_ptr) != 0)
+ {
+ sensor_list_remove (sensor);
+ return;
+ }
+
/* FIXME: Use rate unit or base unit to scale the value */
sensor_type = ipmi_sensor_get_sensor_type (sensor);
sstrncpy (vl.host, hostname_g, sizeof (vl.host));
sstrncpy (vl.plugin, "ipmi", sizeof (vl.plugin));
+ sstrncpy (vl.type, type, sizeof (vl.type));
sstrncpy (vl.type_instance, sensor_name_ptr, sizeof (vl.type_instance));
- plugin_dispatch_values (type, &vl);
+ plugin_dispatch_values (&vl);
} /* void sensor_read_handler */
static int sensor_list_add (ipmi_sensor_t *sensor)
return ((void *) 0);
} /* void *thread_main */
+static int c_ipmi_config (const char *key, const char *value)
+{
+ if (ignorelist == NULL)
+ ignorelist = ignorelist_create (/* invert = */ 1);
+ if (ignorelist == NULL)
+ return (1);
+
+ if (strcasecmp ("Sensor", key) == 0)
+ {
+ ignorelist_add (ignorelist, value);
+ }
+ else if (strcasecmp ("IgnoreSelected", key) == 0)
+ {
+ int invert = 1;
+ if ((strcasecmp ("True", value) == 0)
+ || (strcasecmp ("Yes", value) == 0)
+ || (strcasecmp ("On", value) == 0))
+ invert = 0;
+ ignorelist_set_invert (ignorelist, invert);
+ }
+ else
+ {
+ return (-1);
+ }
+
+ return (0);
+} /* int c_ipmi_config */
+
static int c_ipmi_init (void)
{
int status;
void module_register (void)
{
+ plugin_register_config ("ipmi", c_ipmi_config,
+ config_keys, config_keys_num);
plugin_register_init ("ipmi", c_ipmi_init);
plugin_register_read ("ipmi", c_ipmi_read);
plugin_register_shutdown ("ipmi", c_ipmi_shutdown);