]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
Stats file logging cleanup from Dave Mills
authorHarlan Stenn <stenn@ntp.org>
Tue, 23 Dec 2008 07:59:12 +0000 (02:59 -0500)
committerHarlan Stenn <stenn@ntp.org>
Tue, 23 Dec 2008 07:59:12 +0000 (02:59 -0500)
bk: 49509a50am4eybsxQNEYh0JcATH9dQ

ChangeLog
ntpd/ntp_control.c

index c5f74c2380cfff0942d238c7df99be42e03e4170..561cc7c71302422e733fa1c84ad1f64f701f1d79 100644 (file)
--- 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 <stenn@ntp.org>
 * [Bug 1099] Fixed wrong behaviour in sntp's crypto.c.
 * [Bug 1103] Fix 64-bit issues in the new calendar code.
index e8c6410b0a28d00cded4097fe23d3244b9795987..40138e24aae83b1a5696a30fa43f99f5165473e9 100644 (file)
@@ -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));