Skip to content

Commit 8b807b9

Browse files
committed
PR updates
1 parent 8cac9be commit 8b807b9

File tree

2 files changed

+27
-22
lines changed

2 files changed

+27
-22
lines changed

src/main/java/com/arpnetworking/metrics/mad/sources/TransformingSource.java

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import com.arpnetworking.steno.LogValueMapFactory;
3030
import com.arpnetworking.steno.Logger;
3131
import com.arpnetworking.steno.LoggerFactory;
32+
import com.arpnetworking.tsdcore.model.DefaultKey;
33+
import com.arpnetworking.tsdcore.model.Key;
3234
import com.arpnetworking.tsdcore.model.MetricType;
3335
import com.arpnetworking.tsdcore.model.Quantity;
3436
import com.arpnetworking.utility.RegexAndMapReplacer;
@@ -41,7 +43,6 @@
4143
import net.sf.oval.constraint.NotNull;
4244

4345
import java.util.Collections;
44-
import java.util.List;
4546
import java.util.Map;
4647
import java.util.regex.Matcher;
4748
import java.util.regex.Pattern;
@@ -90,9 +91,9 @@ private TransformingSource(final Builder builder) {
9091
super(builder);
9192
_source = builder._source;
9293

93-
final ImmutableMap.Builder<Pattern, List<String>> findReplaceBuilder =
94+
final ImmutableMap.Builder<Pattern, ImmutableList<String>> findReplaceBuilder =
9495
ImmutableMap.builderWithExpectedSize(builder._findAndReplace.size());
95-
for (final Map.Entry<String, ? extends List<String>> entry : builder._findAndReplace.entrySet()) {
96+
for (final ImmutableMap.Entry<String, ? extends ImmutableList<String>> entry : builder._findAndReplace.entrySet()) {
9697
findReplaceBuilder.put(Pattern.compile(entry.getKey()), ImmutableList.copyOf(entry.getValue()));
9798
}
9899
_findAndReplace = findReplaceBuilder.build();
@@ -104,7 +105,7 @@ private TransformingSource(final Builder builder) {
104105
}
105106

106107
private final Source _source;
107-
private final ImmutableMap<Pattern, List<String>> _findAndReplace;
108+
private final ImmutableMap<Pattern, ImmutableList<String>> _findAndReplace;
108109
private final ImmutableMap<String, DimensionInjection> _inject;
109110
private final ImmutableList<String> _remove;
110111

@@ -116,7 +117,7 @@ private TransformingSource(final Builder builder) {
116117

117118
/* package private */ TransformingObserver(
118119
final TransformingSource source,
119-
final Map<Pattern, List<String>> findAndReplace,
120+
final ImmutableMap<Pattern, ImmutableList<String>> findAndReplace,
120121
final ImmutableMap<String, DimensionInjection> inject,
121122
final ImmutableList<String> remove) {
122123
_source = source;
@@ -137,11 +138,11 @@ public void notify(final Observable observable, final Object event) {
137138

138139
// Merge the metrics in the record together
139140
final Record record = (Record) event;
140-
final Map<ImmutableMap<String, String>, Map<String, MergingMetric>> mergedMetrics = Maps.newHashMap();
141+
final Map<Key, Map<String, MergingMetric>> mergedMetrics = Maps.newHashMap();
141142
for (final Map.Entry<String, ? extends Metric> metric : record.getMetrics().entrySet()) {
142143
boolean found = false;
143144
final String metricName = metric.getKey();
144-
for (final Map.Entry<Pattern, List<String>> findAndReplace : _findAndReplace.entrySet()) {
145+
for (final Map.Entry<Pattern, ImmutableList<String>> findAndReplace : _findAndReplace.entrySet()) {
145146
final Pattern metricPattern = findAndReplace.getKey();
146147
final Matcher matcher = metricPattern.matcher(metricName);
147148
if (matcher.find()) {
@@ -158,7 +159,7 @@ public void notify(final Observable observable, final Object event) {
158159
metric.getValue(),
159160
replacedString,
160161
mergedMetrics,
161-
getModifiedDimensions(record.getDimensions(), Collections.emptyMap(), ImmutableList.of()));
162+
getModifiedDimensions(record.getDimensions(), Collections.emptyMap(), consumedDimensions));
162163
} else {
163164
final String newMetricName = replacedString.substring(0, tagsStart);
164165
final Map<String, String> parsedTags = TAG_SPLITTER.split(replacedString.substring(tagsStart + 1));
@@ -184,7 +185,7 @@ public void notify(final Observable observable, final Object event) {
184185

185186
// Raise the merged record event with this source's observers
186187
// NOTE: Do not leak instances of MergingMetric since it is mutable
187-
for (Map.Entry<ImmutableMap<String, String>, Map<String, MergingMetric>> entry : mergedMetrics.entrySet()) {
188+
for (final Map.Entry<Key, Map<String, MergingMetric>> entry : mergedMetrics.entrySet()) {
188189
_source.notify(
189190
ThreadLocalBuilder.build(
190191
DefaultRecord.Builder.class,
@@ -198,16 +199,15 @@ public void notify(final Observable observable, final Object event) {
198199
.setId(record.getId())
199200
.setTime(record.getTime())
200201
.setAnnotations(record.getAnnotations())
201-
.setDimensions(entry.getKey())));
202+
.setDimensions(entry.getKey().getParameters())));
202203
}
203204
}
204205

205-
private ImmutableMap<String, String> getModifiedDimensions(
206+
private Key getModifiedDimensions(
206207
final ImmutableMap<String, String> inputDimensions,
207208
final Map<String, String> add,
208209
final ImmutableList<String> remove) {
209-
final Map<String, String> finalTags = Maps.newHashMap();
210-
finalTags.putAll(inputDimensions);
210+
final Map<String, String> finalTags = Maps.newHashMap(inputDimensions);
211211
// Remove the dimensions that we consumed in the replacement
212212
remove.forEach(finalTags::remove);
213213
_remove.forEach(finalTags::remove);
@@ -217,14 +217,17 @@ private ImmutableMap<String, String> getModifiedDimensions(
217217
inject.isReplaceExisting() || oldValue == null ? inject.getValue() : oldValue));
218218
finalTags.putAll(add);
219219

220-
return ImmutableMap.copyOf(finalTags);
220+
return new DefaultKey(ImmutableMap.copyOf(finalTags));
221221
}
222222

223-
private void merge(final Metric metric, final String key,
224-
final Map<ImmutableMap<String, String>, Map<String, MergingMetric>> mergedMetrics,
225-
final ImmutableMap<String, String> dimensions) {
223+
private void merge(
224+
final Metric metric,
225+
final String key,
226+
final Map<Key, Map<String, MergingMetric>> mergedMetrics,
227+
final Key dimensionKey) {
226228

227-
final Map<String, MergingMetric> mergedMetricsForDimensions = mergedMetrics.computeIfAbsent(dimensions, k -> Maps.newHashMap());
229+
final Map<String, MergingMetric> mergedMetricsForDimensions =
230+
mergedMetrics.computeIfAbsent(dimensionKey, k -> Maps.newHashMap());
228231
final MergingMetric mergedMetric = mergedMetricsForDimensions.get(key);
229232
if (mergedMetric == null) {
230233
// This is the first time this metric is being merged into
@@ -244,7 +247,7 @@ private void merge(final Metric metric, final String key,
244247
}
245248

246249
private final TransformingSource _source;
247-
private final Map<Pattern, List<String>> _findAndReplace;
250+
private final ImmutableMap<Pattern, ImmutableList<String>> _findAndReplace;
248251
private final ImmutableMap<String, DimensionInjection> _inject;
249252
private final ImmutableList<String> _remove;
250253
}
@@ -385,7 +388,7 @@ public Builder setSource(final Source value) {
385388
* @param value The find and replace expression map.
386389
* @return This instance of <code>Builder</code>.
387390
*/
388-
public Builder setFindAndReplace(final ImmutableMap<String, ? extends List<String>> value) {
391+
public Builder setFindAndReplace(final ImmutableMap<String, ? extends ImmutableList<String>> value) {
389392
_findAndReplace = value;
390393
return this;
391394
}
@@ -420,7 +423,7 @@ protected Builder self() {
420423
@NotNull
421424
private Source _source;
422425
@NotNull
423-
private ImmutableMap<String, ? extends List<String>> _findAndReplace = ImmutableMap.of();
426+
private ImmutableMap<String, ? extends ImmutableList<String>> _findAndReplace = ImmutableMap.of();
424427
@NotNull
425428
private ImmutableMap<String, DimensionInjection> _inject = ImmutableMap.of();
426429
@NotNull

src/test/java/com/arpnetworking/metrics/mad/sources/TransformingSourceTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,11 +335,13 @@ public void testInjectTagWithCapture() {
335335
.build();
336336

337337
final Record actualRecord = mapRecord(matchingRecord);
338+
final Map<String, String> expectedDimensions = Maps.newHashMap(matchingRecord.getDimensions());
339+
expectedDimensions.remove("animal");
338340

339341
final Record expectedRecord = TestBeanFactory.createRecordBuilder()
340342
.setAnnotations(matchingRecord.getAnnotations())
341343
.setTime(matchingRecord.getTime())
342-
.setDimensions(matchingRecord.getDimensions())
344+
.setDimensions(ImmutableMap.copyOf(expectedDimensions))
343345
.setMetrics(ImmutableMap.of(
344346
"tagged/frog/animal",
345347
TestBeanFactory.createMetricBuilder()

0 commit comments

Comments
 (0)