Hi, Jochen,<br><br>Thank you again. I think that you found where the problem is, I mean, the base/checks.c::is_host_result_fresh() code.<br><br>I change the lines in the checks.c as below:<br><br>========================================================<br>
FROM: Lines 2439 - 2440<br><br> if(temp_host->freshness_threshold==0)<br>                freshness_threshold=(temp_host->check_interval*interval_length)+temp_host->latency+additional_freshness_latency;<br><br>TO:<br>
<br>        if(temp_host->freshness_threshold==0){<br>                if(temp_host->state_type==HARD_STATE || temp_host->current_state==STATE_OK)<br>                        freshness_threshold=(temp_host->check_interval*interval_length)+temp_host->latency+additional_freshness_latency;<br>
                else<br>                        freshness_threshold=(temp_host->retry_interval*interval_length)+temp_host->latency+additional_freshness_latency;<br>                }<br>========================================================<br>
<br>It is working well, as expected. My retry interval is 1 minute and hosts are taking about 2 minutes to change SOFT states.<br><br>The logs are:<br><br>BEFORE the changes:<br><br>[1292854105] Warning: The results of host 'host1' are stale by 0d 0h 0m 1s (threshold=0d 0h 5m 15s).  I'm forcing an immediate check of the host.<br>
[1292857824] Warning: The results of host 'host1' are stale by 0d 0h 0m 1s (threshold=0d 0h 5m 15s).  I'm forcing an immediate check of the host.<br>[1292859117] Warning: The results of host 'host1' are stale by 0d 0h 0m 52s (threshold=0d 0h 5m 15s).  I'm forcing an immediate check of the host.<br>
<br><br>AFTER the changes:<br><br>[1292859297] Warning: The results of host 'host1' are stale by 0d 0h 0m 59s (threshold=0d 0h 1m 38s).  I'm forcing an immediate check of the host.<br>[1292859417] Warning: The results of host 'host1' are stale by 0d 0h 0m 31s (threshold=0d 0h 1m 22s).  I'm forcing an immediate check of the host.<br>
[1292859597] Warning: The results of host 'host1' are stale by 0d 0h 0m 47s (threshold=0d 0h 1m 44s).  I'm forcing an immediate check of the host.<br><br>So, I´d like to known the developers opinion. It´s a bug or it´s not? Are you intending to change the source code? If not I will have to change it myself always when a new Nagios version is released.<br>
<br>Thanks a lot,<br>Rodney.<br><br><br><div class="gmail_quote">On Fri, Dec 17, 2010 at 10:07 AM, Jochen Bern <span dir="ltr"><<a href="mailto:Jochen.Bern@linworks.de">Jochen.Bern@linworks.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">On 12/17/2010 12:10 PM, Rodney Ramos wrote:<br>
> Than I understood that you confirm the problem<br>
<br>
</div>I confirm that my 3.2.3 autodetermines the host's freshness threshold as<br>
check_interval+additional_freshness_latency, even in SOFT non-OK cases,<br>
when active checks would use retry_interval instead.<br>
<br>
I'm not calling it a "problem" yet, though, because the specifics you<br>
quote (apparently from a local copy of the docs ?) are absent from the<br>
docs at <a href="http://nagios.sourceforge.net/docs/3_0/freshness.html" target="_blank">http://nagios.sourceforge.net/docs/3_0/freshness.html</a> .<br>
<br>
Nonetheless, when I compare base/checks.c::is_host_result_fresh() to<br>
base/checks.c::is_service_result_fresh(), it seems that the latter<br>
*does* do the if-then-else you describe, while it's absent from the former:<br>
<br>
[...]<br>
/* tests whether or not a service's check results are fresh */<br>
int is_service_result_fresh(service *temp_service, time_t current_time,<br>
int log_this){<br>
[...]<br>
   /* use user-supplied freshness threshold or auto-calculate a<br>
freshness threshold to use? */<br>
   if(temp_service->freshness_threshold==0){<br>
      if(temp_service->state_type==HARD_STATE ||<br>
temp_service->current_state==STATE_OK)<br>
<br>
freshness_threshold=(temp_service->check_interval*interval_length)+temp_service->latency+additional_freshness_latency;<br>
      else<br>
<br>
freshness_threshold=(temp_service->retry_interval*interval_length)+temp_service->latency+additional_freshness_latency;<br>
      }<br>
   else<br>
      freshness_threshold=temp_service->freshness_threshold;<br>
[...]<br>
/* checks to see if a hosts's check results are fresh */<br>
int is_host_result_fresh(host *temp_host, time_t current_time, int<br>
log_this){<br>
[...]<br>
   /* use user-supplied freshness threshold or auto-calculate a<br>
freshness threshold to use? */<br>
   if(temp_host->freshness_threshold==0)<br>
<br>
freshness_threshold=(temp_host->check_interval*interval_length)+temp_host->latency+additional_freshness_latency;<br>
   else<br>
      freshness_threshold=temp_host->freshness_threshold;<br>
[...]<br>
<br>
I have no idea whether that's intentional, though ...<br>
<div class="im"><br>
> 18:56:13 Warning: The results of host 'Unfresh' are stale by 0d 0h 0m 59s<br>
>   (threshold=0d 0h 15m 17s). I'm forcing an immediate check of the host.<br>
> 18:56:23 HOST ALERT: Unfresh;DOWN;SOFT;2;(null)<br>
><br>
> --> It´s wrong. It should be about 18:42:05, 2 minutes after the SOFT1, as<br>
> your retry_interval is 2 minutes.<br>
><br>
> 19:28:13 Warning: The results of host 'Unfresh' are stale by 0d 0h 0m 39s<br>
>   (threshold=0d 0h 15m 18s). I'm forcing an immediate check of the host.<br>
> 19:28:23 HOST ALERT: Unfresh;DOWN;SOFT;3;CRITICAL: All life functions<br>
> terminated<br>
><br>
> --> It´s wrong. It should be about 18:58:23, 2 minutes after the SOFT2, as<br>
> your retry_interval is 2 minutes.<br>
<br>
</div>(You missed the spurious *second* SOFT2 between these two, which upends<br>
the prediction of "correct" check times even further ...)<br>
<br>
P.S. to my previous mail: I also noted that, in spite of the config<br>
saying "initial_state o", the host was listed as PENDING in the CGIs<br>
after the first reload. Is that expected behaviour?<br>
<div><div></div><div class="h5"><br>
Kind regards,<br>
                                                                J. Bern<br>
--<br>
Jochen Bern, Systemingenieur --- LINworks GmbH <<a href="http://www.LINworks.de/" target="_blank">http://www.LINworks.de/</a>><br>
Postfach 100121, 64201 Darmstadt | Robert-Koch-Str. 9, 64331 Weiterstadt<br>
PGP (1024D/4096g) FP = D18B 41B1 16C0 11BA 7F8C DCF7 E1D5 FAF4 444E 1C27<br>
Tel. +49 6151 9067-231, Zentr. -0, Fax -299 - Amtsg. Darmstadt HRB 85202<br>
Unternehmenssitz Weiterstadt, Geschäftsführer Metin Dogan, Oliver Michel<br>
</div></div></blockquote></div><br>