TEST_F(ConfigTests, test_schedule_blacklist) { auto current_time = getUnixTime(); std::map<std::string, size_t> blacklist; saveScheduleBlacklist(blacklist); restoreScheduleBlacklist(blacklist); EXPECT_EQ(blacklist.size(), 0U); // Create some entries. blacklist["test_1"] = current_time * 2; blacklist["test_2"] = current_time * 3; saveScheduleBlacklist(blacklist); blacklist.clear(); restoreScheduleBlacklist(blacklist); ASSERT_EQ(blacklist.count("test_1"), 1U); ASSERT_EQ(blacklist.count("test_2"), 1U); EXPECT_EQ(blacklist.at("test_1"), current_time * 2); EXPECT_EQ(blacklist.at("test_2"), current_time * 3); // Now save an expired query. blacklist["test_1"] = 1; saveScheduleBlacklist(blacklist); blacklist.clear(); // When restoring, the values below the current time will not be included. restoreScheduleBlacklist(blacklist); EXPECT_EQ(blacklist.size(), 1U); }
void Config::scheduledQueries( std::function<void(const std::string& name, const ScheduledQuery& query)> predicate) { RecursiveLock lock(config_schedule_mutex_); for (const PackRef& pack : *schedule_) { for (const auto& it : pack->getSchedule()) { std::string name = it.first; // The query name may be synthetic. if (pack->getName() != "main" && pack->getName() != "legacy_main") { name = "pack" + FLAGS_pack_delimiter + pack->getName() + FLAGS_pack_delimiter + it.first; } // They query may have failed and been added to the schedule's blacklist. if (schedule_->blacklist_.count(name) > 0) { auto blacklisted_query = schedule_->blacklist_.find(name); if (getUnixTime() > blacklisted_query->second) { // The blacklisted query passed the expiration time (remove). schedule_->blacklist_.erase(blacklisted_query); saveScheduleBlacklist(schedule_->blacklist_); } else { // The query is still blacklisted. continue; } } // Call the predicate. predicate(name, it.second); } } }
Schedule::Schedule() { if (Registry::external()) { // Extensions should not restore or save schedule details. return; } // Parse the schedule's query blacklist from backing storage. restoreScheduleBlacklist(blacklist_); // Check if any queries were executing when the tool last stopped. getDatabaseValue(kPersistentSettings, kExecutingQuery, failed_query_); if (!failed_query_.empty()) { LOG(WARNING) << "Scheduled query may have failed: " << failed_query_; setDatabaseValue(kPersistentSettings, kExecutingQuery, ""); // Add this query name to the blacklist and save the blacklist. blacklist_[failed_query_] = getUnixTime() + 86400; saveScheduleBlacklist(blacklist_); } }