Skip to content
This repository has been archived by the owner on Aug 28, 2024. It is now read-only.

add telemetry in application insights #322

Merged
merged 4 commits into from
May 4, 2018
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
1 change: 1 addition & 0 deletions .release-automation/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
Following [this instruction](http://blog.sonatype.com/2010/01/how-to-generate-pgp-signatures-with-maven/ ) to setup gpg key and publish it. save your passphrase.
1. python version >=3.5.
1. install necessary python packages: requests, xmltodict, jenkinsapi
1. run maven install locally. **Important** when do build please use profile `release` which will contains ai PROD instrument key. Please refer [code here](https://github.com/Microsoft/azure-spring-boot/blob/yungez-ai/azure-spring-boot-starters/azure-spring-boot-starter/pom.xml#L51-L73) for detail.
1. setup configuration in config.json
```
"targetFolder": "//path-to-your-local-to-copy-signed-jars",
Expand Down
6 changes: 6 additions & 0 deletions azure-spring-boot-bom/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
<azure.media.version>0.9.7</azure.media.version>
<azure.servicebus.version>1.0.0</azure.servicebus.version>
<azure.spring.boot.version>2.0.2-SNAPSHOT</azure.spring.boot.version>
<azure.applicationinsights.version>1.0.9</azure.applicationinsights.version>
<spring.data.documentdb.version>2.0.1</spring.data.documentdb.version>
<microsoft.client-runtime.version>1.0.0</microsoft.client-runtime.version>
</properties>
Expand Down Expand Up @@ -142,6 +143,11 @@
<artifactId>azure-servicebus</artifactId>
<version>${azure.servicebus.version}</version>
</dependency>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>applicationinsights-core</artifactId>
<version>${azure.applicationinsights.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,10 @@
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import sample.aad.model.TodoItem;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.*;
import java.util.stream.Collectors;

@RestController
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,7 @@
*/
package sample.aad.model;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.*;

import java.util.Objects;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,7 @@
*/
package sample.cloudfoundry.servicebus;

import com.microsoft.azure.servicebus.ExceptionPhase;
import com.microsoft.azure.servicebus.IMessage;
import com.microsoft.azure.servicebus.IMessageHandler;
import com.microsoft.azure.servicebus.Message;
import com.microsoft.azure.servicebus.MessageHandlerOptions;
import com.microsoft.azure.servicebus.QueueClient;
import com.microsoft.azure.servicebus.*;
import com.microsoft.azure.servicebus.primitives.ServiceBusException;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.slf4j.Logger;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,7 @@
import com.microsoft.windowsazure.exception.ServiceException;
import com.microsoft.windowsazure.services.media.MediaContract;
import com.microsoft.windowsazure.services.media.WritableBlobContainerContract;
import com.microsoft.windowsazure.services.media.models.AccessPolicy;
import com.microsoft.windowsazure.services.media.models.AccessPolicyInfo;
import com.microsoft.windowsazure.services.media.models.AccessPolicyPermission;
import com.microsoft.windowsazure.services.media.models.Asset;
import com.microsoft.windowsazure.services.media.models.AssetFile;
import com.microsoft.windowsazure.services.media.models.AssetInfo;
import com.microsoft.windowsazure.services.media.models.Locator;
import com.microsoft.windowsazure.services.media.models.LocatorInfo;
import com.microsoft.windowsazure.services.media.models.LocatorType;
import com.microsoft.windowsazure.services.media.models.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,7 @@
*/
package sample.servicebus;

import com.microsoft.azure.servicebus.ExceptionPhase;
import com.microsoft.azure.servicebus.IMessage;
import com.microsoft.azure.servicebus.IMessageHandler;
import com.microsoft.azure.servicebus.Message;
import com.microsoft.azure.servicebus.MessageHandlerOptions;
import com.microsoft.azure.servicebus.QueueClient;
import com.microsoft.azure.servicebus.SubscriptionClient;
import com.microsoft.azure.servicebus.TopicClient;
import com.microsoft.azure.servicebus.*;
import com.microsoft.azure.servicebus.primitives.ServiceBusException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,10 @@ private AADAuthenticationFilter aadAuthFilter;
* Role-based Authorization with annotation `@PreAuthorize("hasRole('GROUP_NAME')")`
* Role-based Authorization with method `isMemberOf()`

### Allow telemetry
Microsoft would like to collect data about how users use this Spring boot starter. Microsoft uses this information to improve our tooling experience. Participation is voluntary. If you don't want to participate, just simply disable it by setting below configuration in `application.properties`.
```
azure.mediaservices.allow-telemetry=false
```
Find more information about Azure Service Privacy Statement, please check [Microsoft Online Services Privacy Statement](https://www.microsoft.com/en-us/privacystatement/OnlineServices/Default.aspx).

Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@
<artifactId>spring-data-documentdb</artifactId>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,10 @@ Add below alike code to auto-wire the `MediaContract` object. Then you can use i
private MediaContract mediaService;
```

### Allow telemetry
Microsoft would like to collect data about how users use this Spring boot starter. Microsoft uses this information to improve our tooling experience. Participation is voluntary. If you don't want to participate, just simply disable it by setting below configuration in `application.properties`.
```
azure.mediaservices.allow-telemetry=false
```
Find more information about Azure Service Privacy Statement, please check [Microsoft Online Services Privacy Statement](https://www.microsoft.com/en-us/privacystatement/OnlineServices/Default.aspx).

Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,13 @@ private SubscriptionClient subscriptionClient;
```


### Allow telemetry
Microsoft would like to collect data about how users use this Spring boot starter. Microsoft uses this information to improve our tooling experience. Participation is voluntary. If you don't want to participate, just simply disable it by setting below configuration in `application.properties`.
```
azure.servicebus.allow-telemetry=false
```
Find more information about Azure Service Privacy Statement, please check [Microsoft Online Services Privacy Statement](https://www.microsoft.com/en-us/privacystatement/OnlineServices/Default.aspx).




38 changes: 38 additions & 0 deletions azure-spring-boot-starters/azure-spring-boot-starter/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,42 @@
<artifactId>azure-spring-boot</artifactId>
</dependency>
</dependencies>

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/ApplicationInsights.xml</include>
</includes>
</resource>
</resources>
</build>

<profiles>
<profile>
<id>dev</id>
<activation>
<property>
<name>!release</name>
</property>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<ai.instrumentkey>fda156f5-2eb8-48ab-8a3c-3e06b3c64b49</ai.instrumentkey>
</properties>
</profile>
<profile>
<id>release</id>
<activation>
<property>
<name>release</name>
</property>
</activation>
<properties>
<ai.instrumentkey>d3278c59-22d7-4697-af8c-ff0077e3b4e9</ai.instrumentkey>
</properties>
</profile>
</profiles>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings" schemaVersion="2014-05-30">
<!-- The key from the portal: -->
<InstrumentationKey>${ai.instrumentkey}</InstrumentationKey>

<!-- HTTP request component (not required for bare API) -->
<TelemetryModules>
</TelemetryModules>

<!-- Events correlation (not required for bare API) -->
<!-- These initializers add context data to each event -->
<TelemetryInitializers>
</TelemetryInitializers>
</ApplicationInsights>
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,10 @@ Add below alike code to auto-wire the `CloudStorageAccount` object. Then you can
private CloudStorageAccount storageAccount;
```

### Allow telemetry
Microsoft would like to collect data about how users use this Spring boot starter. Microsoft uses this information to improve our tooling experience. Participation is voluntary. If you don't want to participate, just simply disable it by setting below configuration in `application.properties`.
```
azure.storage.allow-telemetry=false
```
Find more information about Azure Service Privacy Statement, please check [Microsoft Online Services Privacy Statement](https://www.microsoft.com/en-us/privacystatement/OnlineServices/Default.aspx).

6 changes: 5 additions & 1 deletion azure-spring-boot/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,10 @@
<artifactId>adal4j</artifactId>
<optional>true</optional>
</dependency>

<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>applicationinsights-core</artifactId>
</dependency>
<!-- Annotation processor -->
<dependency>
<groupId>org.springframework.boot</groupId>
Expand Down Expand Up @@ -158,4 +161,5 @@
<scope>test</scope>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,7 @@
import com.microsoft.azure.keyvault.authentication.KeyVaultCredentials;

import java.net.MalformedURLException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.*;


public class AzureKeyVaultCredential extends KeyVaultCredentials {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,26 @@
import com.microsoft.azure.keyvault.KeyVaultClient;
import com.microsoft.azure.serializer.AzureJacksonAdapter;
import com.microsoft.azure.spring.support.UserAgent;
import com.microsoft.rest.LogLevel;
import com.microsoft.azure.telemetry.TelemetryData;
import com.microsoft.azure.telemetry.TelemetryProxy;
import com.microsoft.rest.RestClient;
import com.microsoft.rest.credentials.ServiceClientCredentials;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.StandardEnvironment;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;

import java.util.HashMap;

class KeyVaultEnvironmentPostProcessorHelper {

private final ConfigurableEnvironment environment;
private final TelemetryProxy telemetryProxy;

public KeyVaultEnvironmentPostProcessorHelper(ConfigurableEnvironment environment) {
this.environment = environment;
this.telemetryProxy = new TelemetryProxy(this.allowTelemetry(environment));
}

public void addKeyVaultPropertySource() {
Expand All @@ -37,15 +43,17 @@ public void addKeyVaultPropertySource() {
final ServiceClientCredentials credentials =
new AzureKeyVaultCredential(clientId, clientKey, timeAcquiringTimeoutInSeconds);
final RestClient restClient = new RestClient.Builder().withBaseUrl(vaultUri)
.withCredentials(credentials)
.withSerializerAdapter(new AzureJacksonAdapter())
.withResponseBuilderFactory(new AzureResponseBuilder.Factory())
.withUserAgent(UserAgent.getUserAgent(Constants.AZURE_KEYVAULT_USER_AGENT,
allowTelemetry(environment)))
.build();
.withCredentials(credentials)
.withSerializerAdapter(new AzureJacksonAdapter())
.withResponseBuilderFactory(new AzureResponseBuilder.Factory())
.withUserAgent(UserAgent.getUserAgent(Constants.AZURE_KEYVAULT_USER_AGENT,
allowTelemetry(environment)))
.build();

final KeyVaultClient kvClient = new KeyVaultClient(restClient);

this.trackCustomEvent();

try {
final MutablePropertySources sources = environment.getPropertySources();
final KeyVaultOperation kvOperation = new KeyVaultOperation(kvClient, vaultUri);
Expand Down Expand Up @@ -79,4 +87,11 @@ private boolean allowTelemetry(ConfigurableEnvironment env) {

return env.getProperty(Constants.AZURE_KEYVAULT_ALLOW_TELEMETRY, Boolean.class, true);
}

private void trackCustomEvent() {
final HashMap<String, String> customTelemetryProperties = new HashMap<>();
customTelemetryProperties.put(TelemetryData.SERVICE_NAME, "keyvault");

telemetryProxy.trackEvent(ClassUtils.getUserClass(this.getClass()).getSimpleName(), customTelemetryProperties);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import com.microsoft.aad.adal4j.AuthenticationResult;
import com.microsoft.aad.adal4j.ClientCredential;
import com.microsoft.aad.adal4j.UserAssertion;

import com.nimbusds.jose.JOSEException;
import com.nimbusds.jose.proc.BadJOSEException;
import org.slf4j.Logger;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
*/
package com.microsoft.azure.spring.autoconfigure.aad;

import com.microsoft.azure.telemetry.TelemetryData;
import com.microsoft.azure.telemetry.TelemetryProxy;
import com.microsoft.azure.utils.PropertyLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
Expand All @@ -14,6 +17,9 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.util.ClassUtils;

import java.util.HashMap;

@Configuration
@ConditionalOnWebApplication
Expand All @@ -25,10 +31,13 @@ public class AADAuthenticationFilterAutoConfiguration {
private final AADAuthenticationFilterProperties aadAuthFilterProperties;
private final ServiceEndpointsProperties serviceEndpointsProperties;

private final TelemetryProxy telemetryProxy;

public AADAuthenticationFilterAutoConfiguration(AADAuthenticationFilterProperties aadAuthFilterProperties,
ServiceEndpointsProperties serviceEndpointsProperties) {
this.aadAuthFilterProperties = aadAuthFilterProperties;
this.serviceEndpointsProperties = serviceEndpointsProperties;
this.telemetryProxy = new TelemetryProxy(aadAuthFilterProperties.isAllowTelemetry());
}

/**
Expand All @@ -41,6 +50,17 @@ public AADAuthenticationFilterAutoConfiguration(AADAuthenticationFilterPropertie
@ConditionalOnMissingBean(AADAuthenticationFilter.class)
public AADAuthenticationFilter azureADJwtTokenFilter() {
LOG.info("AzureADJwtTokenFilter Constructor.");
trackCustomEvent();
return new AADAuthenticationFilter(aadAuthFilterProperties, serviceEndpointsProperties);
}

private void trackCustomEvent() {
final HashMap<String, String> customTelemetryProperties = new HashMap<>();
final String[] packageNames = this.getClass().getPackage().getName().split("\\.");

if (packageNames.length > 1) {
customTelemetryProperties.put(TelemetryData.SERVICE_NAME, packageNames[packageNames.length - 1]);
}
telemetryProxy.trackEvent(ClassUtils.getUserClass(this.getClass()).getSimpleName(), customTelemetryProperties);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,16 @@ public class AADAuthenticationFilterProperties {
@NotEmpty
private List<String> activeDirectoryGroups;

private boolean allowTelemetry = true;

public boolean isAllowTelemetry() {
return allowTelemetry;
}

public void setAllowTelemetry(boolean allowTelemetry) {
this.allowTelemetry = allowTelemetry;
}

public String getEnvironment() {
return StringUtils.isEmpty(environment) ? DEFAULT_SERVICE_ENVIRONMENT : environment;
}
Expand Down
Loading