Skip to content

Commit 013bb74

Browse files
committed
Added support for filtering reporting resources for metrics
1 parent 94fad06 commit 013bb74

File tree

10 files changed

+196
-76
lines changed

10 files changed

+196
-76
lines changed

src/main/java/io/opentelemetry/contrib/generator/core/ResourceModelGenerator.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ private int getRuntimeResourcesCount(List<RuntimeModification> runtimeModificati
120120
int count = 0;
121121
for (RuntimeModification eachModification: CollectionUtils.emptyIfNull(runtimeModifications).stream()
122122
.filter(modification -> !modification.getResourceModificationType().equals(ResourceModificationType.REMOVE))
123-
.collect(Collectors.toList())) {
123+
.toList()) {
124124
int newCount = ((eachModification.getEndAfterMinutes() - eachModification.getStartAfterMinutes())
125125
/ eachModification.getModificationFrequencyMinutes()) * eachModification.getModificationQuantity();
126126
count = count + newCount;
@@ -135,7 +135,7 @@ private void mapChildResources() {
135135
//We will do this only for resources that have some children defined
136136
for (ResourceDefinition parentType: allResources.values().stream()
137137
.filter(resource -> !MapUtils.emptyIfNull(resource.getChildrenDistribution()).isEmpty())
138-
.collect(Collectors.toList())) {
138+
.toList()) {
139139
setParentToChildrenTypes(parentType.getName(), parentType.getChildrenDistribution().keySet());
140140
//For each childType-distribution expression pair
141141
for (Map.Entry<String, String> eachChildTypeExpr: parentType.getChildrenDistribution().entrySet()) {
@@ -192,6 +192,8 @@ private void executeAttributeOperations() {
192192
jelProcessor.eval(expression);
193193
}
194194
}));
195+
//We also want to set the evaluated attributes at this stage
196+
resourceModel.values().forEach(resourceList -> resourceList.forEach(GeneratorResource::setEvaluatedAttributes));
195197
}
196198

197199
private void setParentToChildrenTypes(String parentType, Set<String> childTypes) {
@@ -265,14 +267,15 @@ private int getResourceLevel(String resurceType) {
265267
*/
266268
@SuppressWarnings("unused")
267269
public static void copyFromParent(String parentType, String attribute) {
268-
for (GeneratorResource eachResource: resourceModel.get(ResourceModelExpressions.expressionsGlobalKey.split(":")[1]).stream()
270+
for (GeneratorResource eachResource: resourceModel
271+
.get(ResourceModelExpressions.expressionsGlobalKey.split(":")[1]).stream()
269272
.filter(resource -> resource.getParentsByType()!=null)
270273
.filter(resource -> resource.getParentsByType().containsKey(parentType))
271-
.collect(Collectors.toList())) {
274+
.toList()) {
272275
Optional<KeyValue> parentAttribute = eachResource.getParentsByType().get(parentType).get(0)
273276
.getOTelResource().getAttributesList().stream()
274277
.filter(attrKV -> attrKV.getKey().equals(attribute)).findAny();
275-
String attributeValue = parentAttribute.isEmpty() ? "" : parentAttribute.get().getValue().getStringValue();
278+
String attributeValue = parentAttribute.map(keyValue -> keyValue.getValue().getStringValue()).orElse("");
276279
eachResource.getOTelResourceBuilder().addAttributes(KeyValue.newBuilder()
277280
.setKey(attribute)
278281
.setValue(CommonUtils.buildAnyValue(attributeValue))
@@ -292,11 +295,12 @@ public static void copyFromParent(String parentType, String attribute) {
292295
*/
293296
@SuppressWarnings("unused")
294297
public static void modifyFromParent(String parentType, String sourceAttribute, String targetAttribute, String suffixExpression) {
295-
for (GeneratorResource eachResource: resourceModel.get(ResourceModelExpressions.expressionsGlobalKey.split(":")[1])) {
298+
for (GeneratorResource eachResource: resourceModel.get(ResourceModelExpressions
299+
.expressionsGlobalKey.split(":")[1])) {
296300
Optional<KeyValue> parentAttribute = eachResource.getParentsByType().get(parentType).get(0)
297301
.getOTelResource().getAttributesList().stream()
298302
.filter(attrKV -> attrKV.getKey().equals(sourceAttribute)).findAny();
299-
String attributeValue = parentAttribute.isEmpty() ? "" : parentAttribute.get().getValue().getStringValue();
303+
String attributeValue = parentAttribute.map(keyValue -> keyValue.getValue().getStringValue()).orElse("");
300304
if (suffixExpression.length() > 0) {
301305
attributeValue = attributeValue + jelProcessor.eval(suffixExpression);
302306
}

src/main/java/io/opentelemetry/contrib/generator/core/RuntimeModificationsThread.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,12 @@ public void run() {
6969
&& minsElapsed > eachModification.getStartAfterMinutes()
7070
&& minsElapsed <= eachModification.getEndAfterMinutes()) {
7171
switch (eachModification.getResourceModificationType()) {
72-
case ADD:
73-
executeAddModification(eachModification.getResourceType(), eachModification.getModificationQuantity());
74-
break;
75-
case REMOVE:
76-
executeRemoveModification(eachModification.getResourceType(), eachModification.getModificationQuantity());
77-
break;
78-
case CHURN:
79-
executeChurnModification(eachModification.getResourceType(), eachModification.getModificationQuantity());
72+
case ADD ->
73+
executeAddModification(eachModification.getResourceType(), eachModification.getModificationQuantity());
74+
case REMOVE ->
75+
executeRemoveModification(eachModification.getResourceType(), eachModification.getModificationQuantity());
76+
case CHURN ->
77+
executeChurnModification(eachModification.getResourceType(), eachModification.getModificationQuantity());
8078
}
8179
modificationsUpdateTimestamps.put(eachModification.getModificationId(), currTime);
8280
}

src/main/java/io/opentelemetry/contrib/generator/core/dto/GeneratorResource.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class GeneratorResource {
4141
private String type; //type of this resource. There can be multiple resources of this type.
4242
private boolean isActive; //if this resource is currently reporting any MELT data
4343
private Resource.Builder otelResource; //OTel representation of the resource
44+
private Map<String, String> evaluatedAttributes;
4445
private Map<String, List<GeneratorResource>> childrenByType; //list of all the child resources of this resource, grouped by type
4546
private Map<String, List<GeneratorResource>> parentsByType; //list of all the parent resources of this resource, grouped by type
4647

@@ -66,6 +67,13 @@ public Map<String, Integer> getParentTypeCounts() {
6667
return parentTypeCounts;
6768
}
6869

70+
public void setEvaluatedAttributes() {
71+
evaluatedAttributes = new HashMap<>();
72+
for (KeyValue eachKv: CollectionUtils.emptyIfNull(otelResource.getAttributesList())) {
73+
evaluatedAttributes.put(eachKv.getKey(), CommonUtils.anyValueToString(eachKv.getValue()));
74+
}
75+
}
76+
6977
@Override
7078
public String toString() {
7179
var separator = ",\n";
@@ -102,10 +110,9 @@ public int hashCode() {
102110

103111
@Override
104112
public boolean equals(Object generatorResource) {
105-
if (!(generatorResource instanceof GeneratorResource)) {
113+
if (!(generatorResource instanceof GeneratorResource compareResource)) {
106114
return false;
107115
}
108-
GeneratorResource compareResource = (GeneratorResource) generatorResource;
109116
if (!Objects.equals(this.type, compareResource.type)) {
110117
return false;
111118
}

src/main/java/io/opentelemetry/contrib/generator/telemetry/logs/LogGeneratorThread.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.opentelemetry.contrib.generator.telemetry.dto.GeneratorState;
2323
import io.opentelemetry.contrib.generator.telemetry.jel.JELProvider;
2424
import io.opentelemetry.contrib.generator.telemetry.logs.dto.LogDefinition;
25+
import io.opentelemetry.contrib.generator.telemetry.misc.Constants;
2526
import io.opentelemetry.contrib.generator.telemetry.transport.PayloadHandler;
2627
import io.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest;
2728
import io.opentelemetry.proto.common.v1.AnyValue;
@@ -82,8 +83,8 @@ public void run() {
8283
.setResource(eachResource)
8384
.addScopeLogs(ScopeLogs.newBuilder()
8485
.setScope(InstrumentationScope.newBuilder()
85-
.setName("@opentelemetry/vodka-exporter")
86-
.setVersion("22.10.0")
86+
.setName(Constants.SELF_NAME)
87+
.setVersion(Constants.SELF_VERSION)
8788
.build())
8889
.addAllLogRecords(otelLogs)
8990
.build())
@@ -120,7 +121,7 @@ private List<Resource> getResourceSubsetByPostCount(String resourceName, int res
120121
//resourceEndIndex is exclusive
121122
int resourceEndIndex;
122123
List<GeneratorResource> resourcesInResourceModel = ResourceModelProvider.getResourceModel(requestID).get(resourceName).stream()
123-
.filter(GeneratorResource::isActive).collect(Collectors.toList());
124+
.filter(GeneratorResource::isActive).toList();
124125
if (resourceCount >= resourcesInResourceModel.size()) {
125126
resourceEndIndex = resourcesInResourceModel.size();
126127
} else {

src/main/java/io/opentelemetry/contrib/generator/telemetry/logs/dto/Logs.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
import java.util.List;
2424
import java.util.Set;
25-
import java.util.stream.Collectors;
2625

2726
@Data
2827
public class Logs {

0 commit comments

Comments
 (0)