stats: fix state counter removal
[vpp.git] / extras / vom / vom / stat_client.cpp
index 6406e21..00751dd 100644 (file)
@@ -32,10 +32,14 @@ stat_client::stat_data_t::stat_data_t(const stat_segment_data_t& stat_seg_data)
       m_combined_counter_vec = stat_seg_data.combined_counter_vec;
       break;
     case STAT_DIR_TYPE_ERROR_INDEX:
-      m_error_value = stat_seg_data.error_value;
+      m_error_vec = stat_seg_data.error_vector;
+      break;
+    case STAT_DIR_TYPE_NAME_VECTOR:
       break;
     case STAT_DIR_TYPE_ILLEGAL:
       break;
+    case STAT_DIR_TYPE_EMPTY:
+      break;
   }
 }
 
@@ -57,10 +61,10 @@ stat_client::stat_data_t::get_stat_segment_scalar_data() const
   return m_scalar_value;
 }
 
-uint64_t
+uint64_t*
 stat_client::stat_data_t::get_stat_segment_error_data() const
 {
-  return m_error_value;
+  return m_error_vec;
 }
 
 uint64_t**
@@ -78,7 +82,7 @@ stat_client::stat_data_t::get_stat_segment_combined_counter_data() const
 stat_client::stat_client(std::string& socket_name)
   : m_socket_name(socket_name)
   , m_patterns()
-  , m_stat_connect(0)
+  , m_stat_connect(false)
   , m_counter_vec()
   , m_stat_seg_data(nullptr)
   , m_stat_data()
@@ -89,28 +93,26 @@ stat_client::stat_client(std::string& socket_name)
 stat_client::stat_client(std::vector<std::string>& pattern)
   : m_socket_name("/run/vpp/stats.sock")
   , m_patterns(pattern)
-  , m_stat_connect(0)
+  , m_stat_connect(false)
   , m_counter_vec()
   , m_stat_seg_data(nullptr)
   , m_stat_data()
-{
-}
+{}
 
 stat_client::stat_client(std::string socket_name,
                          std::vector<std::string> patterns)
   : m_socket_name(socket_name)
   , m_patterns(patterns)
-  , m_stat_connect(0)
+  , m_stat_connect(false)
   , m_counter_vec()
   , m_stat_seg_data(nullptr)
   , m_stat_data()
-{
-}
+{}
 
 stat_client::stat_client()
   : m_socket_name("/run/vpp/stats.sock")
   , m_patterns()
-  , m_stat_connect(0)
+  , m_stat_connect(false)
   , m_counter_vec()
   , m_stat_seg_data(nullptr)
   , m_stat_data()
@@ -129,14 +131,13 @@ stat_client::~stat_client()
 stat_client::stat_client(const stat_client& o)
   : m_socket_name(o.m_socket_name)
   , m_patterns(o.m_patterns)
-{
-}
+{}
 
 int
 stat_client::connect()
 {
   if (stat_segment_connect(m_socket_name.c_str()) == 0) {
-    m_stat_connect = 1;
+    m_stat_connect = true;
     ls();
   }
   return m_stat_connect;
@@ -147,6 +148,7 @@ stat_client::disconnect()
 {
   if (m_stat_connect)
     stat_segment_disconnect();
+  m_stat_connect = false;
 }
 
 int
@@ -176,17 +178,20 @@ const stat_client::stat_data_vec_t&
 stat_client::dump()
 {
   stat_segment_data_free(m_stat_seg_data);
+  m_stat_seg_data = NULL;
   if (m_stat_data.size()) {
     m_stat_data.clear();
   }
-  m_stat_seg_data = stat_segment_dump(m_counter_vec);
-  if (!m_stat_seg_data) {
-    ls();
-    return m_stat_data;
-  }
-  for (int i = 0; i < stat_segment_vec_len(m_stat_seg_data); i++) {
-    stat_data_t sd(m_stat_seg_data[i]);
-    m_stat_data.push_back(sd);
+  if (m_stat_connect) {
+    m_stat_seg_data = stat_segment_dump(m_counter_vec);
+    if (!m_stat_seg_data) {
+      ls();
+      return m_stat_data;
+    }
+    for (int i = 0; i < stat_segment_vec_len(m_stat_seg_data); i++) {
+      stat_data_t sd(m_stat_seg_data[i]);
+      m_stat_data.push_back(sd);
+    }
   }
   return m_stat_data;
 }
@@ -195,17 +200,20 @@ const stat_client::stat_data_vec_t&
 stat_client::dump_entry(uint32_t index)
 {
   stat_segment_data_free(m_stat_seg_data);
+  m_stat_seg_data = NULL;
   if (m_stat_data.size()) {
     m_stat_data.clear();
   }
-  m_stat_seg_data = stat_segment_dump_entry(index);
-  if (!m_stat_seg_data) {
-    ls();
-    return m_stat_data;
-  }
-  for (int i = 0; i < stat_segment_vec_len(m_stat_seg_data); i++) {
-    stat_data_t sd(m_stat_seg_data[i]);
-    m_stat_data.push_back(sd);
+  if (m_stat_connect) {
+    m_stat_seg_data = stat_segment_dump_entry(index);
+    if (!m_stat_seg_data) {
+      ls();
+      return m_stat_data;
+    }
+    for (int i = 0; i < stat_segment_vec_len(m_stat_seg_data); i++) {
+      stat_data_t sd(m_stat_seg_data[i]);
+      m_stat_data.push_back(sd);
+    }
   }
   return m_stat_data;
 }