Skip to content

Commit

Permalink
add test
Browse files Browse the repository at this point in the history
  • Loading branch information
qicosmos committed Aug 9, 2024
1 parent 5a720d3 commit 88b8860
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 0 deletions.
12 changes: 12 additions & 0 deletions include/ylt/metric/metric_manager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,10 @@ class static_metric_manager {
return metrics;
}

std::string serialize(const std::vector<std::shared_ptr<metric_t>>& metrics) {
return manager_helper::serialize(metrics);
}

std::string serialize_static() {
return manager_helper::serialize(collect());
}
Expand All @@ -215,6 +219,8 @@ class static_metric_manager {
#endif
template <typename T>
std::shared_ptr<T> get_metric_static(const std::string& name) {
static_assert(std::is_base_of_v<static_metric, T>,
"must be dynamic metric");
auto it = metric_map_.find(name);
if (it == metric_map_.end()) {
return nullptr;
Expand Down Expand Up @@ -312,6 +318,10 @@ class dynamic_metric_manager {
return manager_helper::serialize(collect());
}

std::string serialize(const std::vector<std::shared_ptr<metric_t>>& metrics) {
return manager_helper::serialize(metrics);
}

#ifdef CINATRA_ENABLE_METRIC_JSON
std::string serialize_to_json_dynamic() {
return manager_helper::serialize_to_json(collect());
Expand Down Expand Up @@ -409,6 +419,8 @@ class dynamic_metric_manager {

template <typename T>
std::shared_ptr<T> get_metric_dynamic(const std::string& name) {
static_assert(std::is_base_of_v<dynamic_metric, T>,
"must be dynamic metric");
auto map = metric_map();
auto it = map.find(name);
if (it == map.end()) {
Expand Down
66 changes: 66 additions & 0 deletions src/metric/tests/test_metric.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1408,6 +1408,72 @@ TEST_CASE("test remove dynamic metric") {
CHECK(test_metric_manager::instance().metric_count() == 2);
}

TEST_CASE("testFilterMetricsDynamicWithMultiLabel") {
using metric_mgr = dynamic_metric_manager<test_id_t<31>>;
auto [ec, c] =
metric_mgr::instance().create_metric_dynamic<dynamic_counter_t>(
"test_dynamic_counter", "",
std::array<std::string, 2>{"method", "bucket"});
auto [ec2, c2] =
metric_mgr::instance().create_metric_dynamic<dynamic_counter_t>(
"test_dynamic_counter2", "",
std::array<std::string, 2>{"url", "bucket"});
c->inc({"GET", "bucket1"});
c->inc({"POST", "bucket2"});
c2->inc({"/", "bucket1"});
c2->inc({"/test", "bucket3"});

auto counter = metric_mgr::instance().get_metric_dynamic<dynamic_counter_t>(
"test_dynamic_counter");
CHECK(counter != nullptr);

metric_filter_options options;
options.name_regex = ".*counter.*";
{
auto metrics = metric_mgr::instance().filter_metrics_dynamic(options);
CHECK(metrics.size() == 2);

auto s = metric_mgr::instance().serialize(metrics);
CHECK(s.find("test_dynamic_counter") != std::string::npos);
std::cout << s << "\n";
}

options.label_regex = "bucket";
{
auto metrics = metric_mgr::instance().filter_metrics_dynamic(options);
CHECK(metrics.size() == 2);
auto s = metric_mgr::instance().serialize(metrics);
CHECK(s.find("test_dynamic_counter2") != std::string::npos);
std::cout << s << "\n";
}

options.label_regex = "method";
{
auto metrics = metric_mgr::instance().filter_metrics_dynamic(options);
CHECK(metrics.size() == 1);
auto s = metric_mgr::instance().serialize(metrics);
CHECK(s.find("test_dynamic_counter") != std::string::npos);
std::cout << s << "\n";
}

options.label_regex = "url";
{
auto metrics = metric_mgr::instance().filter_metrics_dynamic(options);
CHECK(metrics.size() == 1);
auto s = metric_mgr::instance().serialize(metrics);
CHECK(s.find("test_dynamic_counter2") != std::string::npos);
std::cout << s << "\n";
}

// black
options.label_regex = ".*bucket.*";
options.is_white = false;
{
auto metrics = metric_mgr::instance().filter_metrics_dynamic(options);
CHECK(metrics.size() == 0);
}
}

DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4007)
int main(int argc, char** argv) { return doctest::Context(argc, argv).run(); }
DOCTEST_MSVC_SUPPRESS_WARNING_POP

0 comments on commit 88b8860

Please sign in to comment.