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()
22 , m_type(STAT_DIR_TYPE_ILLEGAL)
26 stat_client::stat_data_t::stat_data_t(stat_segment_data_t* stat_seg_data)
27 : m_name(stat_seg_data->name)
28 , m_type(stat_seg_data->type)
31 case STAT_DIR_TYPE_SCALAR_INDEX:
32 m_scalar_value = stat_seg_data->scalar_value;
34 case STAT_DIR_TYPE_COUNTER_VECTOR_SIMPLE:
35 m_simple_counter_vec = stat_seg_data->simple_counter_vec;
37 case STAT_DIR_TYPE_COUNTER_VECTOR_COMBINED:
38 m_combined_counter_vec =
39 reinterpret_cast<counter_t**>(stat_seg_data->combined_counter_vec);
41 case STAT_DIR_TYPE_ERROR_INDEX:
42 m_error_Value = stat_seg_data->error_value;
44 case STAT_DIR_TYPE_ILLEGAL:
50 stat_client::stat_data_t::name() const
55 const stat_directory_type_t&
56 stat_client::stat_data_t::type() const
62 stat_client::stat_data_t::get_stat_segment_scalar_data()
64 return m_scalar_value;
67 stat_client::stat_data_t::get_stat_segment_error_data()
72 stat_client::stat_data_t::get_stat_segment_simple_counter_data()
74 return m_simple_counter_vec;
77 stat_client::stat_data_t::get_stat_segment_combined_counter_data()
79 return m_combined_counter_vec;
82 stat_client::stat_client(std::string& socket_name)
83 : m_socket_name(socket_name)
87 m_patterns.push_back("/if");
90 stat_client::stat_client(std::vector<std::string>& pattern)
91 : m_socket_name("/run/vpp/stats.sock")
97 stat_client::stat_client(std::string socket_name,
98 std::vector<std::string> patterns)
99 : m_socket_name(socket_name)
100 , m_patterns(patterns)
105 stat_client::stat_client()
106 : m_socket_name("/run/vpp/stats.sock")
110 m_patterns.push_back("/if");
113 stat_client::~stat_client()
115 stat_segment_vec_free(m_counter_vec);
118 stat_segment_disconnect();
121 stat_client::stat_client(const stat_client& o)
122 : m_socket_name(o.m_socket_name)
123 , m_patterns(o.m_patterns)
128 stat_client::connect()
130 if (stat_segment_connect(m_socket_name.c_str()) == 0)
132 return m_stat_connect;
136 stat_client::disconnect()
139 stat_segment_disconnect();
143 stat_client::vec_len(void* vec)
145 return stat_segment_vec_len(vec);
149 stat_client::vec_free(void* vec)
151 stat_segment_vec_free(vec);
157 uint8_t** string_vec = { 0 };
158 for (auto& pattern : m_patterns) {
159 string_vec = stat_segment_string_vector(string_vec, pattern.c_str());
161 m_counter_vec = stat_segment_ls(string_vec);
162 stat_segment_vec_free(string_vec);
165 const stat_client::stat_data_vec_t&
168 stat_segment_data_t* ssd;
169 stat_segment_data_free(m_stat_seg_data);
170 if (m_stat_data.size()) {
173 ssd = stat_segment_dump(m_counter_vec);
178 m_stat_seg_data = ssd;
179 for (int i = 0; i < stat_segment_vec_len(ssd); i++) {
180 stat_data_t sd(&ssd[i]);
181 m_stat_data.push_back(sd);
186 const stat_client::stat_data_vec_t&
187 stat_client::dump_entry(uint32_t index)
189 stat_segment_data_t* ssd;
190 stat_segment_data_free(m_stat_seg_data);
191 if (m_stat_data.size()) {
194 ssd = stat_segment_dump_entry(index);
199 m_stat_seg_data = ssd;
200 for (int i = 0; i < stat_segment_vec_len(ssd); i++) {
201 stat_data_t sd(&ssd[i]);
202 m_stat_data.push_back(sd);
208 stat_client::data_free()
210 stat_segment_data_free(m_stat_seg_data);
214 stat_client::heartbeat()
216 return stat_segment_heartbeat();
220 stat_client::index_to_name(uint32_t index)
222 return stat_segment_index_to_name(index);
228 * fd.io coding-style-patch-verification: ON
231 * eval: (c-set-style "mozilla")