diff --git a/src/v/resource_mgmt/available_memory.cc b/src/v/resource_mgmt/available_memory.cc index e47d6c4aec76..b6cd35120c59 100644 --- a/src/v/resource_mgmt/available_memory.cc +++ b/src/v/resource_mgmt/available_memory.cc @@ -67,7 +67,7 @@ void available_memory::register_metrics() { } auto& m = _metrics.emplace(); - m.groups.add_group( + m.add_group( prometheus_sanitize::metrics_name("memory"), {ss::metrics::make_gauge( "available_memory", diff --git a/src/v/resource_mgmt/available_memory.h b/src/v/resource_mgmt/available_memory.h index 6888ff6a5a84..5fde82134840 100644 --- a/src/v/resource_mgmt/available_memory.h +++ b/src/v/resource_mgmt/available_memory.h @@ -154,7 +154,7 @@ class available_memory final { _local_instance; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) intrusive_list _reporters; - std::optional _metrics; + std::optional _metrics; size_t _lwm; }; diff --git a/src/v/ssx/metrics.h b/src/v/ssx/metrics.h index 4f1d1d0f6b9c..ba94231b0e61 100644 --- a/src/v/ssx/metrics.h +++ b/src/v/ssx/metrics.h @@ -16,6 +16,7 @@ #include #include +#include namespace ssx::metrics { @@ -50,4 +51,30 @@ struct public_metrics_group { } }; +/** + * @brief A class bundling together public and internal metrics. + * + * Intended to replace an ss::metrics::metric_groups instance when + * you want a metric exposed on both the /metrics (aka "internal") + * and /public_metrics (aka "public") metrics endpoint. + */ +class all_metrics_groups { + ss::metrics::metric_groups _public{public_metrics_handle}, _internal; + +public: + /** + * @brief Adds the given metric group to public and internal metrics. + * + * The behavior is same as ss::metrics::metric_groups::add_group but for + * both metric endpoints. + */ + all_metrics_groups& add_group( + const seastar::metrics::group_name_type& name, + const std::initializer_list& l) { + _internal.add_group(name, l); + _public.add_group(name, l); + return *this; + }; +}; + } // namespace ssx::metrics