From: Harlan Stenn Date: Tue, 23 Dec 2008 07:59:12 +0000 (-0500) Subject: Stats file logging cleanup from Dave Mills X-Git-Tag: NTP_4_2_5P151~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=26425c75aee1f69ad7e82caa63a3b6e6c936bda4;p=thirdparty%2Fntp.git Stats file logging cleanup from Dave Mills bk: 49509a50am4eybsxQNEYh0JcATH9dQ --- diff --git a/ChangeLog b/ChangeLog index c5f74c238..561cc7c71 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,4 @@ +* Stats file logging cleanup from Dave Mills. (4.2.5p150) 2008/12/15 Released by Harlan Stenn * [Bug 1099] Fixed wrong behaviour in sntp's crypto.c. * [Bug 1103] Fix 64-bit issues in the new calendar code. diff --git a/ntpd/ntp_control.c b/ntpd/ntp_control.c index e8c6410b0..40138e24a 100644 --- a/ntpd/ntp_control.c +++ b/ntpd/ntp_control.c @@ -2771,12 +2771,22 @@ report_event( int i; /* - * Record error code in proper spots, but have mercy on the - * log file. + * Report the error to the protostats file, system log and + * trappers. */ if (peer == NULL) { - if (ctl_sys_num_events < CTL_SYS_MAXEVENTS) - ctl_sys_num_events++; + + /* + * Discard a system report if the number of reports of + * the same type exceeds the maximum. + */ + if (ctl_sys_last_event != (u_char)err) + ctl_sys_num_events= 0; + if (ctl_sys_num_events >= CTL_SYS_MAXEVENTS) + return; + + ctl_sys_last_event = (u_char)err; + ctl_sys_num_events++; snprintf(statstr, NTP_MAXSTRLEN, "0.0.0.0 %04x %02x system event: %s", ctlsysstatus(), err, eventstr(err)); @@ -2784,23 +2794,31 @@ report_event( strcat(statstr, " "); strcat(statstr, str); } - if (ctl_sys_last_event != (u_char)err) { - NLOG(NLOG_SYSEVENT) - msyslog(LOG_INFO, statstr); - ctl_sys_last_event = (u_char)err; - } + NLOG(NLOG_SYSEVENT) + msyslog(LOG_INFO, statstr); } else { - char *src; + /* + * Discard a peer report if the number of reports of + * the same type exceeds the maximum for that peer. + */ + char *src; + u_char errlast; + + errlast = err & ~PEER_EVENT; + if (peer->last_event == errlast) + peer->num_events = 0; + if (peer->num_events >= CTL_PEER_MAXEVENTS) + return; + + peer->last_event = errlast; + peer->num_events++; #ifdef REFCLOCK if (ISREFCLOCKADR(&peer->srcadr)) src = refnumtoa(&peer->srcadr); else #endif src = stoa(&peer->srcadr); - peer->last_event = (u_char)(err & ~PEER_EVENT); - if (peer->num_events < CTL_PEER_MAXEVENTS) - peer->num_events++; snprintf(statstr, NTP_MAXSTRLEN, "%s %04x %02x peer event: %s", src, ctlpeerstatus(peer), err, eventstr(err));