Merge pull request #2199 from jaroug/support_attributes_kairosdb
[collectd.git] / src / virt.c
index 5168299..e95a31b 100644 (file)
@@ -414,7 +414,7 @@ static void memory_stats_submit(gauge_t value, virDomainPtr dom,
                                "minor_fault",    "unused",   "available",
                                "actual_balloon", "rss"};
 
-  if ((tag_index < 0) || (tag_index >= STATIC_ARRAY_SIZE(tags))) {
+  if ((tag_index < 0) || (tag_index >= (int)STATIC_ARRAY_SIZE(tags))) {
     ERROR("virt plugin: Array index out of bounds: tag_index = %d", tag_index);
     return;
   }
@@ -824,11 +824,6 @@ static int lv_read(user_data_t *ud) {
       continue;
     }
 
-    if (info.di.state != VIR_DOMAIN_RUNNING) {
-      /* only gather stats for running domains */
-      continue;
-    }
-
     pcpu_submit(state->domains[i], &info);
     cpu_submit(info.di.cpuTime, state->domains[i], "virt_cpu_total");
     memory_submit((gauge_t)info.di.memory * 1024, state->domains[i]);
@@ -1129,6 +1124,8 @@ static int refresh_lists(struct lv_read_instance *inst) {
       xmlXPathContextPtr xpath_ctx = NULL;
       xmlXPathObjectPtr xpath_obj = NULL;
       char tag[PARTITION_TAG_MAX_LEN] = {'\0'};
+      virDomainInfo info;
+      int status;
 
       dom = virDomainLookupByID(conn, domids[i]);
       if (dom == NULL) {
@@ -1143,6 +1140,18 @@ static int refresh_lists(struct lv_read_instance *inst) {
         goto cont;
       }
 
+      status = virDomainGetInfo(dom, &info);
+      if (status != 0) {
+        ERROR(PLUGIN_NAME " plugin: virDomainGetInfo failed with status %i.",
+              status);
+        continue;
+      }
+
+      if (info.state != VIR_DOMAIN_RUNNING) {
+        DEBUG(PLUGIN_NAME " plugin: skipping inactive domain %s", name);
+        continue;
+      }
+
       if (il_domains && ignorelist_match(il_domains, name) != 0)
         goto cont;