Skip to content

Commit 3a40285

Browse files
committed
add Azure vm resource provider
1 parent a922caf commit 3a40285

File tree

1 file changed

+53
-36
lines changed

1 file changed

+53
-36
lines changed

azure-resources/src/main/java/io/opentelemetry/contrib/azure/resource/AzureVmResourceProvider.java

Lines changed: 53 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@
1818
import java.net.MalformedURLException;
1919
import java.net.URL;
2020
import java.time.Duration;
21+
import java.util.HashMap;
22+
import java.util.Map;
2123
import java.util.Objects;
2224
import java.util.Optional;
25+
import java.util.function.BiConsumer;
2326
import java.util.function.Supplier;
2427
import java.util.logging.Level;
2528
import java.util.logging.Logger;
@@ -30,6 +33,20 @@
3033

3134
public class AzureVmResourceProvider extends CloudResourceProvider {
3235

36+
private static final Map<String, AttributeKey<String>> COMPUTE_MAPPING = new HashMap<>();
37+
38+
static {
39+
COMPUTE_MAPPING.put("location", ResourceAttributes.CLOUD_REGION);
40+
COMPUTE_MAPPING.put("resourceId", ResourceAttributes.CLOUD_RESOURCE_ID);
41+
COMPUTE_MAPPING.put("vmId", ResourceAttributes.HOST_ID);
42+
COMPUTE_MAPPING.put("name", ResourceAttributes.HOST_NAME);
43+
COMPUTE_MAPPING.put("vmSize", ResourceAttributes.HOST_TYPE);
44+
COMPUTE_MAPPING.put("osType", ResourceAttributes.OS_TYPE);
45+
COMPUTE_MAPPING.put("version", ResourceAttributes.OS_VERSION);
46+
COMPUTE_MAPPING.put("vmScaleSetName", AttributeKey.stringKey("azure.vm.scaleset.name"));
47+
COMPUTE_MAPPING.put("sku", AttributeKey.stringKey("azure.vm.sku"));
48+
}
49+
3350
private static final JsonFactory JSON_FACTORY = new JsonFactory();
3451

3552
private static final Duration TIMEOUT = Duration.ofSeconds(1);
@@ -94,43 +111,43 @@ static void parseResponse(JsonParser parser, AttributesBuilder builder) throws I
94111
return;
95112
}
96113

114+
consumeJson(
115+
parser,
116+
(name, value) -> {
117+
try {
118+
if (name.equals("compute")) {
119+
consumeCompute(parser, builder);
120+
} else {
121+
parser.skipChildren();
122+
}
123+
} catch (IOException e) {
124+
throw new IllegalStateException(e);
125+
}
126+
});
127+
}
128+
129+
private static void consumeCompute(JsonParser parser, AttributesBuilder builder)
130+
throws IOException {
131+
consumeJson(
132+
parser,
133+
(computeName, computeValue) -> {
134+
AttributeKey<String> key = COMPUTE_MAPPING.get(computeName);
135+
if (key != null) {
136+
builder.put(key, computeValue);
137+
} else {
138+
try {
139+
parser.skipChildren();
140+
} catch (IOException e) {
141+
throw new IllegalStateException(e);
142+
}
143+
}
144+
});
145+
}
146+
147+
private static void consumeJson(JsonParser parser, BiConsumer<String, String> consumer)
148+
throws IOException {
97149
while (parser.nextToken() != JsonToken.END_OBJECT) {
98-
String value = parser.nextTextValue();
99-
switch (parser.currentName()) {
100-
case "compute":
101-
// go inside
102-
break;
103-
case "location":
104-
builder.put(ResourceAttributes.CLOUD_REGION, value);
105-
break;
106-
case "resourceId":
107-
builder.put(ResourceAttributes.CLOUD_RESOURCE_ID, value);
108-
break;
109-
case "vmId":
110-
builder.put(ResourceAttributes.HOST_ID, value);
111-
break;
112-
case "name":
113-
builder.put(ResourceAttributes.HOST_NAME, value);
114-
break;
115-
case "vmSize":
116-
builder.put(ResourceAttributes.HOST_TYPE, value);
117-
break;
118-
case "osType":
119-
builder.put(ResourceAttributes.OS_TYPE, value);
120-
break;
121-
case "version":
122-
builder.put(ResourceAttributes.OS_VERSION, value);
123-
break;
124-
case "vmScaleSetName":
125-
builder.put(AttributeKey.stringKey("azure.vm.scaleset.name"), value);
126-
break;
127-
case "sku":
128-
builder.put(AttributeKey.stringKey("azure.vm.sku"), value);
129-
break;
130-
default:
131-
parser.skipChildren();
132-
break;
133-
}
150+
consumer.accept(parser.currentName(), parser.nextTextValue());
134151
}
135152
}
136153

0 commit comments

Comments
 (0)