11package com .zegelin .prometheus .cassandra ;
22
3- import com .google . common . collect . Maps ;
3+ import com .zegelin . function . FloatFloatFunction ;
44import com .zegelin .prometheus .cassandra .collector .dynamic .FunctionalMetricFamilyCollector .CollectorFunction ;
55import com .zegelin .prometheus .cassandra .collector .dynamic .FunctionalMetricFamilyCollector .LabeledObjectGroup ;
66import com .zegelin .prometheus .domain .*;
99import org .apache .cassandra .metrics .CassandraMetricsRegistry .JmxMeterMBean ;
1010import org .apache .cassandra .utils .EstimatedHistogram ;
1111
12- import java .util .Map ;
13- import java .util .function .Function ;
1412import java .util .stream .Stream ;
1513
1614public final class CollectorFunctions {
1715 private CollectorFunctions () {}
1816
19- private static Stream <NumericMetric > counterMetricsStream (final LabeledObjectGroup <JmxCounterMBean > group , final Function < Float , Float > scaleFunction ) {
17+ private static Stream <NumericMetric > counterMetricsStream (final LabeledObjectGroup <JmxCounterMBean > group , final FloatFloatFunction scaleFunction ) {
2018 return group .labeledObjects ().entrySet ().stream ()
2119 .map (e -> new Object () {
2220 final Labels labels = e .getKey ();
@@ -28,7 +26,7 @@ private static Stream<NumericMetric> counterMetricsStream(final LabeledObjectGro
2826 /**
2927 * Collect a {@link JmxCounterMBean} as a Prometheus counter
3028 */
31- public static CollectorFunction <JmxCounterMBean > counterAsCounter (final Function < Float , Float > scaleFunction ) {
29+ public static CollectorFunction <JmxCounterMBean > counterAsCounter (final FloatFloatFunction scaleFunction ) {
3230 return group -> {
3331 final Stream <NumericMetric > metricStream = counterMetricsStream (group , scaleFunction );
3432
@@ -44,7 +42,7 @@ public static CollectorFunction<JmxCounterMBean> counterAsCounter() {
4442 /**
4543 * Collect a {@link JmxCounterMBean} as a Prometheus gauge
4644 */
47- public static CollectorFunction <JmxCounterMBean > counterAsGauge (final Function < Float , Float > scaleFunction ) {
45+ public static CollectorFunction <JmxCounterMBean > counterAsGauge (final FloatFloatFunction scaleFunction ) {
4846 return group -> {
4947 final Stream <NumericMetric > metricStream = counterMetricsStream (group , scaleFunction );
5048
@@ -53,15 +51,15 @@ public static CollectorFunction<JmxCounterMBean> counterAsGauge(final Function<F
5351 }
5452
5553 public static CollectorFunction <JmxCounterMBean > counterAsGauge () {
56- return counterAsGauge (Function .identity ());
54+ return counterAsGauge (FloatFloatFunction .identity ());
5755 }
5856
5957
6058
6159 /**
6260 * Collect a {@link JmxMeterMBean} as a Prometheus counter
6361 */
64- public static CollectorFunction <JmxMeterMBean > meterAsCounter (final Function < Float , Float > scaleFunction ) {
62+ public static CollectorFunction <JmxMeterMBean > meterAsCounter (final FloatFloatFunction scaleFunction ) {
6563 return group -> {
6664 final Stream <NumericMetric > metricStream = group .labeledObjects ().entrySet ().stream ()
6765 .map (e -> new Object () {
@@ -76,11 +74,11 @@ public static CollectorFunction<JmxMeterMBean> meterAsCounter(final Function<Flo
7674 }
7775
7876 public static CollectorFunction <JmxMeterMBean > meterAsCounter () {
79- return meterAsCounter (Function .identity ());
77+ return meterAsCounter (FloatFloatFunction .identity ());
8078 }
8179
8280
83- private static Stream <NumericMetric > numericGaugeMetricsStream (final LabeledObjectGroup <JmxGaugeMBean > group , final Function < Float , Float > scaleFunction ) {
81+ private static Stream <NumericMetric > numericGaugeMetricsStream (final LabeledObjectGroup <JmxGaugeMBean > group , final FloatFloatFunction scaleFunction ) {
8482 return group .labeledObjects ().entrySet ().stream ()
8583 .map (e -> new Object () {
8684 final Labels labels = e .getKey ();
@@ -92,7 +90,7 @@ private static Stream<NumericMetric> numericGaugeMetricsStream(final LabeledObje
9290 /**
9391 * Collect a {@link JmxGaugeMBean} with a {@link Number} value as a Prometheus gauge
9492 */
95- public static CollectorFunction <JmxGaugeMBean > numericGaugeAsGauge (final Function < Float , Float > scaleFunction ) {
93+ public static CollectorFunction <JmxGaugeMBean > numericGaugeAsGauge (final FloatFloatFunction scaleFunction ) {
9694 return group -> {
9795 final Stream <NumericMetric > metricStream = numericGaugeMetricsStream (group , scaleFunction );
9896
@@ -101,14 +99,14 @@ public static CollectorFunction<JmxGaugeMBean> numericGaugeAsGauge(final Functio
10199 }
102100
103101 public static CollectorFunction <JmxGaugeMBean > numericGaugeAsGauge () {
104- return numericGaugeAsGauge (Function .identity ());
102+ return numericGaugeAsGauge (FloatFloatFunction .identity ());
105103 }
106104
107105
108106 /**
109107 * Collect a {@link JmxGaugeMBean} with a {@see Number} value as a Prometheus counter
110108 */
111- public static CollectorFunction <JmxGaugeMBean > numericGaugeAsCounter (final Function < Float , Float > scaleFunction ) {
109+ public static CollectorFunction <JmxGaugeMBean > numericGaugeAsCounter (final FloatFloatFunction scaleFunction ) {
112110 return group -> {
113111 final Stream <NumericMetric > metricStream = numericGaugeMetricsStream (group , scaleFunction );
114112
@@ -117,15 +115,15 @@ public static CollectorFunction<JmxGaugeMBean> numericGaugeAsCounter(final Funct
117115 }
118116
119117 public static CollectorFunction <JmxGaugeMBean > numericGaugeAsCounter () {
120- return numericGaugeAsCounter (Function .identity ());
118+ return numericGaugeAsCounter (FloatFloatFunction .identity ());
121119 }
122120
123121
124122
125123 /**
126124 * Collect a {@link JmxGaugeMBean} with a Cassandra {@link EstimatedHistogram} value as a Prometheus summary
127125 */
128- public static CollectorFunction <JmxGaugeMBean > histogramGaugeAsSummary (final Function < Float , Float > quantileScaleFunction ) {
126+ public static CollectorFunction <JmxGaugeMBean > histogramGaugeAsSummary (final FloatFloatFunction bucketScaleFunction ) {
129127 return group -> {
130128 final Stream <SummaryMetricFamily .Summary > summaryStream = group .labeledObjects ().entrySet ().stream ()
131129 .map (e -> new Object () {
@@ -136,12 +134,12 @@ public static CollectorFunction<JmxGaugeMBean> histogramGaugeAsSummary(final Fun
136134 final long [] bucketData = (long []) e .gauge .getValue ();
137135
138136 if (bucketData .length == 0 ) {
139- return new SummaryMetricFamily .Summary (e .labels , Float .NaN , Float .NaN , Maps . toMap ( Quantile .STANDARD_QUANTILES , q -> Float .NaN ));
137+ return new SummaryMetricFamily .Summary (e .labels , Float .NaN , Float .NaN , Interval . asIntervals ( Interval . Quantile .STANDARD_PERCENTILES , q -> Float .NaN ));
140138 }
141139
142140 final EstimatedHistogram histogram = new EstimatedHistogram (bucketData );
143141
144- final Map < Quantile , Float > quantiles = Maps . toMap ( Quantile .STANDARD_QUANTILES , q -> quantileScaleFunction .apply ((float ) histogram .percentile (q .value )));
142+ final Stream < Interval > quantiles = Interval . asIntervals ( Interval . Quantile .STANDARD_PERCENTILES , q -> bucketScaleFunction .apply ((float ) histogram .percentile (q .value )));
145143
146144 return new SummaryMetricFamily .Summary (e .labels , Float .NaN , histogram .count (), quantiles );
147145 });
@@ -157,15 +155,16 @@ public static CollectorFunction<JmxGaugeMBean> histogramGaugeAsSummary() {
157155 /**
158156 * Collect a {@link SamplingCounting} as a Prometheus summary
159157 */
160- protected static CollectorFunction <SamplingCounting > samplingAndCountingAsSummary (final Function < Float , Float > quantileScaleFunction ) {
158+ protected static CollectorFunction <SamplingCounting > samplingAndCountingAsSummary (final FloatFloatFunction quantileScaleFunction ) {
161159 return group -> {
162160 final Stream <SummaryMetricFamily .Summary > summaryStream = group .labeledObjects ().entrySet ().stream ()
163161 .map (e -> new Object () {
164162 final Labels labels = e .getKey ();
165163 final SamplingCounting samplingCounting = e .getValue ();
166164 })
167165 .map (e -> {
168- final Map <Quantile , Float > quantiles = Maps .transformValues (e .samplingCounting .getQuantiles (), v -> quantileScaleFunction .apply (v .floatValue ()));
166+ final Stream <Interval > quantiles = e .samplingCounting .getIntervals ()
167+ .map (i -> i .transform (quantileScaleFunction ));
169168
170169 return new SummaryMetricFamily .Summary (e .labels , Float .NaN , e .samplingCounting .getCount (), quantiles );
171170 });
@@ -175,6 +174,6 @@ protected static CollectorFunction<SamplingCounting> samplingAndCountingAsSummar
175174 }
176175
177176 public static CollectorFunction <SamplingCounting > samplingAndCountingAsSummary () {
178- return samplingAndCountingAsSummary (Function .identity ());
177+ return samplingAndCountingAsSummary (FloatFloatFunction .identity ());
179178 }
180179}
0 commit comments