1
1
package ru .cinimex .exporter .prometheus .metrics ;
2
2
3
+ import io .prometheus .client .CollectorRegistry ;
3
4
import org .apache .logging .log4j .LogManager ;
4
5
import org .apache .logging .log4j .Logger ;
5
6
import ru .cinimex .exporter .mq .MQObject ;
9
10
import java .util .ArrayList ;
10
11
import java .util .HashMap ;
11
12
import java .util .List ;
13
+ import java .util .Map ;
14
+ import java .util .Set ;
15
+ import java .util .function .Function ;
16
+
17
+ import static ru .cinimex .exporter .prometheus .metrics .MetricsReference .getAdditionalMqObjectMetricsReference ;
18
+ import static ru .cinimex .exporter .prometheus .metrics .UpdateMetricUtils .*;
12
19
13
20
/**
14
21
* Class is used to manage work of all metrics.
@@ -33,27 +40,25 @@ public static void initMetrics(List<PCFElement> elements, List<MQObject.MQType>
33
40
ArrayList <String > labels = new ArrayList <>();
34
41
labels .add (Labels .QMGR_NAME .name ());
35
42
MetricInterface metric ;
36
- if (element .requiresMQObject ()) {
37
- labels .add (Labels .MQ_OBJECT_NAME .name ());
38
- }
43
+ if (element .requiresMQObject ()) labels .add (Labels .MQ_OBJECT_NAME .name ());
39
44
switch (metricType ) {
40
45
case SIMPLE_GAUGE :
41
- metric = new SimpleGauge (metricName , row .getRowDesc (), labels .stream (). toArray (String []:: new ));
46
+ metric = new SimpleGauge (metricName , row .getRowDesc (), labels .toArray (new String [0 ] ));
42
47
metrics .put (metricName , metric );
43
48
logger .trace ("New gauge created! Name: {}, description: {}, labels: {}." , metricName , row .getRowDesc (), labels );
44
49
break ;
45
50
case SIMPLE_COUNTER :
46
- metric = new SimpleCounter (metricName , row .getRowDesc (), labels .stream (). toArray (String []:: new ));
51
+ metric = new SimpleCounter (metricName , row .getRowDesc (), labels .toArray (new String [0 ] ));
47
52
metrics .put (metricName , metric );
48
53
logger .trace ("New counter created! Name: {}, description: {}, labels: {}." , metricName , row .getRowDesc (), labels );
49
54
break ;
50
55
case EXTREME_GAUGE_MAX :
51
- metric = new ExtremeGauge (metricName , row .getRowDesc (), true , labels .stream (). toArray (String []:: new ));
56
+ metric = new ExtremeGauge (metricName , row .getRowDesc (), true , labels .toArray (new String [0 ] ));
52
57
metrics .put (metricName , metric );
53
58
logger .trace ("New extreme gauge created! Name: {}, description: {}, labels: {}." , metricName , row .getRowDesc (), labels );
54
59
break ;
55
60
case EXTREME_GAUGE_MIN :
56
- metric = new ExtremeGauge (metricName , row .getRowDesc (), false , labels .stream (). toArray (String []:: new ));
61
+ metric = new ExtremeGauge (metricName , row .getRowDesc (), false , labels .toArray (new String [0 ] ));
57
62
metrics .put (metricName , metric );
58
63
logger .trace ("New extreme gauge created! Name: {}, description: {}, labels: {}." , metricName , row .getRowDesc (), labels );
59
64
break ;
@@ -67,6 +72,14 @@ public static void initMetrics(List<PCFElement> elements, List<MQObject.MQType>
67
72
metrics .put (metricName , new SimpleGauge (metricName , MetricsReference .getMetricHelp (type ), Labels .QMGR_NAME .name (), Labels .MQ_OBJECT_NAME .name ()));
68
73
logger .trace ("New gauge created! Name: {}, description: {}, labels: {}." , metricName , MetricsReference .getMetricHelp (type ), Labels .MQ_OBJECT_NAME .name ());
69
74
}
75
+ getAdditionalMqObjectMetricsReference ().forEach ((metricInfo , metric ) -> {
76
+ ArrayList <String > labels = new ArrayList <>();
77
+ labels .add (Labels .QMGR_NAME .name ());
78
+ labels .add (Labels .MQ_OBJECT_NAME .name ());
79
+ metrics .put (metric .name , new SimpleGauge (metric .name , metricInfo , labels .toArray (new String [0 ])));
80
+ logger .trace ("New gauge created! Name: {}, description: {}, labels: {}." , metric .name , metricInfo , labels );
81
+ });
82
+
70
83
logger .info ("Successfully initialized {} metrics!" , metrics .size ());
71
84
}
72
85
@@ -81,13 +94,33 @@ public static void updateMetric(String metricName, Double value, String... label
81
94
metrics .get (metricName ).update (value , labels );
82
95
}
83
96
97
+ /**
98
+ * Updates additional metrics, for which need special conversion
99
+ *
100
+ * @param parsedQuery - parameter, needed for getting metric in special family metrics
101
+ */
102
+ public static void updateAdditionalMetrics (Set <String > parsedQuery ) {
103
+ getUpdatedMetricNames ().forEach (updatedMetricName -> complexUpdateMetrics (
104
+ getMetricsUsedToUpdate (
105
+ parsedQuery ,
106
+ updatedMetricName ),
107
+ updatedMetricName ));
108
+ logger .trace ("Additional metrics was updated" );
109
+ }
110
+
111
+ private static void complexUpdateMetrics (
112
+ Map <List <String >, List <Double >> metricsUsedToUpdate ,
113
+ String updatedMetricName ) {
114
+ metricsUsedToUpdate .forEach ((k , l ) -> updateMetric (
115
+ updatedMetricName , getConversionFunction (updatedMetricName ).apply (l ), k .toArray (new String [0 ])));
116
+ logger .trace ("Additional metrics {} was updated" , updatedMetricName );
117
+ }
118
+
84
119
/**
85
120
* Notifies all metrics after each Prometheus scrape.
86
121
*/
87
122
public static void notifyMetricsWereScraped () {
88
- for (MetricInterface metric : metrics .values ()) {
89
- metric .notifyWasScraped ();
90
- }
123
+ metrics .values ().forEach (MetricInterface ::notifyWasScraped );
91
124
}
92
125
93
126
/**
0 commit comments