| #include "request_stats.hpp" |
| |
| #include <chrono> // NOLINT |
| #include <string> |
| |
| #include <gtest/gtest.h> |
| #include "logging.hpp" |
| #include "managed_store_clock.hpp" |
| |
| namespace managedStore { |
| namespace { |
| |
| TEST(RequestStatsTest, TestStatsStore) { |
| auto stats_store_config = managedStore::RequestStatsStoreConfig(); |
| stats_store_config.enable = true; |
| auto stats_store = managedStore::RequestStatsStore(stats_store_config); |
| |
| BMCWEB_LOG_INFO << "ping: stats_store: " << stats_store.toJson(); |
| EXPECT_EQ(true, stats_store_config.enable); |
| |
| const auto now_plus_500 = |
| managedStore::clockNow() + std::chrono::milliseconds(500); |
| const auto now_plus_800 = |
| managedStore::clockNow() + std::chrono::milliseconds(800); |
| |
| const std::string rq_batman = "/batman/was/here"; |
| { |
| auto rq = managedStore::RequestStatsContext(rq_batman); |
| rq.setOK(false); |
| stats_store.logRequestStats(now_plus_500, rq); |
| } |
| |
| const std::string rq_superman = "/superman/was/here"; |
| { |
| auto rq = managedStore::RequestStatsContext(rq_superman); |
| rq.setOK(true); |
| stats_store.logRequestStats(now_plus_800, rq); |
| } |
| |
| auto stats_store_json = stats_store.toJson(); |
| BMCWEB_LOG_INFO << "stats_store_json: " << stats_store_json; |
| |
| // expected: |
| // ========= |
| // { |
| // "config": { |
| // "enable": true |
| // }, |
| // "statsMap": { |
| // "/batman/was/here": { |
| // "countError": 1, |
| // "countOK": 0, |
| // "latencyHistogram": [ |
| // { |
| // "count": 1, |
| // "milliseconds": 400 |
| // } |
| // ], |
| // "queryURLKey": "/batman/was/here" |
| // }, |
| // "/superman/was/here": { |
| // "countError": 0, |
| // "countOK": 1, |
| // "latencyHistogram": [ |
| // { |
| // "count": 1, |
| // "milliseconds": 700 |
| // } |
| // ], |
| // "queryURLKey": "/superman/was/here" |
| // } |
| // } |
| // } |
| |
| EXPECT_EQ(true, stats_store_json["config"]["enable"]); |
| |
| EXPECT_EQ(1, stats_store_json["statsMap"]["/batman/was/here"]["countError"]); |
| EXPECT_EQ(0, stats_store_json["statsMap"]["/batman/was/here"]["countOK"]); |
| EXPECT_EQ(1, stats_store_json["statsMap"]["/batman/was/here"] |
| ["latencyHistogram"][0]["count"]); |
| EXPECT_EQ(500, stats_store_json["statsMap"]["/batman/was/here"] |
| ["latencyHistogram"][0]["milliseconds"]); |
| EXPECT_EQ("/batman/was/here", |
| stats_store_json["statsMap"]["/batman/was/here"]["target"]); |
| |
| EXPECT_EQ(0, |
| stats_store_json["statsMap"]["/superman/was/here"]["countError"]); |
| EXPECT_EQ(1, stats_store_json["statsMap"]["/superman/was/here"]["countOK"]); |
| EXPECT_EQ(1, stats_store_json["statsMap"]["/superman/was/here"] |
| ["latencyHistogram"][0]["count"]); |
| EXPECT_EQ(800, stats_store_json["statsMap"]["/superman/was/here"] |
| ["latencyHistogram"][0]["milliseconds"]); |
| EXPECT_EQ("/superman/was/here", |
| stats_store_json["statsMap"]["/superman/was/here"]["target"]); |
| |
| // clear the store should reset all the stats: |
| stats_store.clear(); |
| EXPECT_EQ(0, stats_store.queryStats().size()); |
| } |
| |
| } // namespace |
| } // namespace managedStore |