Skip to content

Commit cbb9444

Browse files
authored
Merge pull request #98 from microsoftgraph/feature/android-telemetry
feature/android telemetry
2 parents 6a93bff + 49a107b commit cbb9444

File tree

5 files changed

+111
-81
lines changed

5 files changed

+111
-81
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ mavenGroupId = com.microsoft.graph
2525
mavenArtifactId = microsoft-graph-core
2626
mavenMajorVersion = 1
2727
mavenMinorVersion = 0
28-
mavenPatchVersion = 5
28+
mavenPatchVersion = 6
2929
mavenArtifactSuffix =
3030
nightliesUrl = http://dl.bintray.com/MicrosoftGraph/Maven
3131

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
<groupId>com.microsoft.graph</groupId>
1010
<artifactId>microsoft-graph-core</artifactId>
11-
<version>1.0.5</version>
11+
<version>1.0.6</version>
1212
<packaging>pom</packaging>
1313

1414
<dependencies>

readme.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ repositories {
2020
2121
dependencies {
2222
// Include the sdk as a dependency
23-
implementation 'com.microsoft.graph:microsoft-graph-core:1.0.5'
23+
implementation 'com.microsoft.graph:microsoft-graph-core:1.0.6'
2424
}
2525
```
2626

@@ -32,7 +32,7 @@ Add the dependency in `dependencies` in pom.xml
3232
<dependency>
3333
<groupId>com.microsoft.graph</groupId>
3434
<artifactId>microsoft-graph-core</artifactId>
35-
<version>1.0.5</version>
35+
<version>1.0.6</version>
3636
</dependency>
3737
```
3838

Lines changed: 51 additions & 21 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

@@ -10,31 +11,60 @@
1011

1112
public class TelemetryHandler implements Interceptor{
1213

13-
public static final String SDK_VERSION = "SdkVersion";
14-
public static final String VERSION = "v1.0.5";
15-
public static final String GRAPH_VERSION_PREFIX = "graph-java-core";
16-
public static final String JAVA_VERSION_PREFIX = "java";
17-
public static final String CLIENT_REQUEST_ID = "client-request-id";
14+
public static final String SDK_VERSION = "SdkVersion";
15+
public static final String VERSION = "v1.0.6";
16+
public static final String GRAPH_VERSION_PREFIX = "graph-java-core";
17+
public static final String JAVA_VERSION_PREFIX = "java";
18+
public static final String ANDROID_VERSION_PREFIX = "android";
19+
public static final String CLIENT_REQUEST_ID = "client-request-id";
1820

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

24-
TelemetryOptions telemetryOptions = request.tag(TelemetryOptions.class);
25-
if(telemetryOptions == null)
26-
telemetryOptions = new TelemetryOptions();
26+
TelemetryOptions telemetryOptions = request.tag(TelemetryOptions.class);
27+
if(telemetryOptions == null)
28+
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;
31-
telemetryAddedBuilder.addHeader(SDK_VERSION, sdkversion_value);
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;
34+
telemetryAddedBuilder.addHeader(SDK_VERSION, sdkversion_value);
3235

33-
if(request.header(CLIENT_REQUEST_ID) == null) {
34-
telemetryAddedBuilder.addHeader(CLIENT_REQUEST_ID, telemetryOptions.getClientRequestId());
35-
}
36+
if(request.header(CLIENT_REQUEST_ID) == null) {
37+
telemetryAddedBuilder.addHeader(CLIENT_REQUEST_ID, telemetryOptions.getClientRequestId());
38+
}
3639

37-
return chain.proceed(telemetryAddedBuilder.build());
38-
}
40+
return chain.proceed(telemetryAddedBuilder.build());
41+
}
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: 56 additions & 56 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 {
18-
@Test
19-
public void telemetryInitTest() {
20-
TelemetryHandler telemetryHandler = new TelemetryHandler();
21-
assertNotNull(telemetryHandler);
22-
}
23-
24-
@Test
25-
public void interceptTest() throws IOException {
26-
String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
27-
+TelemetryHandler.VERSION;
28-
OkHttpClient client = HttpClients.createDefault(new ICoreAuthenticationProvider() {
29-
@Override
30-
public Request authenticateRequest(Request request) {
31-
return request;
32-
}
33-
});
34-
Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
35-
Response response = client.newCall(request).execute();
36-
assertNotNull(response);
37-
assertTrue(response.request().header("SdkVersion").contains(expectedHeader));
38-
}
39-
40-
@Test
41-
public void arrayInterceptorsTest() throws IOException {
42-
43-
AuthenticationHandler authenticationHandler = new AuthenticationHandler(new ICoreAuthenticationProvider() {
44-
45-
@Override
46-
public Request authenticateRequest(Request request) {
47-
return request;
48-
}
49-
});
50-
Interceptor[] interceptors = {new RetryHandler(), new RedirectHandler(), authenticationHandler};
51-
OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
52-
String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
53-
+TelemetryHandler.VERSION;
54-
Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
55-
Response response = client.newCall(request).execute();
56-
assertNotNull(response);
57-
assertTrue(response.request().header("SdkVersion").contains(expectedHeader));
58-
}
59-
60-
@Test
61-
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 +"/"
65-
+TelemetryHandler.VERSION;
66-
Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
67-
Response response = client.newCall(request).execute();
68-
assertNotNull(response);
69-
assertTrue(response.request().header("SdkVersion").contains(expectedHeader));
70-
}
71-
16+
@Test
17+
public void telemetryInitTest() {
18+
final TelemetryHandler telemetryHandler = new TelemetryHandler();
19+
assertNotNull(telemetryHandler);
20+
}
21+
22+
@Test
23+
public void interceptTest() throws IOException {
24+
final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
25+
+TelemetryHandler.VERSION;
26+
final OkHttpClient client = HttpClients.createDefault(new ICoreAuthenticationProvider() {
27+
@Override
28+
public Request authenticateRequest(Request request) {
29+
return request;
30+
}
31+
});
32+
final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
33+
final Response response = client.newCall(request).execute();
34+
assertNotNull(response);
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));
38+
}
39+
40+
@Test
41+
public void arrayInterceptorsTest() throws IOException {
42+
43+
final AuthenticationHandler authenticationHandler = new AuthenticationHandler(new ICoreAuthenticationProvider() {
44+
45+
@Override
46+
public Request authenticateRequest(Request request) {
47+
return request;
48+
}
49+
});
50+
final Interceptor[] interceptors = {new RetryHandler(), new RedirectHandler(), authenticationHandler};
51+
final OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
52+
final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
53+
+TelemetryHandler.VERSION;
54+
final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
55+
final Response response = client.newCall(request).execute();
56+
assertNotNull(response);
57+
assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader));
58+
}
59+
60+
@Test
61+
public void arrayInterceptorEmptyTest() throws IOException {
62+
final Interceptor[] interceptors = null;
63+
final OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
64+
final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
65+
+TelemetryHandler.VERSION;
66+
final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
67+
final Response response = client.newCall(request).execute();
68+
assertNotNull(response);
69+
assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader));
70+
}
71+
7272
}

0 commit comments

Comments
 (0)