const char *dir;
char filename[BUFSIZE] = "";
char typename[BUFSIZE];
- int typename_len;
int ret;
struct stat statbuf;
struct dirent *de;
WARNING ("plugin_load: Filename too long: \"%s.so\"", plugin_name);
return (-1);
}
- typename_len = strlen (typename);
if ((dh = opendir (dir)) == NULL)
{
while ((de = readdir (dh)) != NULL)
{
- if (strncasecmp (de->d_name, typename, typename_len))
+ if (strcasecmp (de->d_name, typename))
continue;
status = ssnprintf (filename, sizeof (filename),
__attribute__((sentinel))
int plugin_dispatch_multivalue (value_list_t const *template, /* {{{ */
- _Bool store_percentage, ...)
+ _Bool store_percentage, int store_type, ...)
{
value_list_t *vl;
int failed = 0;
assert (template->values_len == 1);
- va_start (ap, store_percentage);
- while (42)
- {
- char const *name;
- gauge_t value;
+ /* Calculate sum for Gauge to calculate percent if needed */
+ if (DS_TYPE_GAUGE == store_type) {
+ va_start (ap, store_type);
+ while (42)
+ {
+ char const *name;
+ gauge_t value;
- name = va_arg (ap, char const *);
- if (name == NULL)
- break;
+ name = va_arg (ap, char const *);
+ if (name == NULL)
+ break;
- value = va_arg (ap, gauge_t);
- if (!isnan (value))
- sum += value;
+ value = va_arg (ap, gauge_t);
+ if (!isnan (value))
+ sum += value;
+ }
+ va_end (ap);
}
- va_end (ap);
+
vl = plugin_value_list_clone (template);
/* plugin_value_list_clone makes sure vl->time is set to non-zero. */
if (store_percentage)
sstrncpy (vl->type, "percent", sizeof (vl->type));
- va_start (ap, store_percentage);
+ va_start (ap, store_type);
while (42)
{
char const *name;
sstrncpy (vl->type_instance, name, sizeof (vl->type_instance));
/* Set the value. */
- vl->values[0].gauge = va_arg (ap, gauge_t);
- if (store_percentage)
- vl->values[0].gauge *= 100.0 / sum;
+ switch (store_type)
+ {
+ case DS_TYPE_GAUGE:
+ vl->values[0].gauge = va_arg (ap, gauge_t);
+ if (store_percentage)
+ vl->values[0].gauge *= 100.0 / sum;
+ break;
+ case DS_TYPE_ABSOLUTE:
+ vl->values[0].absolute = va_arg (ap, absolute_t);
+ break;
+ case DS_TYPE_COUNTER:
+ vl->values[0].counter = va_arg (ap, counter_t);
+ break;
+ case DS_TYPE_DERIVE:
+ vl->values[0].derive = va_arg (ap, derive_t);
+ break;
+ default:
+ ERROR ("plugin_dispatch_multivalue: given store_type is incorrect.");
+ failed++;
+ }
+
status = plugin_write_enqueue (vl);
if (status != 0)