From: Deyan Chepishev Date: Fri, 28 Oct 2016 06:40:24 +0000 (+0300) Subject: plugin virt, collectd.conf.in, collectd.conf.pod eddited to be according to comments... X-Git-Tag: collectd-5.7.0~43^2~5 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=946aff045b9e996c0ef0a4887660943f442c87c5;p=collectd.git plugin virt, collectd.conf.in, collectd.conf.pod eddited to be according to comments from collectd members --- diff --git a/src/collectd.conf.in b/src/collectd.conf.in index 821d0fff..bbe7b186 100644 --- a/src/collectd.conf.in +++ b/src/collectd.conf.in @@ -1412,7 +1412,7 @@ # RefreshInterval 60 # Domain "name" # BlockDevice "name:device" -# BlockDeviceFormat dev +# BlockDeviceFormat target # BlockDeviceFormatBasename false # InterfaceDevice "name:device" # IgnoreSelected false diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index 69e716be..64be99e2 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -7773,9 +7773,7 @@ option is set to 0, refreshing is disabled completely. =item B I -=item B B|B - -=item B B|B +=item B B|B =item B I @@ -7802,9 +7800,9 @@ Example: Ignore all I devices on any domain, but other block devices (eg. I) will be collected. -If I is set to B, then the device names will be the ones +If I is set to B, then the device names will be the ones in the I node for the device in the XML definition of the domain. The -default is B. This is the behavior before adding the option. +default is B. This is the behavior before adding the option. If I is set to B, then the device names will be the ones in the I node for the device in the XML definition of the domain. @@ -7823,18 +7821,20 @@ If the domain XML have the following device defined: setting - BlockDeviceFormat dev + BlockDeviceFormat target -will name the device in the graph as sda +will name the device in the graph as C setting BlockDeviceFormat source -will name the device in the graph as var_lib_libvirt_images_image1.qcow2 +will name the device in the graph as C These names will also be part of the RRD filename. +=item B B|B + I - this option is honored if and only if option I is set to B. If set to B then only the last part of the path will be used for device name and naming the @@ -7842,12 +7842,12 @@ RRD file. Example: -if the device path (source tag) is: /var/lib/libvirt/images/image1.qcow2 +if the device path (source tag) is: C setting: BlockDeviceFormatBasename true -will set the device name to: image1.qcow2 +will set the device name to: C =item B B diff --git a/src/virt.c b/src/virt.c index e32150af..416383f3 100644 --- a/src/virt.c +++ b/src/virt.c @@ -32,6 +32,7 @@ #include #include #include +#include /* Plugin name */ #define PLUGIN_NAME "virt" @@ -135,7 +136,7 @@ static enum plginst_field plugin_instance_format[PLGINST_MAX_FIELDS] = /* BlockDeviceFormat */ enum bd_field { - dev, + target, source }; @@ -147,8 +148,8 @@ enum if_field { }; /* BlockDeviceFormatBasename */ -char *blockdevice_format_basename="false"; -static enum bd_field blockdevice_format = dev; +_Bool blockdevice_format_basename = false; +static enum bd_field blockdevice_format = target; static enum if_field interface_format = if_name; /* Time that we last refreshed. */ @@ -352,8 +353,8 @@ lv_config (const char *key, const char *value) } if (strcasecmp (key, "BlockDeviceFormat") == 0) { - if (strcasecmp (value, "dev") == 0) - blockdevice_format = dev; + if (strcasecmp (value, "target") == 0) + blockdevice_format = target; else if (strcasecmp (value, "source") == 0) blockdevice_format = source; else { @@ -364,9 +365,9 @@ lv_config (const char *key, const char *value) } if (strcasecmp (key, "BlockDeviceFormatBasename") == 0) { if (strcasecmp (value, "true") == 0) - blockdevice_format_basename = "true"; + blockdevice_format_basename = true; else if (strcasecmp (value, "false") == 0) - blockdevice_format_basename = "false"; + blockdevice_format_basename = false; else { ERROR (PLUGIN_NAME " plugin: unknown BlockDeviceFormatBasename: %s", value); return -1; @@ -613,23 +614,26 @@ lv_read (void) &stats, sizeof stats) != 0) continue; - char *new_path=NULL; - if( 0==strcasecmp("true", blockdevice_format_basename) && source==blockdevice_format){ //valid only if we use source (full path to the device) - new_path=strdup(basename(block_devices[i].path)); - }else{ - new_path=strdup(block_devices[i].path); + char *type_instance = NULL; + if( blockdevice_format_basename && blockdevice_format == source ) //valid only if we use "source" (full path to the device) + { + type_instance = strdup(basename(block_devices[i].path)); + } + else + { + type_instance = strdup(block_devices[i].path); } if ((stats.rd_req != -1) && (stats.wr_req != -1)) submit_derive2 ("disk_ops", (derive_t) stats.rd_req, (derive_t) stats.wr_req, - block_devices[i].dom, new_path); + block_devices[i].dom, type_instance); if ((stats.rd_bytes != -1) && (stats.wr_bytes != -1)) submit_derive2 ("disk_octets", (derive_t) stats.rd_bytes, (derive_t) stats.wr_bytes, - block_devices[i].dom, new_path); + block_devices[i].dom, type_instance); - free(new_path); + sfree(type_instance); } /* for (nr_block_devices) */ /* Get interface stats for each domain. */ @@ -758,17 +762,12 @@ refresh_lists (void) xpath_ctx = xmlXPathNewContext (xml_doc); /* Block devices. */ - char * bd_xmlpath=NULL; - if( source == blockdevice_format ){ - bd_xmlpath="/domain/devices/disk/source[@dev]"; - }else{ - if( dev == blockdevice_format ){ - bd_xmlpath="/domain/devices/disk/target[@dev]"; - } + char * bd_xmlpath = "/domain/devices/disk/target[@dev]"; //the default behavior + if( blockdevice_format == source ) + { + bd_xmlpath = "/domain/devices/disk/source[@dev]"; } - xpath_obj = xmlXPathEval - ((xmlChar *) bd_xmlpath, - xpath_ctx); + xpath_obj = xmlXPathEval ((xmlChar *) bd_xmlpath, xpath_ctx); if (xpath_obj == NULL || xpath_obj->type != XPATH_NODESET || xpath_obj->nodesetval == NULL)