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

Commit e2b6873

Browse files
Fix ai telemetry key override, #592. (#593)
* Add new configuration for telemetryProxy. * Simplify the telemetry events. * Add Unit test for telemetry. Signed-off-by: Pan Li <panli@microsoft.com>
1 parent b3201f9 commit e2b6873

35 files changed

+297
-232
lines changed

azure-spring-boot-starters/azure-spring-boot-starter/pom.xml

-25
Original file line numberDiff line numberDiff line change
@@ -48,29 +48,4 @@
4848
</resources>
4949
</build>
5050

51-
<profiles>
52-
<profile>
53-
<id>dev</id>
54-
<activation>
55-
<property>
56-
<name>!release</name>
57-
</property>
58-
<activeByDefault>true</activeByDefault>
59-
</activation>
60-
<properties>
61-
<ai.instrumentkey>fda156f5-2eb8-48ab-8a3c-3e06b3c64b49</ai.instrumentkey>
62-
</properties>
63-
</profile>
64-
<profile>
65-
<id>release</id>
66-
<activation>
67-
<property>
68-
<name>release</name>
69-
</property>
70-
</activation>
71-
<properties>
72-
<ai.instrumentkey>${telemetry.instrumentationKey}</ai.instrumentkey>
73-
</properties>
74-
</profile>
75-
</profiles>
7651
</project>

azure-spring-boot-starters/azure-spring-boot-starter/src/main/resources/ApplicationInsights.xml

-14
This file was deleted.

azure-spring-boot/pom.xml

-1
Original file line numberDiff line numberDiff line change
@@ -240,5 +240,4 @@
240240
<scope>test</scope>
241241
</dependency>
242242
</dependencies>
243-
244243
</project>

azure-spring-boot/src/main/java/com/microsoft/azure/keyvault/spring/KeyVaultEnvironmentPostProcessorHelper.java

+16-10
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,13 @@
88

99
import com.microsoft.azure.AzureEnvironment;
1010
import com.microsoft.azure.AzureResponseBuilder;
11-
import com.microsoft.azure.credentials.MSICredentials;
11+
import com.microsoft.azure.credentials.AppServiceMSICredentials;
1212
import com.microsoft.azure.keyvault.KeyVaultClient;
1313
import com.microsoft.azure.serializer.AzureJacksonAdapter;
1414
import com.microsoft.azure.spring.support.UserAgent;
15-
import com.microsoft.azure.telemetry.TelemetryData;
1615
import com.microsoft.azure.telemetry.TelemetryProxy;
16+
import com.microsoft.azure.utils.PropertyLoader;
1717
import com.microsoft.rest.RestClient;
18-
import com.microsoft.azure.credentials.AppServiceMSICredentials;
1918
import com.microsoft.rest.credentials.ServiceClientCredentials;
2019
import org.slf4j.Logger;
2120
import org.slf4j.LoggerFactory;
@@ -27,9 +26,14 @@
2726
import org.springframework.util.Assert;
2827
import org.springframework.util.ClassUtils;
2928

29+
import javax.annotation.PostConstruct;
3030
import java.util.HashMap;
31+
import java.util.Map;
3132
import java.util.Optional;
3233

34+
import static com.microsoft.azure.telemetry.TelemetryData.SERVICE_NAME;
35+
import static com.microsoft.azure.telemetry.TelemetryData.getClassPackageSimpleName;
36+
3337
class KeyVaultEnvironmentPostProcessorHelper {
3438
private static final Logger LOG = LoggerFactory.getLogger(KeyVaultEnvironmentPostProcessorHelper.class);
3539

@@ -38,7 +42,8 @@ class KeyVaultEnvironmentPostProcessorHelper {
3842

3943
public KeyVaultEnvironmentPostProcessorHelper(final ConfigurableEnvironment environment) {
4044
this.environment = environment;
41-
this.telemetryProxy = new TelemetryProxy(this.allowTelemetry(environment));
45+
// As auto-configuration not available when post processor, load it from file.
46+
this.telemetryProxy = new TelemetryProxy(PropertyLoader.getTelemetryInstrumentationKey());
4247
}
4348

4449
public void addKeyVaultPropertySource() {
@@ -58,8 +63,6 @@ public void addKeyVaultPropertySource() {
5863

5964
final KeyVaultClient kvClient = new KeyVaultClient(restClient);
6065

61-
this.trackCustomEvent();
62-
6366
try {
6467
final MutablePropertySources sources = this.environment.getPropertySources();
6568
final KeyVaultOperation kvOperation = new KeyVaultOperation(kvClient, vaultUri, refreshInterval);
@@ -136,11 +139,14 @@ private boolean allowTelemetry(final ConfigurableEnvironment env) {
136139
return env.getProperty(Constants.AZURE_KEYVAULT_ALLOW_TELEMETRY, Boolean.class, true);
137140
}
138141

142+
@PostConstruct
139143
private void trackCustomEvent() {
140-
final HashMap<String, String> customTelemetryProperties = new HashMap<>();
141-
customTelemetryProperties.put(TelemetryData.SERVICE_NAME, "keyvault");
144+
if (allowTelemetry(environment)) {
145+
final Map<String, String> events = new HashMap<>();
146+
147+
events.put(SERVICE_NAME, getClassPackageSimpleName(KeyVaultEnvironmentPostProcessorHelper.class));
142148

143-
final String className = ClassUtils.getUserClass(this.getClass()).getSimpleName();
144-
this.telemetryProxy.trackEvent(className, customTelemetryProperties);
149+
telemetryProxy.trackEvent(ClassUtils.getUserClass(getClass()).getSimpleName(), events);
150+
}
145151
}
146152
}

azure-spring-boot/src/main/java/com/microsoft/azure/spring/autoconfigure/aad/AADAuthenticationFilterAutoConfiguration.java

+15-9
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66
package com.microsoft.azure.spring.autoconfigure.aad;
77

8-
import com.microsoft.azure.telemetry.TelemetryData;
98
import com.microsoft.azure.telemetry.TelemetryProxy;
109
import com.nimbusds.jose.util.DefaultResourceRetriever;
1110
import com.nimbusds.jose.util.ResourceRetriever;
@@ -22,7 +21,12 @@
2221
import org.springframework.context.annotation.Scope;
2322
import org.springframework.util.ClassUtils;
2423

24+
import javax.annotation.PostConstruct;
2525
import java.util.HashMap;
26+
import java.util.Map;
27+
28+
import static com.microsoft.azure.telemetry.TelemetryData.SERVICE_NAME;
29+
import static com.microsoft.azure.telemetry.TelemetryData.getClassPackageSimpleName;
2630

2731
@Configuration
2832
@ConditionalOnWebApplication
@@ -33,15 +37,17 @@ public class AADAuthenticationFilterAutoConfiguration {
3337
private static final Logger LOG = LoggerFactory.getLogger(AADAuthenticationProperties.class);
3438

3539
private final AADAuthenticationProperties aadAuthProps;
40+
3641
private final ServiceEndpointsProperties serviceEndpointsProps;
3742

3843
private final TelemetryProxy telemetryProxy;
3944

4045
public AADAuthenticationFilterAutoConfiguration(AADAuthenticationProperties aadAuthFilterProps,
41-
ServiceEndpointsProperties serviceEndpointsProps) {
46+
ServiceEndpointsProperties serviceEndpointsProps,
47+
TelemetryProxy telemetryProxy) {
4248
this.aadAuthProps = aadAuthFilterProps;
4349
this.serviceEndpointsProps = serviceEndpointsProps;
44-
this.telemetryProxy = new TelemetryProxy(aadAuthFilterProps.isAllowTelemetry());
50+
this.telemetryProxy = telemetryProxy;
4551
}
4652

4753
/**
@@ -54,7 +60,6 @@ public AADAuthenticationFilterAutoConfiguration(AADAuthenticationProperties aadA
5460
@ConditionalOnMissingBean(AADAuthenticationFilter.class)
5561
public AADAuthenticationFilter azureADJwtTokenFilter() {
5662
LOG.info("AzureADJwtTokenFilter Constructor.");
57-
trackCustomEvent();
5863
return new AADAuthenticationFilter(aadAuthProps, serviceEndpointsProps, getJWTResourceRetriever());
5964
}
6065

@@ -66,13 +71,14 @@ public ResourceRetriever getJWTResourceRetriever() {
6671
aadAuthProps.getJwtSizeLimit());
6772
}
6873

74+
@PostConstruct
6975
private void trackCustomEvent() {
70-
final HashMap<String, String> customTelemetryProperties = new HashMap<>();
71-
final String[] packageNames = this.getClass().getPackage().getName().split("\\.");
76+
if (aadAuthProps.isAllowTelemetry()) {
77+
final Map<String, String> events = new HashMap<>();
78+
79+
events.put(SERVICE_NAME, getClassPackageSimpleName(AADAuthenticationFilterAutoConfiguration.class));
7280

73-
if (packageNames.length > 1) {
74-
customTelemetryProperties.put(TelemetryData.SERVICE_NAME, packageNames[packageNames.length - 1]);
81+
telemetryProxy.trackEvent(ClassUtils.getUserClass(getClass()).getSimpleName(), events);
7582
}
76-
telemetryProxy.trackEvent(ClassUtils.getUserClass(this.getClass()).getSimpleName(), customTelemetryProperties);
7783
}
7884
}

azure-spring-boot/src/main/java/com/microsoft/azure/spring/autoconfigure/aad/AADOAuth2AutoConfiguration.java

+29-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
package com.microsoft.azure.spring.autoconfigure.aad;
77

8+
import com.microsoft.azure.telemetry.TelemetryProxy;
89
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
910
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
1011
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -14,6 +15,14 @@
1415
import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest;
1516
import org.springframework.security.oauth2.client.userinfo.OAuth2UserService;
1617
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
18+
import org.springframework.util.ClassUtils;
19+
20+
import javax.annotation.PostConstruct;
21+
import java.util.HashMap;
22+
import java.util.Map;
23+
24+
import static com.microsoft.azure.telemetry.TelemetryData.SERVICE_NAME;
25+
import static com.microsoft.azure.telemetry.TelemetryData.getClassPackageSimpleName;
1726

1827
@Configuration
1928
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@@ -22,18 +31,35 @@
2231
@PropertySource(value = "classpath:serviceEndpoints.properties")
2332
@EnableConfigurationProperties({AADAuthenticationProperties.class, ServiceEndpointsProperties.class})
2433
public class AADOAuth2AutoConfiguration {
25-
private AADAuthenticationProperties aadAuthProps;
26-
private ServiceEndpointsProperties serviceEndpointsProps;
34+
35+
private final TelemetryProxy telemetryProxy;
36+
37+
private final AADAuthenticationProperties aadAuthProps;
38+
39+
private final ServiceEndpointsProperties serviceEndpointsProps;
2740

2841
public AADOAuth2AutoConfiguration(AADAuthenticationProperties aadAuthProperties,
29-
ServiceEndpointsProperties serviceEndpointsProps) {
42+
ServiceEndpointsProperties serviceEndpointsProps,
43+
TelemetryProxy telemetryProxy) {
3044
this.aadAuthProps = aadAuthProperties;
3145
this.serviceEndpointsProps = serviceEndpointsProps;
46+
this.telemetryProxy = telemetryProxy;
3247
}
3348

3449
@Bean
3550
@ConditionalOnProperty(prefix = "azure.activedirectory", value = "active-directory-groups")
3651
public OAuth2UserService<OidcUserRequest, OidcUser> oidcUserService() {
3752
return new AADOAuth2UserService(aadAuthProps, serviceEndpointsProps);
3853
}
54+
55+
@PostConstruct
56+
private void trackCustomEvent() {
57+
if (aadAuthProps.isAllowTelemetry()) {
58+
final Map<String, String> events = new HashMap<>();
59+
60+
events.put(SERVICE_NAME, getClassPackageSimpleName(AADOAuth2AutoConfiguration.class));
61+
62+
telemetryProxy.trackEvent(ClassUtils.getUserClass(getClass()).getSimpleName(), events);
63+
}
64+
}
3965
}

azure-spring-boot/src/main/java/com/microsoft/azure/spring/autoconfigure/b2c/AADB2CAutoConfiguration.java

+12-9
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66
package com.microsoft.azure.spring.autoconfigure.b2c;
77

8-
import com.microsoft.azure.telemetry.TelemetryData;
98
import com.microsoft.azure.telemetry.TelemetryProxy;
109
import lombok.NonNull;
1110
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -23,13 +22,15 @@
2322
import org.springframework.util.ClassUtils;
2423
import org.springframework.util.StringUtils;
2524

25+
import javax.annotation.PostConstruct;
2626
import java.util.ArrayList;
2727
import java.util.HashMap;
2828
import java.util.List;
2929
import java.util.Map;
3030

3131
import static com.microsoft.azure.spring.autoconfigure.b2c.AADB2CProperties.PREFIX;
3232
import static com.microsoft.azure.spring.autoconfigure.b2c.AADB2CProperties.USER_FLOW_SIGN_UP_OR_SIGN_IN;
33+
import static com.microsoft.azure.telemetry.TelemetryData.*;
3334

3435
@Configuration
3536
@ConditionalOnWebApplication
@@ -50,12 +51,14 @@ public class AADB2CAutoConfiguration {
5051

5152
private final AADB2CProperties properties;
5253

54+
private final TelemetryProxy telemetryProxy;
55+
5356
public AADB2CAutoConfiguration(@NonNull ClientRegistrationRepository repository,
54-
@NonNull AADB2CProperties properties) {
57+
@NonNull AADB2CProperties properties,
58+
@NonNull TelemetryProxy telemetryProxy) {
5559
this.repository = repository;
5660
this.properties = properties;
57-
58-
trackCustomEvent(properties.isAllowTelemetry());
61+
this.telemetryProxy = telemetryProxy;
5962
}
6063

6164
@Bean
@@ -77,13 +80,13 @@ public AADB2COidcLoginConfigurer b2cLoginConfigurer(AADB2CLogoutSuccessHandler h
7780
return new AADB2COidcLoginConfigurer(properties, handler, resolver);
7881
}
7982

80-
private void trackCustomEvent(boolean isAllowTelemetry) {
81-
if (isAllowTelemetry) {
82-
final TelemetryProxy telemetryProxy = new TelemetryProxy(true);
83+
@PostConstruct
84+
private void trackCustomEvent() {
85+
if (properties.isAllowTelemetry()) {
8386
final Map<String, String> events = new HashMap<>();
8487

85-
events.put(TelemetryData.SERVICE_NAME, getClass().getPackage().getName().replaceAll("\\w+\\.", ""));
86-
events.put(TelemetryData.TENANT_NAME, properties.getTenant());
88+
events.put(SERVICE_NAME, getClassPackageSimpleName(AADB2CAutoConfiguration.class));
89+
events.put(TENANT_NAME, properties.getTenant());
8790

8891
telemetryProxy.trackEvent(ClassUtils.getUserClass(getClass()).getSimpleName(), events);
8992
}

azure-spring-boot/src/main/java/com/microsoft/azure/spring/autoconfigure/cosmosdb/DocumentDBAutoConfiguration.java

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import com.microsoft.azure.spring.data.cosmosdb.core.DocumentDbTemplate;
1414
import org.springframework.beans.factory.ObjectProvider;
1515
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
16-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
1716
import org.springframework.boot.context.properties.EnableConfigurationProperties;
1817
import org.springframework.context.annotation.Configuration;
1918

azure-spring-boot/src/main/java/com/microsoft/azure/spring/autoconfigure/gremlin/GremlinAutoConfiguration.java

+13-11
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66
package com.microsoft.azure.spring.autoconfigure.gremlin;
77

8-
import com.microsoft.azure.telemetry.TelemetryData;
98
import com.microsoft.azure.telemetry.TelemetryProxy;
109
import com.microsoft.spring.data.gremlin.common.GremlinConfig;
1110
import com.microsoft.spring.data.gremlin.common.GremlinFactory;
@@ -26,8 +25,12 @@
2625
import org.springframework.lang.NonNull;
2726
import org.springframework.util.ClassUtils;
2827

28+
import javax.annotation.PostConstruct;
2929
import java.util.HashMap;
3030

31+
import static com.microsoft.azure.telemetry.TelemetryData.SERVICE_NAME;
32+
import static com.microsoft.azure.telemetry.TelemetryData.getClassPackageSimpleName;
33+
3134
@Configuration
3235
@ConditionalOnClass({GremlinFactory.class, GremlinTemplate.class, MappingGremlinConverter.class})
3336
@ConditionalOnProperty(prefix = "gremlin", value = {"endpoint", "port", "username", "password"})
@@ -40,21 +43,22 @@ public class GremlinAutoConfiguration {
4043

4144
private final ApplicationContext applicationContext;
4245

43-
public GremlinAutoConfiguration(@NonNull GremlinProperties properties, @NonNull ApplicationContext context) {
46+
public GremlinAutoConfiguration(@NonNull GremlinProperties properties, @NonNull ApplicationContext context,
47+
TelemetryProxy telemetryProxy) {
4448
this.properties = properties;
4549
this.applicationContext = context;
46-
this.telemetryProxy = new TelemetryProxy(properties.isTelemetryAllowed());
50+
this.telemetryProxy = telemetryProxy;
4751
}
4852

53+
@PostConstruct
4954
private void trackCustomEvent() {
50-
final HashMap<String, String> customTelemetryProperties = new HashMap<>();
51-
final String[] packageNames = this.getClass().getPackage().getName().split("\\.");
55+
if (properties.isTelemetryAllowed()) {
56+
final HashMap<String, String> events = new HashMap<>();
5257

53-
if (packageNames.length > 1) {
54-
customTelemetryProperties.put(TelemetryData.SERVICE_NAME, packageNames[packageNames.length - 1]);
55-
}
58+
events.put(SERVICE_NAME, getClassPackageSimpleName(GremlinAutoConfiguration.class));
5659

57-
telemetryProxy.trackEvent(ClassUtils.getUserClass(this.getClass()).getSimpleName(), customTelemetryProperties);
60+
telemetryProxy.trackEvent(ClassUtils.getUserClass(this.getClass()).getSimpleName(), events);
61+
}
5862
}
5963

6064
@Bean
@@ -80,8 +84,6 @@ public GremlinConfig getGremlinConfig() {
8084
@Bean
8185
@ConditionalOnMissingBean
8286
public GremlinFactory gremlinFactory() {
83-
this.trackCustomEvent();
84-
8587
return new GremlinFactory(getGremlinConfig());
8688
}
8789

0 commit comments

Comments
 (0)