2 * Copyright (c) 2018 Cisco and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
16 #include "vom/stat_client.hpp"
20 stat_client::stat_data_t::stat_data_t(const stat_segment_data_t& stat_seg_data)
21 : m_name(stat_seg_data.name)
22 , m_type(stat_seg_data.type)
25 case STAT_DIR_TYPE_SCALAR_INDEX:
26 m_scalar_value = stat_seg_data.scalar_value;
28 case STAT_DIR_TYPE_COUNTER_VECTOR_SIMPLE:
29 m_simple_counter_vec = stat_seg_data.simple_counter_vec;
31 case STAT_DIR_TYPE_COUNTER_VECTOR_COMBINED:
32 m_combined_counter_vec = stat_seg_data.combined_counter_vec;
34 case STAT_DIR_TYPE_ERROR_INDEX:
35 m_error_vec = stat_seg_data.error_vector;
37 case STAT_DIR_TYPE_NAME_VECTOR:
39 case STAT_DIR_TYPE_ILLEGAL:
41 case STAT_DIR_TYPE_EMPTY:
47 stat_client::stat_data_t::name() const
52 const stat_directory_type_t&
53 stat_client::stat_data_t::type() const
59 stat_client::stat_data_t::get_stat_segment_scalar_data() const
61 return m_scalar_value;
65 stat_client::stat_data_t::get_stat_segment_error_data() const
71 stat_client::stat_data_t::get_stat_segment_simple_counter_data() const
73 return m_simple_counter_vec;
77 stat_client::stat_data_t::get_stat_segment_combined_counter_data() const
79 return m_combined_counter_vec;
82 stat_client::stat_client(std::string& socket_name)
83 : m_socket_name(socket_name)
85 , m_stat_connect(false)
87 , m_stat_seg_data(nullptr)
90 m_patterns.push_back("/if");
93 stat_client::stat_client(std::vector<std::string>& pattern)
94 : m_socket_name("/run/vpp/stats.sock")
96 , m_stat_connect(false)
98 , m_stat_seg_data(nullptr)
102 stat_client::stat_client(std::string socket_name,
103 std::vector<std::string> patterns)
104 : m_socket_name(socket_name)
105 , m_patterns(patterns)
106 , m_stat_connect(false)
108 , m_stat_seg_data(nullptr)
112 stat_client::stat_client()
113 : m_socket_name("/run/vpp/stats.sock")
115 , m_stat_connect(false)
117 , m_stat_seg_data(nullptr)
120 m_patterns.push_back("/if");
123 stat_client::~stat_client()
125 stat_segment_vec_free(m_counter_vec);
128 stat_segment_disconnect();
131 stat_client::stat_client(const stat_client& o)
132 : m_socket_name(o.m_socket_name)
133 , m_patterns(o.m_patterns)
137 stat_client::connect()
139 if (stat_segment_connect(m_socket_name.c_str()) == 0) {
140 m_stat_connect = true;
143 return m_stat_connect;
147 stat_client::disconnect()
150 stat_segment_disconnect();
151 m_stat_connect = false;
155 stat_client::vec_len(void* vec)
157 return stat_segment_vec_len(vec);
161 stat_client::vec_free(void* vec)
163 stat_segment_vec_free(vec);
169 uint8_t** string_vec = { 0 };
170 for (auto& pattern : m_patterns) {
171 string_vec = stat_segment_string_vector(string_vec, pattern.c_str());
173 m_counter_vec = stat_segment_ls(string_vec);
174 stat_segment_vec_free(string_vec);
177 const stat_client::stat_data_vec_t&
180 stat_segment_data_free(m_stat_seg_data);
181 m_stat_seg_data = NULL;
182 if (m_stat_data.size()) {
185 if (m_stat_connect) {
186 m_stat_seg_data = stat_segment_dump(m_counter_vec);
187 if (!m_stat_seg_data) {
191 for (int i = 0; i < stat_segment_vec_len(m_stat_seg_data); i++) {
192 stat_data_t sd(m_stat_seg_data[i]);
193 m_stat_data.push_back(sd);
199 const stat_client::stat_data_vec_t&
200 stat_client::dump_entry(uint32_t index)
202 stat_segment_data_free(m_stat_seg_data);
203 m_stat_seg_data = NULL;
204 if (m_stat_data.size()) {
207 if (m_stat_connect) {
208 m_stat_seg_data = stat_segment_dump_entry(index);
209 if (!m_stat_seg_data) {
213 for (int i = 0; i < stat_segment_vec_len(m_stat_seg_data); i++) {
214 stat_data_t sd(m_stat_seg_data[i]);
215 m_stat_data.push_back(sd);
222 stat_client::data_free()
224 stat_segment_data_free(m_stat_seg_data);
228 stat_client::heartbeat()
230 return stat_segment_heartbeat();
234 stat_client::index_to_name(uint32_t index)
236 return stat_segment_index_to_name(index);
242 * fd.io coding-style-patch-verification: ON
245 * eval: (c-set-style "mozilla")