Merge pull request #1467 from krunal1313/event_anaylytics

Enable analytics rate limit for some tests explicitly
This commit is contained in:
Kishore Nallan 2024-01-05 11:41:12 +05:30 committed by GitHub
commit 5e17c44f9f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 23 deletions

View File

@ -165,6 +165,7 @@ private:
Store* store = nullptr;
Store* analytics_store = nullptr;
bool isRateLimitEnabled = false;
AnalyticsManager() {}
~AnalyticsManager();
@ -237,7 +238,7 @@ public:
std::unordered_map<std::string, QueryAnalytics*> get_nohits_queries();
void resetRateLimit();
void resetToggleRateLimit(bool toggle);
void add_query_hits_count(const std::string& query_collection, const std::string& query, const std::string& user_id,
uint64_t hits_count);

View File

@ -298,27 +298,32 @@ Option<bool> AnalyticsManager::add_event(const std::string& event_type, const st
if(analytics_store) {
auto &events_vec= query_collection_events[query_collection];
auto now_ts_seconds = std::chrono::duration_cast<std::chrono::seconds>(
std::chrono::system_clock::now().time_since_epoch()).count();
auto events_cache_it = events_cache.find(client_ip);
#ifdef TEST_BUILD
if (isRateLimitEnabled) {
#endif
auto now_ts_seconds = std::chrono::duration_cast<std::chrono::seconds>(
std::chrono::system_clock::now().time_since_epoch()).count();
auto events_cache_it = events_cache.find(client_ip);
if (events_cache_it != events_cache.end()) {
//event found in events cache
if ((now_ts_seconds - events_cache_it->second.last_update_time) < EVENTS_RATE_LIMIT_SEC) {
if (events_cache_it->second.count >= EVENTS_RATE_LIMIT_COUNT) {
return Option<bool>(500, "event rate limit reached.");
if (events_cache_it != events_cache.end()) {
//event found in events cache
if ((now_ts_seconds - events_cache_it->second.last_update_time) < EVENTS_RATE_LIMIT_SEC) {
if (events_cache_it->second.count >= EVENTS_RATE_LIMIT_COUNT) {
return Option<bool>(500, "event rate limit reached.");
} else {
events_cache_it->second.count++;
}
} else {
events_cache_it->second.count++;
events_cache_it->second.last_update_time = now_ts_seconds;
events_cache_it->second.count = 1;
}
} else {
events_cache_it->second.last_update_time = now_ts_seconds;
events_cache_it->second.count = 1;
event_cache_t eventCache{(uint64_t) now_ts_seconds, 1};
events_cache.insert(client_ip, eventCache);
}
} else {
event_cache_t eventCache{(uint64_t) now_ts_seconds, 1};
events_cache.insert(client_ip, eventCache);
#ifdef TEST_BUILD
}
#endif
auto now_ts_useconds = std::chrono::duration_cast<std::chrono::microseconds>(
std::chrono::system_clock::now().time_since_epoch()).count();
@ -712,8 +717,9 @@ Option<bool> AnalyticsManager::write_events_to_store(nlohmann::json &event_jsons
return Option<bool>(true);
}
void AnalyticsManager::resetRateLimit() {
void AnalyticsManager::resetToggleRateLimit(bool toggle) {
events_cache.clear();
isRateLimitEnabled = toggle;
}
void AnalyticsManager::resetAnalyticsStore() {

View File

@ -429,7 +429,7 @@ TEST_F(AnalyticsManagerTest, ClickEventsRateLimitTest) {
})"_json;
//reset the LRU cache to test the rate limit
analyticsManager.resetRateLimit();
analyticsManager.resetToggleRateLimit(true);
req->body = event.dump();
for(auto i = 0; i < 5; ++i) {
@ -439,6 +439,8 @@ TEST_F(AnalyticsManagerTest, ClickEventsRateLimitTest) {
//as rate limit is 5, adding one more event above that should trigger rate limit
ASSERT_FALSE(post_create_event(req, res));
ASSERT_EQ("{\"message\": \"event rate limit reached.\"}", res->body);
analyticsManager.resetToggleRateLimit(false);
}
TEST_F(AnalyticsManagerTest, NoresultsQueries) {
@ -895,8 +897,6 @@ TEST_F(AnalyticsManagerTest, EventsExpiryPartial) {
}
TEST_F(AnalyticsManagerTest, PopularityScore) {
//reset click event rate limit
analyticsManager.resetRateLimit();
nlohmann::json products_schema = R"({
"name": "products",
@ -1182,8 +1182,6 @@ TEST_F(AnalyticsManagerTest, PopularityScoreValidation) {
}
TEST_F(AnalyticsManagerTest, PurchaseEventsStoreRetrieval) {
//reset rate limit
analyticsManager.resetRateLimit();
nlohmann::json titles_schema = R"({
"name": "titles",

View File

@ -1501,7 +1501,6 @@ TEST_F(CoreAPIUtilsTest, TestInvalidConversationModels) {
TEST_F(CoreAPIUtilsTest, GetClickEvents) {
//reset analytics store
analyticsManager.resetRateLimit();
analyticsManager.resetAnalyticsStore();
nlohmann::json schema = R"({