Skip to content

Commit c7786a1

Browse files
move Metric inside the project to prepare for moving to otel
1 parent 74980f8 commit c7786a1

21 files changed

+297
-22
lines changed

src/main/java/com/splunk/ibm/mq/metricscollector/ChannelMetricsCollector.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import static com.ibm.mq.constants.CMQC.MQRC_SELECTOR_ERROR;
1919
import static com.ibm.mq.constants.CMQCFC.MQRCCF_CHL_STATUS_NOT_FOUND;
2020

21-
import com.appdynamics.extensions.metrics.Metric;
2221
import com.google.common.collect.Lists;
2322
import com.ibm.mq.constants.CMQC;
2423
import com.ibm.mq.constants.CMQCFC;

src/main/java/com/splunk/ibm/mq/metricscollector/InquireChannelCmdCollector.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package com.splunk.ibm.mq.metricscollector;
1717

18-
import com.appdynamics.extensions.metrics.Metric;
1918
import com.google.common.collect.Lists;
2019
import com.ibm.mq.constants.CMQCFC;
2120
import com.ibm.mq.constants.MQConstants;

src/main/java/com/splunk/ibm/mq/metricscollector/InquireQueueManagerCmdCollector.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package com.splunk.ibm.mq.metricscollector;
1717

18-
import com.appdynamics.extensions.metrics.Metric;
1918
import com.google.common.collect.Lists;
2019
import com.ibm.mq.constants.CMQCFC;
2120
import com.ibm.mq.constants.MQConstants;

src/main/java/com/splunk/ibm/mq/metricscollector/InquireTStatusCmdCollector.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package com.splunk.ibm.mq.metricscollector;
1717

18-
import com.appdynamics.extensions.metrics.Metric;
1918
import com.google.common.collect.Lists;
2019
import com.ibm.mq.constants.CMQC;
2120
import com.ibm.mq.constants.CMQCFC;

src/main/java/com/splunk/ibm/mq/metricscollector/ListenerMetricsCollector.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package com.splunk.ibm.mq.metricscollector;
1717

18-
import com.appdynamics.extensions.metrics.Metric;
1918
import com.google.common.collect.Lists;
2019
import com.ibm.mq.constants.CMQCFC;
2120
import com.ibm.mq.headers.pcf.PCFException;
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
/*
2+
* Copyright Splunk Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.splunk.ibm.mq.metricscollector;
17+
18+
import com.appdynamics.extensions.metrics.DefaultMetricProperties;
19+
import com.appdynamics.extensions.metrics.MetricProperties;
20+
import com.appdynamics.extensions.metrics.MetricPropertiesBuilder;
21+
import com.appdynamics.extensions.util.AssertUtils;
22+
import com.appdynamics.extensions.util.MetricPathUtils;
23+
import java.util.Map;
24+
25+
public class Metric {
26+
private String metricName;
27+
private String metricValue;
28+
private String metricPath;
29+
private MetricProperties metricProperties;
30+
31+
public Metric(String metricName, String metricValue, String metricPath) {
32+
AssertUtils.assertNotNull(metricName, "Metric name cannot be null");
33+
AssertUtils.assertNotNull(metricValue, "Metric value cannot be null");
34+
AssertUtils.assertNotNull(metricPath, "Metric path cannot be null");
35+
this.metricName = metricName;
36+
this.metricValue = metricValue;
37+
this.metricPath = metricPath;
38+
this.metricProperties = new DefaultMetricProperties(metricName);
39+
}
40+
41+
public Metric(
42+
String metricName,
43+
String metricValue,
44+
String metricPath,
45+
String aggregationType,
46+
String timeRollUpType,
47+
String clusterRollUpType) {
48+
this(metricName, metricValue, metricPath);
49+
this.metricProperties.setAggregationType(aggregationType);
50+
this.metricProperties.setTimeRollUpType(timeRollUpType);
51+
this.metricProperties.setClusterRollUpType(clusterRollUpType);
52+
}
53+
54+
public Metric(
55+
String metricName, String metricValue, String metricPath, Map<String, ?> metricProperties) {
56+
this(metricName, metricValue, metricPath);
57+
AssertUtils.assertNotNull(metricProperties, "Metric Properties cannot be null");
58+
this.metricProperties = buildMetricProperties(metricProperties);
59+
}
60+
61+
/**
62+
* Constructor for building the metric path with replacements, with metric properties. Use this
63+
* constructor when you want to apply metric replacements and build the metric path.
64+
*
65+
* @param metricName Name of the metric
66+
* @param metricValue Value of the metric
67+
* @param metricProperties Map of metric properties
68+
* @param metricPrefix Metric Path prefix
69+
* @param metricPathTokens All tokens in metric path
70+
*/
71+
public Metric(
72+
String metricName,
73+
String metricValue,
74+
Map<String, ?> metricProperties,
75+
String metricPrefix,
76+
String... metricPathTokens) {
77+
this(
78+
MetricPathUtils.getReplacedString(metricName),
79+
metricValue,
80+
MetricPathUtils.buildMetricPath(metricPrefix, metricPathTokens),
81+
metricProperties);
82+
}
83+
84+
/**
85+
* Constructor for building the metric path with replacements. Use this constructor when you want
86+
* to apply metric replacements and build the metric path.
87+
*
88+
* @param metricName Name of the metric
89+
* @param metricValue Value of the metric
90+
* @param metricPrefix Metric Path prefix
91+
* @param metricPathTokens All tokens in metric path
92+
*/
93+
public Metric(
94+
String metricName, String metricValue, String metricPrefix, String... metricPathTokens) {
95+
this(
96+
MetricPathUtils.getReplacedString(metricName),
97+
metricValue,
98+
MetricPathUtils.buildMetricPath(metricPrefix, metricPathTokens));
99+
}
100+
101+
private MetricProperties buildMetricProperties(Map<String, ?> metricProperties) {
102+
MetricPropertiesBuilder metricPropertiesBuilder =
103+
new MetricPropertiesBuilder(metricProperties, metricName);
104+
return metricPropertiesBuilder.buildMetricProperties();
105+
}
106+
107+
public String getMetricName() {
108+
return metricName;
109+
}
110+
111+
public String getMetricValue() {
112+
return metricValue;
113+
}
114+
115+
public void setMetricValue(String metricValue) {
116+
this.metricValue = metricValue;
117+
}
118+
119+
public String getMetricPath() {
120+
return metricPath;
121+
}
122+
123+
public void setMetricPath(String metricPath) {
124+
this.metricPath = metricPath;
125+
}
126+
127+
public MetricProperties getMetricProperties() {
128+
return metricProperties;
129+
}
130+
131+
public String getAggregationType() {
132+
return metricProperties.getAggregationType();
133+
}
134+
135+
public String getTimeRollUpType() {
136+
return metricProperties.getTimeRollUpType();
137+
}
138+
139+
public String getClusterRollUpType() {
140+
return metricProperties.getClusterRollUpType();
141+
}
142+
143+
public String toString() {
144+
return String.format(
145+
"[%s/%s/%s] [%s]=[%s]]",
146+
metricProperties.getAggregationType(),
147+
metricProperties.getTimeRollUpType(),
148+
metricProperties.getClusterRollUpType(),
149+
getMetricPath(),
150+
getMetricValue());
151+
}
152+
}

src/main/java/com/splunk/ibm/mq/metricscollector/MetricCreator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package com.splunk.ibm.mq.metricscollector;
1717

18-
import com.appdynamics.extensions.metrics.Metric;
1918
import com.splunk.ibm.mq.config.QueueManager;
2019
import com.splunk.ibm.mq.config.WMQMetricOverride;
2120
import javax.annotation.Nullable;

src/main/java/com/splunk/ibm/mq/metricscollector/MetricsCollectorContext.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import static java.util.Collections.emptyList;
1919
import static java.util.Collections.emptyMap;
2020

21-
import com.appdynamics.extensions.metrics.Metric;
2221
import com.ibm.mq.headers.MQDataException;
2322
import com.ibm.mq.headers.pcf.PCFException;
2423
import com.ibm.mq.headers.pcf.PCFMessage;

src/main/java/com/splunk/ibm/mq/metricscollector/QueueCollectionBuddy.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import static java.util.Collections.emptyList;
2020
import static java.util.Collections.singletonList;
2121

22-
import com.appdynamics.extensions.metrics.Metric;
2322
import com.google.common.collect.Lists;
2423
import com.ibm.mq.constants.CMQC;
2524
import com.ibm.mq.headers.MQDataException;

src/main/java/com/splunk/ibm/mq/metricscollector/QueueManagerMetricsCollector.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package com.splunk.ibm.mq.metricscollector;
1717

18-
import com.appdynamics.extensions.metrics.Metric;
1918
import com.google.common.collect.Lists;
2019
import com.ibm.mq.constants.CMQCFC;
2120
import com.ibm.mq.headers.pcf.PCFMessage;

src/main/java/com/splunk/ibm/mq/metricscollector/ReadConfigurationEventQueueCollector.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package com.splunk.ibm.mq.metricscollector;
1717

18-
import com.appdynamics.extensions.metrics.Metric;
1918
import com.google.common.collect.Lists;
2019
import com.ibm.mq.MQException;
2120
import com.ibm.mq.MQGetMessageOptions;
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
/*
2+
* Copyright Splunk Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.splunk.ibm.mq.metricscollector;
17+
18+
import com.appdynamics.extensions.logging.ExtensionsLoggerFactory;
19+
import com.appdynamics.extensions.metrics.DeltaMetricsCalculator;
20+
import com.appdynamics.extensions.util.AssertUtils;
21+
import com.appdynamics.extensions.util.NumberUtils;
22+
import com.google.common.base.Joiner;
23+
import com.google.common.base.Splitter;
24+
import java.math.BigDecimal;
25+
import java.math.RoundingMode;
26+
import java.util.ArrayList;
27+
import java.util.List;
28+
import java.util.Map;
29+
import org.slf4j.Logger;
30+
import org.slf4j.LoggerFactory;
31+
32+
public class Transformer {
33+
private static Logger logger = LoggerFactory.getLogger(Transformer.class);
34+
private List<Metric> metricList;
35+
private DeltaTranform deltaTranform = new DeltaTranform();
36+
private MultiplierTransform multiplierTransform = new MultiplierTransform();
37+
private ConvertTransform convertTransform = new ConvertTransform();
38+
private AliasTransform aliasTransform = new AliasTransform();
39+
40+
public Transformer(List<Metric> metricList) {
41+
AssertUtils.assertNotNull(metricList, "Metrics List cannot be null");
42+
this.metricList = metricList;
43+
}
44+
45+
public void transform() {
46+
for (Metric metric : metricList) {
47+
applyTransforms(metric);
48+
}
49+
}
50+
51+
private void applyTransforms(Metric metric) {
52+
aliasTransform.applyAlias(metric);
53+
if (metric.getMetricValue() != null) {
54+
convertTransform.convert(metric);
55+
}
56+
if (metric.getMetricValue() != null) {
57+
deltaTranform.applyDelta(metric);
58+
}
59+
if (metric.getMetricValue() != null) {
60+
multiplierTransform.multiply(metric);
61+
}
62+
if (metric.getMetricValue() != null) {
63+
try {
64+
BigDecimal value = new BigDecimal(metric.getMetricValue());
65+
metric.setMetricValue(value.setScale(0, RoundingMode.HALF_UP).toBigInteger().toString());
66+
} catch (NumberFormatException e) {
67+
logger.debug(e.toString());
68+
}
69+
}
70+
}
71+
}
72+
73+
class AliasTransform {
74+
Splitter PIPE_SPLITTER = Splitter.on('|').trimResults();
75+
76+
void applyAlias(Metric metric) {
77+
String metricName = metric.getMetricName();
78+
String alias = metric.getMetricProperties().getAlias();
79+
String metricPath = metric.getMetricPath();
80+
List<String> splitList = new ArrayList<>(PIPE_SPLITTER.splitToList(metricPath));
81+
if (splitList.size() > 0) {
82+
String metricNameFromSplit = splitList.get(splitList.size() - 1);
83+
if (metricNameFromSplit.equals(metricName)) {
84+
splitList.remove(splitList.size() - 1);
85+
splitList.add(alias);
86+
metric.setMetricPath(Joiner.on("|").join(splitList));
87+
}
88+
}
89+
}
90+
}
91+
92+
class ConvertTransform {
93+
private static final org.slf4j.Logger logger =
94+
ExtensionsLoggerFactory.getLogger(ConvertTransform.class);
95+
96+
void convert(Metric metric) {
97+
Map<Object, Object> convertMap = metric.getMetricProperties().getConversionValues();
98+
String metricValue = metric.getMetricValue();
99+
if (convertMap != null && !convertMap.isEmpty() && convertMap.containsKey(metricValue)) {
100+
metric.setMetricValue(convertMap.get(metricValue).toString());
101+
logger.debug(
102+
"Applied conversion on {} and replaced value {} with {}",
103+
metric.getMetricPath(),
104+
metricValue,
105+
metric.getMetricValue());
106+
}
107+
}
108+
}
109+
110+
class DeltaTranform {
111+
private static final org.slf4j.Logger logger =
112+
ExtensionsLoggerFactory.getLogger(DeltaTranform.class);
113+
private static DeltaMetricsCalculator deltaCalculator = new DeltaMetricsCalculator(10);
114+
115+
void applyDelta(Metric metric) {
116+
String metricValue = metric.getMetricValue();
117+
if (NumberUtils.isNumber(metricValue) && metric.getMetricProperties().getDelta() == true) {
118+
BigDecimal deltaValue =
119+
deltaCalculator.calculateDelta(metric.getMetricPath(), new BigDecimal(metricValue));
120+
if (deltaValue != null) {
121+
metric.setMetricValue(deltaValue.toString());
122+
} else {
123+
metric.setMetricValue(null);
124+
}
125+
}
126+
}
127+
}
128+
129+
class MultiplierTransform {
130+
131+
void multiply(Metric metric) {
132+
String metricValue = metric.getMetricValue();
133+
if (NumberUtils.isNumber(metricValue)) {
134+
BigDecimal metricValueBigD = new BigDecimal(metricValue);
135+
metric.setMetricValue(
136+
(metricValueBigD.multiply(metric.getMetricProperties().getMultiplier())).toString());
137+
}
138+
}
139+
}

src/main/java/com/splunk/ibm/mq/opentelemetry/MQOtelTranslator.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@
1515
*/
1616
package com.splunk.ibm.mq.opentelemetry;
1717

18-
import com.appdynamics.extensions.metrics.Metric;
19-
import com.appdynamics.extensions.util.AssertUtils;
2018
import com.google.common.base.Function;
2119
import com.google.common.base.Splitter;
20+
import com.splunk.ibm.mq.metricscollector.Metric;
2221
import io.opentelemetry.api.common.Attributes;
2322
import io.opentelemetry.api.common.AttributesBuilder;
2423
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
@@ -283,7 +282,9 @@ public String toString() {
283282
public MQOtelTranslator() {}
284283

285284
public Collection<MetricData> translate(List<Metric> metricList) {
286-
AssertUtils.assertNotNull(metricList, "Metrics List cannot be null");
285+
if (metricList == null || metricList.isEmpty()) {
286+
throw new IllegalArgumentException("Metrics List cannot be null");
287+
}
287288
Resource res = Resource.empty();
288289
InstrumentationScopeInfo scopeInfo = InstrumentationScopeInfo.create("websphere/mq");
289290
List<MetricData> metrics = new ArrayList<>();

0 commit comments

Comments
 (0)