Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ mavenGroupId = com.microsoft.graph
mavenArtifactId = microsoft-graph-core
mavenMajorVersion = 1
mavenMinorVersion = 0
mavenPatchVersion = 5
mavenPatchVersion = 6
mavenArtifactSuffix =
nightliesUrl = http://dl.bintray.com/MicrosoftGraph/Maven

Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

<groupId>com.microsoft.graph</groupId>
<artifactId>microsoft-graph-core</artifactId>
<version>1.0.5</version>
<version>1.0.6</version>
<packaging>pom</packaging>

<dependencies>
Expand Down
4 changes: 2 additions & 2 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ repositories {

dependencies {
// Include the sdk as a dependency
implementation 'com.microsoft.graph:microsoft-graph-core:1.0.5'
implementation 'com.microsoft.graph:microsoft-graph-core:1.0.6'
}
```

Expand All @@ -32,7 +32,7 @@ Add the dependency in `dependencies` in pom.xml
<dependency>
<groupId>com.microsoft.graph</groupId>
<artifactId>microsoft-graph-core</artifactId>
<version>1.0.5</version>
<version>1.0.6</version>
</dependency>
```

Expand Down
72 changes: 51 additions & 21 deletions src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.microsoft.graph.httpcore;

import java.io.IOException;
import java.lang.reflect.Field;

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

Expand All @@ -10,31 +11,60 @@

public class TelemetryHandler implements Interceptor{

public static final String SDK_VERSION = "SdkVersion";
public static final String VERSION = "v1.0.5";
public static final String GRAPH_VERSION_PREFIX = "graph-java-core";
public static final String JAVA_VERSION_PREFIX = "java";
public static final String CLIENT_REQUEST_ID = "client-request-id";
public static final String SDK_VERSION = "SdkVersion";
public static final String VERSION = "v1.0.6";
public static final String GRAPH_VERSION_PREFIX = "graph-java-core";
public static final String JAVA_VERSION_PREFIX = "java";
public static final String ANDROID_VERSION_PREFIX = "android";
public static final String CLIENT_REQUEST_ID = "client-request-id";

@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder telemetryAddedBuilder = request.newBuilder();
@Override
public Response intercept(Chain chain) throws IOException {
final Request request = chain.request();
final Request.Builder telemetryAddedBuilder = request.newBuilder();

TelemetryOptions telemetryOptions = request.tag(TelemetryOptions.class);
if(telemetryOptions == null)
telemetryOptions = new TelemetryOptions();
TelemetryOptions telemetryOptions = request.tag(TelemetryOptions.class);
if(telemetryOptions == null)
telemetryOptions = new TelemetryOptions();

String featureUsage = "(featureUsage=" + telemetryOptions.getFeatureUsage() + ")";
String javaVersion = System.getProperty("java.version");
String sdkversion_value = GRAPH_VERSION_PREFIX + "/" + VERSION + " " + featureUsage + " " + JAVA_VERSION_PREFIX + "/" + javaVersion;
telemetryAddedBuilder.addHeader(SDK_VERSION, sdkversion_value);
final String featureUsage = "(featureUsage=" + telemetryOptions.getFeatureUsage() + ")";
final String javaVersion = System.getProperty("java.version");
final String androidVersion = getAndroidAPILevel();
final String sdkversion_value = GRAPH_VERSION_PREFIX + "/" + VERSION + " " + featureUsage + " " + JAVA_VERSION_PREFIX + "/" + javaVersion + " " + ANDROID_VERSION_PREFIX + "/" + androidVersion;
telemetryAddedBuilder.addHeader(SDK_VERSION, sdkversion_value);

if(request.header(CLIENT_REQUEST_ID) == null) {
telemetryAddedBuilder.addHeader(CLIENT_REQUEST_ID, telemetryOptions.getClientRequestId());
}
if(request.header(CLIENT_REQUEST_ID) == null) {
telemetryAddedBuilder.addHeader(CLIENT_REQUEST_ID, telemetryOptions.getClientRequestId());
}

return chain.proceed(telemetryAddedBuilder.build());
}
return chain.proceed(telemetryAddedBuilder.build());
}

private String androidAPILevel;
private String getAndroidAPILevel() {
if(androidAPILevel == null) {
androidAPILevel = getAndroidAPILevelInternal();
}
return androidAPILevel;
}
private String getAndroidAPILevelInternal() {
try {
final Class<?> buildClass = Class.forName("android.os.Build");
final Class<?>[] subclasses = buildClass.getDeclaredClasses();
Class<?> versionClass = null;
for(final Class<?> subclass : subclasses) {
if(subclass.getName().endsWith("VERSION")) {
versionClass = subclass;
break;
}
}
final Field sdkVersionField = versionClass.getField("SDK_INT");
final Object value = sdkVersionField.get(null);
final String valueStr = String.valueOf(value);
return valueStr == null || valueStr == "" ? "0" : valueStr;
} catch (IllegalAccessException | ClassNotFoundException | NoSuchFieldException ex) {
// we're not on android and return "0" to align with java version which returns "0" when running on android
return "0";
}
}
}
112 changes: 56 additions & 56 deletions src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,68 +5,68 @@

import java.io.IOException;

import org.junit.Ignore;
import org.junit.Test;

import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

@Ignore
public class TelemetryHandlerTest {
@Test
public void telemetryInitTest() {
TelemetryHandler telemetryHandler = new TelemetryHandler();
assertNotNull(telemetryHandler);
}

@Test
public void interceptTest() throws IOException {
String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
+TelemetryHandler.VERSION;
OkHttpClient client = HttpClients.createDefault(new ICoreAuthenticationProvider() {
@Override
public Request authenticateRequest(Request request) {
return request;
}
});
Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
Response response = client.newCall(request).execute();
assertNotNull(response);
assertTrue(response.request().header("SdkVersion").contains(expectedHeader));
}

@Test
public void arrayInterceptorsTest() throws IOException {

AuthenticationHandler authenticationHandler = new AuthenticationHandler(new ICoreAuthenticationProvider() {

@Override
public Request authenticateRequest(Request request) {
return request;
}
});
Interceptor[] interceptors = {new RetryHandler(), new RedirectHandler(), authenticationHandler};
OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
+TelemetryHandler.VERSION;
Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
Response response = client.newCall(request).execute();
assertNotNull(response);
assertTrue(response.request().header("SdkVersion").contains(expectedHeader));
}

@Test
public void arrayInterceptorEmptyTest() throws IOException {
Interceptor[] interceptors = null;
OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
+TelemetryHandler.VERSION;
Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
Response response = client.newCall(request).execute();
assertNotNull(response);
assertTrue(response.request().header("SdkVersion").contains(expectedHeader));
}

@Test
public void telemetryInitTest() {
final TelemetryHandler telemetryHandler = new TelemetryHandler();
assertNotNull(telemetryHandler);
}

@Test
public void interceptTest() throws IOException {
final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
+TelemetryHandler.VERSION;
final OkHttpClient client = HttpClients.createDefault(new ICoreAuthenticationProvider() {
@Override
public Request authenticateRequest(Request request) {
return request;
}
});
final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
final Response response = client.newCall(request).execute();
assertNotNull(response);
assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader));
assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(TelemetryHandler.ANDROID_VERSION_PREFIX));
assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(TelemetryHandler.JAVA_VERSION_PREFIX));
}

@Test
public void arrayInterceptorsTest() throws IOException {

final AuthenticationHandler authenticationHandler = new AuthenticationHandler(new ICoreAuthenticationProvider() {

@Override
public Request authenticateRequest(Request request) {
return request;
}
});
final Interceptor[] interceptors = {new RetryHandler(), new RedirectHandler(), authenticationHandler};
final OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
+TelemetryHandler.VERSION;
final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
final Response response = client.newCall(request).execute();
assertNotNull(response);
assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader));
}

@Test
public void arrayInterceptorEmptyTest() throws IOException {
final Interceptor[] interceptors = null;
final OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
+TelemetryHandler.VERSION;
final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
final Response response = client.newCall(request).execute();
assertNotNull(response);
assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader));
}

}