28#include "timemory/components/network/backends.hpp"
45 static constexpr size_t data_size = cache::network_stats::data_size;
94 return "network_stats";
100 return "Reports network bytes, packets, errors, dropped";
106 if(_interface.empty())
107 return cache::network_stats{};
109 return cache::network_stats{ _interface };
115 if(_interfaces.empty())
116 return cache::network_stats{};
117 cache::network_stats _data{};
118 for(
const auto& itr : _interfaces)
121 _data += cache::network_stats{ itr };
127: m_interfaces{
std::move(_interface) }
131: m_interfaces{
std::move(_interfaces) }
134inline std::vector<std::string>&
139 static std::vector<std::string> _instance{};
146 auto _update_instance = []() {
148 for(
auto&& itr :
delimit(_value,
" ,\t;"))
150 if(itr !=
"." && itr !=
"..")
151 _instance.emplace_back(std::move(itr));
155 if(_instance.empty())
164 for(
auto&& itr : utility::filesystem::list_directory(
"/sys/class/net"))
166 if(itr !=
"." && itr !=
"..")
167 _instance.emplace_back(std::move(itr));
169 if(_instance.empty())
171 std::stringstream _ss;
172 for(
const auto& itr : _instance)
174 _value = _last = _ss.str().substr(2);
178 else if(_last != _value)
193 _data.get_data().fill(0);
194 return _data.get_data();
197 static auto _data_units = cache::network_stats::data_units();
199 _data.get_data()[i] /= _data_units[i];
200 return _data.get_data();
206 auto&& _get_display = [](
const int64_t& _val,
const std::string& _lbl,
208 std::stringstream ss;
220 auto _disp = cache::network_stats::data_display_units();
221 auto _labels = cache::network_stats::data_labels();
222 std::stringstream ss;
224 ss <<
", " << _get_display(_val.get_data()[i], _labels[i], _disp[i]);
225 return ss.str().substr(2);
234 value =
record(m_interfaces);
238 auto _current =
record(m_interfaces);
239 accum += _current - value;
248 if(m_interfaces.empty())
250 value =
record(m_interfaces);
256 value =
record(m_interfaces) - value;
263 return _data.get_data();
269 return cache::network_stats::data_units();
275 return cache::network_stats::data_labels();
281 return cache::network_stats::data_display_units();
287 return cache::network_stats::data_descriptions();
291network_stats::get_iface_paths(
const std::string& _name)
294 auto itr = _iface_paths.find(_name);
295 if(itr == _iface_paths.end())
298 static const std::string _base =
"/sys/class/net/";
301 _data.at(i) = _base + _name +
"/statistics/" +
302 cache::network_stats::data_labels().at(i);
305 _iface_paths.insert({ _name, _data });
307 itr = _iface_paths.find(_name);
std::bitset< scope_count > data_type
std::unique_lock< mutex_t > auto_lock_t
Unique lock type around mutex_t.
char argparse::argument_parser tim::settings * _settings
tim::mpl::apply< std::string > string
TIMEMORY_SETTINGS_KEY("SUPPRESS_PARSING")) TIMEMORY_SETTINGS_MEMBER_DEF(bool
ContainerT delimit(const std::string &line, const std::string &delimiters="\"',;: ", PredicateT &&predicate=[](const std::string &s) -> std::string { return s;})
arg_result get(size_t _idx, Tp &_value)
static short get_precision()
void set_is_transient(bool v)
bool get_is_transient() const
static fmtflags get_format_flags()
static string_array_type display_unit_array()
static std::string label()
cache::network_stats value_type
network_stats & operator=(const network_stats &)=default
network_stats & operator=(network_stats &&)=default
static string_array_type description_array()
static data_array_type unit_array()
static std::vector< std::string > & get_interfaces()
static std::string description()
std::string get_display() const
static value_type record(const std::string &_interface)
typename cache::network_stats::string_array_type string_array_type
data_array_type get() const
static data_array_type data_array(value_type)
network_stats(network_stats &&)=default
static constexpr size_t data_size
static string_array_type label_array()
network_stats(const network_stats &)=default
typename cache::network_stats::data_type data_array_type
std::unordered_map< std::string, string_array_type > iface_map_type
static settings * instance()