|
18 | 18 | import java.net.MalformedURLException; |
19 | 19 | import java.net.URL; |
20 | 20 | import java.time.Duration; |
| 21 | +import java.util.HashMap; |
| 22 | +import java.util.Map; |
21 | 23 | import java.util.Objects; |
22 | 24 | import java.util.Optional; |
| 25 | +import java.util.function.BiConsumer; |
23 | 26 | import java.util.function.Supplier; |
24 | 27 | import java.util.logging.Level; |
25 | 28 | import java.util.logging.Logger; |
|
30 | 33 |
|
31 | 34 | public class AzureVmResourceProvider extends CloudResourceProvider { |
32 | 35 |
|
| 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 | + |
33 | 50 | private static final JsonFactory JSON_FACTORY = new JsonFactory(); |
34 | 51 |
|
35 | 52 | private static final Duration TIMEOUT = Duration.ofSeconds(1); |
@@ -94,43 +111,43 @@ static void parseResponse(JsonParser parser, AttributesBuilder builder) throws I |
94 | 111 | return; |
95 | 112 | } |
96 | 113 |
|
| 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 { |
97 | 149 | 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()); |
134 | 151 | } |
135 | 152 | } |
136 | 153 |
|
|
0 commit comments