| 56 | }; |
| 57 | |
| 58 | TEST(PrometheusMetrics, sanity) { |
| 59 | brpc::Server server; |
| 60 | DummyEchoServiceImpl echo_svc; |
| 61 | ASSERT_EQ(0, server.AddService(&echo_svc, brpc::SERVER_DOESNT_OWN_SERVICE)); |
| 62 | ASSERT_EQ(0, server.Start("127.0.0.1:8614", NULL)); |
| 63 | |
| 64 | const std::list<std::string> labels = {"label1", "label2"}; |
| 65 | bvar::MultiDimension<bvar::Adder<uint32_t> > my_madder("madder", labels); |
| 66 | bvar::Adder<uint32_t>* my_adder1 = my_madder.get_stats({"val1", "val2"}); |
| 67 | ASSERT_TRUE(my_adder1); |
| 68 | *my_adder1 << 1 << 2; |
| 69 | bvar::Adder<uint32_t>* my_adder2 = my_madder.get_stats({"val2", "val3"}); |
| 70 | ASSERT_TRUE(my_adder1); |
| 71 | *my_adder2 << 3 << 4; |
| 72 | |
| 73 | bvar::MultiDimension<bvar::LatencyRecorder > my_mlat("mlat", labels); |
| 74 | bvar::LatencyRecorder* my_lat1 = my_mlat.get_stats({"val1", "val2"}); |
| 75 | ASSERT_TRUE(my_lat1); |
| 76 | *my_lat1 << 1 << 2; |
| 77 | bvar::LatencyRecorder* my_lat2 = my_mlat.get_stats({"val2", "val3"}); |
| 78 | ASSERT_TRUE(my_lat2); |
| 79 | *my_lat2 << 3 << 4; |
| 80 | |
| 81 | brpc::Channel channel; |
| 82 | brpc::ChannelOptions channel_opts; |
| 83 | channel_opts.protocol = "http"; |
| 84 | ASSERT_EQ(0, channel.Init("127.0.0.1:8614", &channel_opts)); |
| 85 | brpc::Controller cntl; |
| 86 | cntl.http_request().uri() = "/brpc_metrics"; |
| 87 | channel.CallMethod(NULL, &cntl, NULL, NULL, NULL); |
| 88 | ASSERT_FALSE(cntl.Failed()); |
| 89 | std::string res = cntl.response_attachment().to_string(); |
| 90 | LOG(INFO) << "output:\n" << res; |
| 91 | size_t start_pos = 0; |
| 92 | size_t end_pos = 0; |
| 93 | size_t label_start = 0; |
| 94 | STATE state = HELP; |
| 95 | char name_help[128]; |
| 96 | char name_type[128]; |
| 97 | char type[16]; |
| 98 | int matched = 0; |
| 99 | int num = 0; |
| 100 | bool summary_sum_gathered = false; |
| 101 | bool summary_count_gathered = false; |
| 102 | bool has_ever_summary = false; |
| 103 | bool has_ever_gauge = false; |
| 104 | bool has_ever_counter = false; // brought in by mvar latency recorder |
| 105 | std::unordered_set<std::string> metric_name_set; |
| 106 | |
| 107 | while ((end_pos = res.find('\n', start_pos)) != butil::StringPiece::npos) { |
| 108 | res[end_pos] = '\0'; // safe; |
| 109 | switch (state) { |
| 110 | case HELP: |
| 111 | matched = sscanf(res.data() + start_pos, "# HELP %s", name_help); |
| 112 | ASSERT_EQ(1, matched); |
| 113 | state = TYPE; |
| 114 | break; |
| 115 | case TYPE: |
nothing calls this directly
no test coverage detected