25 #include <seastar/util/modules.hh>
26 #include <seastar/core/sharded.hh>
27 #ifndef SEASTAR_MODULE
28 #include <unordered_map>
29 #include <boost/functional/hash.hpp>
45 using labels_type = std::map<sstring, sstring>;
53 struct hash<
seastar::metrics::impl::labels_type> {
54 using argument_type = seastar::metrics::impl::labels_type;
55 using result_type = ::std::size_t;
56 result_type operator()(argument_type
const& s)
const {
59 boost::hash_combine(h, std::hash<seastar::sstring>{}(i.second));
71 struct relabel_config;
86 size_t metrics_relabeled_due_to_collision;
108 labels_type labels = {})
109 : _group(std::move(group)), _name(
110 std::move(name)), _labels(labels) {
125 return _labels.at(shard_label.
name());
130 const labels_type& labels()
const {
133 labels_type& labels() {
136 sstring full_name()
const;
141 auto as_tuple()
const {
142 return std::tie(group_name(), instance_id(), name(), labels());
155 struct hash<
seastar::metrics::impl::metric_id>
158 typedef ::std::size_t result_type;
161 result_type
const h1 ( std::hash<seastar::sstring>{}(s.group_name()) );
162 result_type
const h2 ( std::hash<seastar::sstring>{}(s.instance_id()) );
163 return h1 ^ (h2 << 1);
184 std::vector<std::string> aggregate_labels;
193 labels_type original_labels;
199 using metrics_registration = std::vector<metric_id>;
202 metrics_registration _registration;
225 bool is_enabled()
const {
226 return _info.enabled;
229 void set_enabled(
bool b) {
233 _info.should_skip_when_empty = skip;
245 const metric_function& get_function()
const {
251 using metric_instances = std::map<labels_type, register_ref>;
254 metric_instances _instances;
257 using iterator = metric_instances::iterator;
258 using const_iterator = metric_instances::const_iterator;
262 metric_family(
const metric_instances& instances) : _instances(instances) {
268 metric_family(metric_instances&& instances) : _instances(std::move(instances)) {
272 return _instances[l];
276 return _instances.at(l);
287 iterator find(
const labels_type& l) {
288 return _instances.find(l);
291 const_iterator find(
const labels_type& l)
const {
292 return _instances.find(l);
296 return _instances.begin();
299 const_iterator begin()
const {
300 return _instances.cbegin();
304 return _instances.end();
308 return _instances.empty();
311 iterator erase(const_iterator position) {
312 return _instances.erase(position);
315 const_iterator end()
const {
316 return _instances.cend();
319 uint32_t size()
const {
320 return _instances.size();
325 using value_map = std::map<sstring, metric_family>;
327 using metric_metadata_fifo = std::deque<metric_info>;
338 metric_metadata_fifo metrics;
341 using value_vector = std::vector<metric_value>;
342 using metric_metadata = std::vector<metric_family_metadata>;
343 using metric_values = std::deque<value_vector>;
347 metric_values values;
355 value_map _value_map;
359 std::set<sstring> _labels;
360 std::vector<std::deque<metric_function>> _current_metrics;
361 std::vector<relabel_config> _relabel_configs;
363 value_map& get_value_map() {
367 const value_map& get_value_map()
const {
372 void remove_registration(
const metric_id&
id);
374 return make_ready_future<>();
376 const config& get_config()
const {
379 void set_config(
const config& c) {
385 std::vector<std::deque<metric_function>>& functions();
387 void update_metrics_if_needed();
393 const std::set<sstring>& get_labels()
const noexcept {
399 const std::vector<relabel_config>& get_relabel_configs()
const noexcept {
400 return _relabel_configs;
404 const value_map& get_value_map();
411 void unregister_metric(
const metric_id &
id);
488 const std::vector<relabel_config>& get_relabel_configs();
Definition: sharded.hh:845
Human-readable description of a metric/group.
Definition: metrics.hh:134
Definition: metrics_api.hh:253
Definition: metrics.hh:399
Definition: metrics_api.hh:201
Definition: metrics_api.hh:104
A helper class that used to return metrics value.
Definition: metrics.hh:295
Definition: metrics_api.hh:215
const sstring & name() const
returns the label name
Definition: metrics.hh:249
Definition: metrics_registration.hh:67
Definition: program-options.hh:290
sstring metric_type_def
Definition: metrics.hh:114
sstring metric_name_type
Definition: metrics.hh:115
sstring instance_id_type
Definition: metrics.hh:116
header for metrics creation.
std::unique_ptr< metric_groups_def > create_metric_groups()
initialize metric group
holds the implementation parts of the metrics layer, do not use directly.
future< metric_relabeling_result > set_relabel_configs(const std::vector< relabel_config > &relabel_configs)
Perform relabeling and operation on metrics dynamically.
sstring group_name_type
Definition: metrics_registration.hh:64
future configure(const options &opts)
set the metrics configuration
result of metric relabeling
Definition: metrics_api.hh:85
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
Definition: metrics_api.hh:350
holds metadata information of a metric family
Definition: metrics_api.hh:179
holds metric metadata
Definition: metrics_api.hh:191
Definition: metrics.hh:370
Definition: metrics_api.hh:345
Metrics configuration options.
Definition: metrics_api.hh:424
program_options::value< std::string > metrics_hostname
The hostname used by the metrics.
Definition: metrics_api.hh:428