VOM: stats fixes
[vpp.git] / extras / vom / vom / stat_reader.cpp
index 931d088..82e09ae 100644 (file)
@@ -61,7 +61,7 @@ stat_reader::unregisters(const interface& intf)
 void
 stat_reader::read()
 {
-  stat_client::stat_data_vec_t sd = m_client.dump();
+  const stat_client::stat_data_vec_t& sd = m_client.dump();
   for (auto& sde : sd) {
     std::string name;
 
@@ -74,28 +74,29 @@ stat_reader::read()
       case STAT_DIR_TYPE_COUNTER_VECTOR_SIMPLE:
       case STAT_DIR_TYPE_ERROR_INDEX:
       case STAT_DIR_TYPE_SCALAR_INDEX:
+      case STAT_DIR_TYPE_ILLEGAL:
         break;
 
-      case STAT_DIR_TYPE_COUNTER_VECTOR_COMBINED:
+      case STAT_DIR_TYPE_COUNTER_VECTOR_COMBINED: {
+        vlib_counter_t** data;
+
+        data = sde.get_stat_segment_combined_counter_data();
+
         if (name.find("/if") != std::string::npos)
           name.erase(0, 4);
         for (auto& i : m_stat_itf_indexes) {
-          counter_t count = {.packets = 0, .bytes = 0 };
-          for (int k = 0; k < m_client.vec_len(
-                                sde.get_stat_segment_combined_counter_data());
-               k++) {
-            count.packets +=
-              sde.get_stat_segment_combined_counter_data()[k][i].packets;
-            count.bytes +=
-              sde.get_stat_segment_combined_counter_data()[k][i].bytes;
+          counter_t count;
+
+          for (int k = 0; k < m_client.vec_len(data); k++) {
+            count.packets += data[k][i].packets;
+            count.bytes += data[k][i].bytes;
           }
           std::shared_ptr<interface> itf = interface::find(i);
           if (itf)
             itf->set(count, name);
         }
         break;
-
-      default:;
+      }
     }
   }