]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: freq_ctr: add new functions to report float measurements
authorWilly Tarreau <w@1wt.eu>
Sat, 8 May 2021 06:12:37 +0000 (08:12 +0200)
committerWilly Tarreau <w@1wt.eu>
Sat, 8 May 2021 08:48:17 +0000 (10:48 +0200)
For stats reporting it can be convenient to report floats at low rates
instead of discrete integers. We do have quite some precision since we
currently divide counters by number of milliseconds, so we can usually
add 3 digits after the decimal point.

include/haproxy/freq_ctr.h

index 93c3eaebaf78c9419361f70c92df7d6703428231..a59a3f9b01f138fe7450017566af17325c733a87 100644 (file)
@@ -104,6 +104,16 @@ static inline uint read_freq_ctr_period(struct freq_ctr *ctr, uint period)
        return div64_32(total, period);
 }
 
+/* same as read_freq_ctr_period() above except that floats are used for the
+ * output so that low rates can be more precise.
+ */
+static inline double read_freq_ctr_period_flt(struct freq_ctr *ctr, uint period)
+{
+       ullong total = freq_ctr_total(ctr, period, -1);
+
+       return (double)total / (double)period;
+}
+
 /* Read a 1-sec frequency counter taking history into account for missing time
  * in current period.
  */
@@ -112,6 +122,14 @@ static inline unsigned int read_freq_ctr(struct freq_ctr *ctr)
        return read_freq_ctr_period(ctr, MS_TO_TICKS(1000));
 }
 
+/* same as read_freq_ctr() above except that floats are used for the
+ * output so that low rates can be more precise.
+ */
+static inline double read_freq_ctr_flt(struct freq_ctr *ctr)
+{
+       return read_freq_ctr_period_flt(ctr, MS_TO_TICKS(1000));
+}
+
 /* Returns the number of remaining events that can occur on this freq counter
  * while respecting <freq> events per period, and taking into account that
  * <pend> events are already known to be pending. Returns 0 if limit was reached.