/**
* An update would exceed the update interval. Prints out a warning message.
+ * @param override_log_level Override log level with zero if true
* @param current_time Current time.
* @param old_time Time of update #MaxUpdatesWithinInterval ago.
* @param MaxUpdatesWithinInterval Number of allowed updates in one update interval.
* @param service The service which exceeds update interval.
*/
-void Logger::print_update_not_allowed(const time_t current_time, const time_t old_time, const int MaxUpdatesWithinInterval, const string& service)
+void Logger::print_update_not_allowed(bool override_log_level, const time_t current_time, const time_t old_time, const int MaxUpdatesWithinInterval, const string& service)
{
int level = 1;
+
+ if (override_log_level)
+ level = 0;
+
if ( (level <= Loglevel) || ((level <= ExternalWarningLevel) && (!ExternalWarningLog.empty())) )
{
ostringstream msg;
void print_multiple_main_conf_option(const std::string& main_conf_file, const std::string& message) const;
- void print_update_not_allowed(const time_t current_time, const time_t old_time, const int MaxUpdatesWithinInterval, const std::string& service);
+ void print_update_not_allowed(bool override_log_level, const time_t current_time, const time_t old_time, const int MaxUpdatesWithinInterval, const std::string& service);
void print_update_service_failure(const std::string& service);
/**
* Checks if update will exceed max update interval.
* @param current_time Current time.
+ * @param changed_to_online True if we just changed to online, false if we were already online
* @return True if update is allowed, false if update would exceed max update interval.
*/
-bool Service::update_allowed(const time_t current_time)
+bool Service::update_allowed(const time_t current_time, bool changed_to_online)
{
list<time_t>::iterator iter;
int i=0;
{
if ( (i == (MaxUpdatesWithinInterval-1)) && ( (*iter + ((time_t)UpdateInterval*60)) >= current_time ) )
{
- Log->print_update_not_allowed(current_time,*iter,MaxUpdatesWithinInterval,get_service_name());
+ Log->print_update_not_allowed(changed_to_online, current_time,*iter,MaxUpdatesWithinInterval,get_service_name());
return false;
}
i++;
/**
* Service update method, common to each service.
* @param ip The new ip to set for the hostname.
+ * @param current_time Current time
+ * @param changed_to_online True if we just changed to online, false if we were already online
*/
-void Service::update(const string& ip, const time_t current_time)
+void Service::update(const string& ip, const time_t current_time, bool changed_to_online)
{
const std::string service_name = get_service_name();
return;
}
- Log->print_update_service(service_name);
-
// test if update is permitted by UpdateInterval Status
- if ( update_allowed(current_time) )
+ if ( update_allowed(current_time, changed_to_online) )
{
+ Log->print_update_service(service_name);
+
if ( perform_update(ip) == 0 )
{
// if update was successful, we need to set the Lastupdated and ActualIP base member.
virtual int perform_update(const std::string& ip) = 0;
- void update(const std::string& ip, const time_t current_time);
+ void update(const std::string& ip, const time_t current_time, bool changed_to_online);
- bool update_allowed(const time_t current_time);
+ bool update_allowed(const time_t current_time, bool changed_to_online);
void set_last_update(const time_t current_time);
{
// Update
Log->print_update_service(hostname, ip_dns_recheck, ip_last_update, ip_host, lastupdated);
- service->update(ip_host,current_time);
+ service->update(ip_host, current_time, changed_to_online);
}
else
{
{
// Update
Log->print_update_service_ttl_expired(hostname, ip_dns_recheck, ip_last_update, ip_host, lastupdated, dns_cache_ttl, current_time);
- service->update(ip_host,current_time);
+ service->update(ip_host, current_time, changed_to_online);
}
else
{