Skip to content

Commit 648e0c3

Browse files
authored
Merge pull request #140 from Cinimex-Informatica/feature/issue139_incorrect_work
Fixed bug related to incorrect work with MQ 9.0.0.x
2 parents c8fa8af + e38ee8f commit 648e0c3

File tree

2 files changed

+24
-31
lines changed

2 files changed

+24
-31
lines changed

src/main/java/ru/cinimex/exporter/prometheus/metrics/MetricManagerUtils.java

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,7 @@
22

33
import io.prometheus.client.CollectorRegistry;
44

5-
import java.util.ArrayList;
6-
import java.util.Collections;
7-
import java.util.Enumeration;
8-
import java.util.HashMap;
9-
import java.util.List;
10-
import java.util.Map;
11-
import java.util.Objects;
12-
import java.util.Set;
5+
import java.util.*;
136
import java.util.function.Consumer;
147
import java.util.function.Function;
158
import java.util.stream.Collectors;
@@ -79,7 +72,7 @@ public static Function<List<Double>, Double> getConversionFunction(String update
7972
return MetricManagerUtils::division;
8073
case "mqobject_get_average_destructive_mqget_persistent_and_non_persistent_message_size_bytes":
8174
return MetricManagerUtils::averageSum;
82-
case "mqobject_get_queue_queue_fill_percentage":
75+
case "mqobject_queue_queue_fill_percentage":
8376
return MetricManagerUtils::divisionInPercentage;
8477
default:
8578
return MetricManagerUtils::defaultConversion;
@@ -124,19 +117,22 @@ public static Map<List<String>, List<Double>> getMetricsUsedToUpdate(Set<String>
124117
if (!arrayListDoubleMap.isEmpty()) mapWithValues.put(metricFamilySamples.name, arrayListDoubleMap);
125118
});
126119

127-
List<Map<List<String>, Double>> listWithValues = metricsNamesUsedToUpdate.stream()
128-
.map(mapWithValues::get)
129-
.collect(Collectors.toList());
130120
Map<List<String>, List<Double>> params = new HashMap<>();
131-
listWithValues.forEach(l -> l.forEach((k, v) -> {
132-
if (!params.containsKey(k)) params.put(k, new ArrayList<>(Collections.singletonList(v)));
133-
else {
134-
List<Double> paramList = params.get(k);
135-
paramList.add(v);
136-
params.replace(k, paramList);
121+
122+
if (mapWithValues.size() == metricsNamesUsedToUpdate.size()) {
123+
List<Map<List<String>, Double>> listWithValues = metricsNamesUsedToUpdate.stream()
124+
.map(mapWithValues::get)
125+
.collect(Collectors.toList());
126+
listWithValues.forEach(l -> l.forEach((k, v) -> {
127+
if (!params.containsKey(k)) params.put(k, new ArrayList<>(Collections.singletonList(v)));
128+
else {
129+
List<Double> paramList = params.get(k);
130+
paramList.add(v);
131+
params.replace(k, paramList);
132+
}
137133
}
138-
}
139-
));
134+
));
135+
}
140136
return params;
141137
}
142138

src/main/java/ru/cinimex/exporter/prometheus/metrics/MetricsManager.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,10 @@
66
import ru.cinimex.exporter.mq.pcf.PCFElement;
77
import ru.cinimex.exporter.mq.pcf.PCFElementRow;
88

9-
import java.util.ArrayList;
10-
import java.util.Arrays;
11-
import java.util.HashMap;
12-
import java.util.List;
13-
import java.util.Map;
14-
import java.util.Set;
9+
import java.util.*;
1510

16-
import static ru.cinimex.exporter.prometheus.metrics.MetricsReference.getAdditionalMqObjectMetricsReference;
1711
import static ru.cinimex.exporter.prometheus.metrics.MetricManagerUtils.*;
12+
import static ru.cinimex.exporter.prometheus.metrics.MetricsReference.getAdditionalMqObjectMetricsReference;
1813

1914
/**
2015
* Class is used to manage work of all metrics.
@@ -65,7 +60,7 @@ public static void initMetrics(List<PCFElement> elements, List<MQObject.MQType>
6560
default:
6661
logger.error(
6762
"Error during metrics initialization: Unknown metric type! Make sure it is one " + "of: {}",
68-
(Object[]) MetricsReference.Metric.Type.values());
63+
MetricsReference.Metric.Type.values());
6964
}
7065
}
7166
}
@@ -115,9 +110,11 @@ public static void updateAdditionalMetrics(Set<String> parsedQuery) {
115110
private static void complexUpdateMetrics(
116111
Map<List<String>, List<Double>> metricsUsedToUpdate,
117112
String updatedMetricName) {
118-
metricsUsedToUpdate.forEach((k, l) -> updateMetric(
119-
updatedMetricName, getConversionFunction(updatedMetricName).apply(l), k.toArray(new String[0])));
120-
logger.trace("Additional metrics {} was updated", updatedMetricName);
113+
if (metricsUsedToUpdate != null) {
114+
metricsUsedToUpdate.forEach((k, l) -> updateMetric(
115+
updatedMetricName, getConversionFunction(updatedMetricName).apply(l), k.toArray(new String[0])));
116+
logger.trace("Additional metrics {} were updated", updatedMetricName);
117+
}
121118
}
122119

123120
/**

0 commit comments

Comments
 (0)