Skip to content

Commit 790a976

Browse files
committed
- adds android api version in telemetry handler
1 parent 6a93bff commit 790a976

File tree

2 files changed

+63
-33
lines changed

2 files changed

+63
-33
lines changed

src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.microsoft.graph.httpcore;
22

33
import java.io.IOException;
4+
import java.lang.reflect.Field;
45

56
import com.microsoft.graph.httpcore.middlewareoption.TelemetryOptions;
67

@@ -13,21 +14,23 @@ public class TelemetryHandler implements Interceptor{
1314
public static final String SDK_VERSION = "SdkVersion";
1415
public static final String VERSION = "v1.0.5";
1516
public static final String GRAPH_VERSION_PREFIX = "graph-java-core";
16-
public static final String JAVA_VERSION_PREFIX = "java";
17+
public static final String JAVA_VERSION_PREFIX = "java";
18+
public static final String ANDROID_VERSION_PREFIX = "android";
1719
public static final String CLIENT_REQUEST_ID = "client-request-id";
1820

1921
@Override
2022
public Response intercept(Chain chain) throws IOException {
21-
Request request = chain.request();
22-
Request.Builder telemetryAddedBuilder = request.newBuilder();
23+
final Request request = chain.request();
24+
final Request.Builder telemetryAddedBuilder = request.newBuilder();
2325

2426
TelemetryOptions telemetryOptions = request.tag(TelemetryOptions.class);
2527
if(telemetryOptions == null)
2628
telemetryOptions = new TelemetryOptions();
2729

28-
String featureUsage = "(featureUsage=" + telemetryOptions.getFeatureUsage() + ")";
29-
String javaVersion = System.getProperty("java.version");
30-
String sdkversion_value = GRAPH_VERSION_PREFIX + "/" + VERSION + " " + featureUsage + " " + JAVA_VERSION_PREFIX + "/" + javaVersion;
30+
final String featureUsage = "(featureUsage=" + telemetryOptions.getFeatureUsage() + ")";
31+
final String javaVersion = System.getProperty("java.version");
32+
final String androidVersion = getAndroidAPILevel();
33+
final String sdkversion_value = GRAPH_VERSION_PREFIX + "/" + VERSION + " " + featureUsage + " " + JAVA_VERSION_PREFIX + "/" + javaVersion + " " + ANDROID_VERSION_PREFIX + "/" + androidVersion;
3134
telemetryAddedBuilder.addHeader(SDK_VERSION, sdkversion_value);
3235

3336
if(request.header(CLIENT_REQUEST_ID) == null) {
@@ -37,4 +40,31 @@ public Response intercept(Chain chain) throws IOException {
3740
return chain.proceed(telemetryAddedBuilder.build());
3841
}
3942

43+
private String androidAPILevel;
44+
private String getAndroidAPILevel() {
45+
if(androidAPILevel == null) {
46+
androidAPILevel = getAndroidAPILevelInternal();
47+
}
48+
return androidAPILevel;
49+
}
50+
private String getAndroidAPILevelInternal() {
51+
try {
52+
final Class<?> buildClass = Class.forName("android.os.Build");
53+
final Class<?>[] subclasses = buildClass.getDeclaredClasses();
54+
Class<?> versionClass = null;
55+
for(final Class<?> subclass : subclasses) {
56+
if(subclass.getName().endsWith("VERSION")) {
57+
versionClass = subclass;
58+
break;
59+
}
60+
}
61+
final Field sdkVersionField = versionClass.getField("SDK_INT");
62+
final Object value = sdkVersionField.get(null);
63+
final String valueStr = String.valueOf(value);
64+
return valueStr == null || valueStr == "" ? "0" : valueStr;
65+
} catch (IllegalAccessException | ClassNotFoundException | NoSuchFieldException ex) {
66+
// we're not on android and return "0" to align with java version which returns "0" when running on android
67+
return "0";
68+
}
69+
}
4070
}

src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,68 +5,68 @@
55

66
import java.io.IOException;
77

8-
import org.junit.Ignore;
98
import org.junit.Test;
109

1110
import okhttp3.Interceptor;
1211
import okhttp3.OkHttpClient;
1312
import okhttp3.Request;
1413
import okhttp3.Response;
1514

16-
@Ignore
1715
public class TelemetryHandlerTest {
1816
@Test
1917
public void telemetryInitTest() {
20-
TelemetryHandler telemetryHandler = new TelemetryHandler();
18+
final TelemetryHandler telemetryHandler = new TelemetryHandler();
2119
assertNotNull(telemetryHandler);
2220
}
23-
21+
2422
@Test
2523
public void interceptTest() throws IOException {
26-
String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
24+
final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
2725
+TelemetryHandler.VERSION;
28-
OkHttpClient client = HttpClients.createDefault(new ICoreAuthenticationProvider() {
26+
final OkHttpClient client = HttpClients.createDefault(new ICoreAuthenticationProvider() {
2927
@Override
3028
public Request authenticateRequest(Request request) {
3129
return request;
3230
}
3331
});
34-
Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
35-
Response response = client.newCall(request).execute();
32+
final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
33+
final Response response = client.newCall(request).execute();
3634
assertNotNull(response);
37-
assertTrue(response.request().header("SdkVersion").contains(expectedHeader));
35+
assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader));
36+
assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(TelemetryHandler.ANDROID_VERSION_PREFIX));
37+
assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(TelemetryHandler.JAVA_VERSION_PREFIX));
3838
}
39-
39+
4040
@Test
4141
public void arrayInterceptorsTest() throws IOException {
42-
43-
AuthenticationHandler authenticationHandler = new AuthenticationHandler(new ICoreAuthenticationProvider() {
44-
42+
43+
final AuthenticationHandler authenticationHandler = new AuthenticationHandler(new ICoreAuthenticationProvider() {
44+
4545
@Override
4646
public Request authenticateRequest(Request request) {
4747
return request;
4848
}
4949
});
50-
Interceptor[] interceptors = {new RetryHandler(), new RedirectHandler(), authenticationHandler};
51-
OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
52-
String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
50+
final Interceptor[] interceptors = {new RetryHandler(), new RedirectHandler(), authenticationHandler};
51+
final OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
52+
final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
5353
+TelemetryHandler.VERSION;
54-
Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
55-
Response response = client.newCall(request).execute();
54+
final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
55+
final Response response = client.newCall(request).execute();
5656
assertNotNull(response);
57-
assertTrue(response.request().header("SdkVersion").contains(expectedHeader));
57+
assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader));
5858
}
59-
59+
6060
@Test
6161
public void arrayInterceptorEmptyTest() throws IOException {
62-
Interceptor[] interceptors = null;
63-
OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
64-
String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
62+
final Interceptor[] interceptors = null;
63+
final OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
64+
final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
6565
+TelemetryHandler.VERSION;
66-
Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
67-
Response response = client.newCall(request).execute();
66+
final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
67+
final Response response = client.newCall(request).execute();
6868
assertNotNull(response);
69-
assertTrue(response.request().header("SdkVersion").contains(expectedHeader));
69+
assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader));
7070
}
71-
71+
7272
}

0 commit comments

Comments
 (0)