From 9ea0141415c6ebab78a2dacff5c88f0912bf742b Mon Sep 17 00:00:00 2001 From: qicosmos Date: Tue, 30 Jul 2024 17:02:31 +0800 Subject: [PATCH] fix --- include/ylt/metric/metric.hpp | 28 ++++++++++++++++------------ src/metric/tests/test_metric.cpp | 16 +++++++++++++--- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/include/ylt/metric/metric.hpp b/include/ylt/metric/metric.hpp index bfd3de1d7..87c637deb 100644 --- a/include/ylt/metric/metric.hpp +++ b/include/ylt/metric/metric.hpp @@ -279,7 +279,7 @@ struct metric_manager_t { } auto lock = get_lock(); for (auto& name : names) { - metric_map_.erase(name); + metric_map_->erase(name); } } @@ -290,7 +290,7 @@ struct metric_manager_t { } auto lock = get_lock(); for (auto& metric : metrics) { - metric_map_.erase(std::string(metric->name())); + metric_map_->erase(std::string(metric->name())); } } @@ -532,7 +532,11 @@ struct metric_manager_t { << g_user_metric_count; return false; } - bool r = metric_map_.emplace(name, std::move(metric)).second; + if (metric_map_ == nullptr) { + metric_map_ = std::make_shared< + std::unordered_map>>(); + } + bool r = metric_map_->emplace(name, std::move(metric)).second; if (!r) { CINATRA_LOG_ERROR << "duplicate registered metric name: " << name; } @@ -542,19 +546,19 @@ struct metric_manager_t { template static size_t remove_metric_impl(const std::string& name) { auto lock = get_lock(); - return metric_map_.erase(name); + return metric_map_->erase(name); } template static auto metric_map_impl() { auto lock = get_lock(); - return metric_map_; + return *metric_map_; } template static size_t metric_count_impl() { auto lock = get_lock(); - return metric_map_.size(); + return metric_map_->size(); } template @@ -562,7 +566,7 @@ struct metric_manager_t { std::vector keys; { auto lock = get_lock(); - for (auto& pair : metric_map_) { + for (auto& pair : *metric_map_) { keys.push_back(pair.first); } } @@ -573,8 +577,8 @@ struct metric_manager_t { template static std::shared_ptr get_metric_impl(const std::string& name) { auto lock = get_lock(); - auto it = metric_map_.find(name); - if (it == metric_map_.end()) { + auto it = metric_map_->find(name); + if (it == metric_map_->end()) { return nullptr; } return it->second; @@ -585,7 +589,7 @@ struct metric_manager_t { std::vector> metrics; { auto lock = get_lock(); - for (auto& pair : metric_map_) { + for (auto& pair : *metric_map_) { metrics.push_back(pair.second); } } @@ -653,8 +657,8 @@ struct metric_manager_t { } static inline std::mutex mtx_; - static inline std::unordered_map> - metric_map_; + static inline auto metric_map_ = std::make_shared< + std::unordered_map>>(); static inline null_mutex_t null_mtx_; static inline std::atomic_bool need_lock_ = true; diff --git a/src/metric/tests/test_metric.cpp b/src/metric/tests/test_metric.cpp index 07cbf68c6..55a6488ef 100644 --- a/src/metric/tests/test_metric.cpp +++ b/src/metric/tests/test_metric.cpp @@ -7,7 +7,20 @@ using namespace ylt; using namespace ylt::metric; +template +struct test_id_t {}; + +using my_metric_mgr = metric_manager_t>; + +auto g_counter = my_metric_mgr::create_metric_dynamic("test1", ""); + TEST_CASE("test no lable") { + { + g_counter->inc(); + g_counter->inc(); + CHECK(g_counter->value() == 2); + } + { gauge_t g{"test_gauge", "help"}; g.inc(); @@ -303,9 +316,6 @@ TEST_CASE("test register metric") { } } -template -struct test_id_t {}; - TEST_CASE("test remove metric and serialize metrics") { using metric_mgr = metric_manager_t>; metric_mgr::create_metric_dynamic("test_counter", "");