Skip to content

Commit

Permalink
Changed HttpClient to OkHttpClient in Azure VM (#11)
Browse files Browse the repository at this point in the history
  • Loading branch information
DondekarShraddha authored May 26, 2022
1 parent 52ccf99 commit b3a2df9
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes.CloudPlatformValues;
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes.CloudProviderValues;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
import java.net.URL;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -20,17 +19,16 @@ public class LMAzureVMResource {
private static final Logger logger = LoggerFactory.getLogger(LMAzureVMResource.class);
private static final String HOST_ID = "host.id";

static Resource get(HttpClient client) {
static Resource get(OkHttpClient client) {
String azureVmId = null;

try {
URI url = new URI("http://169.254.169.254/metadata/instance?api-version=2021-02-01");
HttpRequest request =
HttpRequest.newBuilder().uri(url).GET().header("Metadata", "true").build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
URL url = new URL("http://169.254.169.254/metadata/instance?api-version=2021-02-01");
Request request = new Request.Builder().url(url).get().header("Metadata", "true").build();
Response response = client.newCall(request).execute();

if (response.statusCode() == 200) {
JSONObject responseBody = new JSONObject(response.body());
if (response.code() == 200) {
JSONObject responseBody = new JSONObject(response.body().string());
JSONObject json = responseBody.getJSONObject("compute");
azureVmId = json.get("vmId").toString();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
import io.opentelemetry.sdk.resources.Resource;
import java.net.http.HttpClient;
import okhttp3.OkHttpClient;

public class LMAzureVMResourceProvider implements ResourceProvider {

@Override
public Resource createResource(ConfigProperties config) {
HttpClient client = HttpClient.newHttpClient();
OkHttpClient client = new OkHttpClient();
return LMAzureVMResource.get(client);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ public class LMComputeEngineResource {
public static Resource get(String baseURL) {
AttributesBuilder attrBuilders = Attributes.builder();
if (System.getenv("K_SERVICE") == null) {
attrBuilders.put(
ResourceAttributes.CLOUD_PROVIDER, ResourceAttributes.CloudProviderValues.GCP);
attrBuilders.put(
ResourceAttributes.CLOUD_PLATFORM,
ResourceAttributes.CloudPlatformValues.GCP_COMPUTE_ENGINE);
String hostId = getGcpResource(baseURL + "/computeMetadata/v1/instance/id");
if (hostId != null) {
attrBuilders.put(ResourceAttributes.HOST_ID, hostId);
attrBuilders.put(
ResourceAttributes.CLOUD_PROVIDER, ResourceAttributes.CloudProviderValues.GCP);
attrBuilders.put(
ResourceAttributes.CLOUD_PLATFORM,
ResourceAttributes.CloudPlatformValues.GCP_COMPUTE_ENGINE);
}
String projectId = getGcpResource(baseURL + "/computeMetadata/v1/project/project-id");
if (projectId != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,23 @@
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes.CloudPlatformValues;
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes.CloudProviderValues;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Protocol;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

public class LMAzureVMResourceProviderTest {

HttpClient httpClient;
HttpResponse mockedResponse;
OkHttpClient httpClient;

@BeforeEach
public void setUp() {
httpClient = Mockito.mock(HttpClient.class);
mockedResponse = Mockito.mock(HttpResponse.class);
httpClient = Mockito.mock(OkHttpClient.class);
}

@Test
Expand All @@ -32,25 +33,31 @@ public void whenProvidedValidResponseThenReturnHostId() throws Exception {
attrBuilders.put(ResourceAttributes.CLOUD_PROVIDER, CloudProviderValues.AZURE);
attrBuilders.put(ResourceAttributes.CLOUD_PLATFORM, CloudPlatformValues.AZURE_VM);
attrBuilders.put("host.id", "hostId");
Mockito.when(mockedResponse.statusCode()).thenReturn(200);
Mockito.when(mockedResponse.body())
.thenReturn("{\n" + " \"compute\" : {\n" + " \"vmId\" : \"hostId\"\n" + " }\n" + "}");
Mockito.when(
httpClient.send(
Mockito.any(HttpRequest.class), Mockito.any(HttpResponse.BodyHandler.class)))
.thenReturn(mockedResponse);
Call call = Mockito.mock(Call.class);
Mockito.when(httpClient.newCall(Mockito.any(Request.class))).thenReturn(call);
ResponseBody body =
ResponseBody.create(
null, "{\n" + " \"compute\" : {\n" + " \"vmId\" : \"hostId\"\n" + " }\n" + "}");
Request request = new Request.Builder().url("http://dummysupport").build();
Protocol protocol = Protocol.get("http/1.1");
Response response =
new Response.Builder()
.body(body)
.request(request)
.protocol(protocol)
.code(200)
.message("OK")
.build();
Mockito.when(call.execute()).thenReturn(response);

Resource azureVMResource = Resource.create(attrBuilders.build(), ResourceAttributes.SCHEMA_URL);
Resource lmAzureVMResource = LMAzureVMResource.get(httpClient);
assertEquals(azureVMResource, lmAzureVMResource);
}

@Test
public void whenProvidedInvalidResponse() throws Exception {
public void whenProvidedInvalidResponse() {
AttributesBuilder attrBuilders = Attributes.builder();
Mockito.when(
httpClient.send(
Mockito.any(HttpRequest.class), Mockito.any(HttpResponse.BodyHandler.class)))
.thenReturn(mockedResponse);
Resource azureVMResource = Resource.create(attrBuilders.build(), null);
Resource lmAzureVMResource = LMAzureVMResource.get(httpClient);
assertEquals(azureVMResource, lmAzureVMResource);
Expand Down

0 comments on commit b3a2df9

Please sign in to comment.