Skip to content

Commit 71fd91d

Browse files
committed
add trask's changes back after merge from main
1 parent ef4c106 commit 71fd91d

File tree

4 files changed

+51
-13
lines changed

4 files changed

+51
-13
lines changed

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/httpclient/LazyHttpClient.java

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
import com.azure.core.http.HttpClient;
99
import com.azure.core.http.HttpPipeline;
1010
import com.azure.core.http.HttpPipelineBuilder;
11+
import com.azure.core.http.HttpPipelineCallContext;
12+
import com.azure.core.http.HttpPipelineNextPolicy;
13+
import com.azure.core.http.HttpPipelineNextSyncPolicy;
14+
import com.azure.core.http.HttpPipelinePosition;
1115
import com.azure.core.http.HttpRequest;
1216
import com.azure.core.http.HttpResponse;
1317
import com.azure.core.http.ProxyOptions;
@@ -31,6 +35,7 @@
3135
import java.util.List;
3236
import java.util.concurrent.CountDownLatch;
3337
import java.util.concurrent.TimeUnit;
38+
import java.util.function.Supplier;
3439
import javax.annotation.Nullable;
3540
import reactor.core.publisher.Mono;
3641
import reactor.netty.resources.LoopResources;
@@ -110,18 +115,20 @@ private static HttpClient init() {
110115
}
111116

112117
public static HttpPipeline newHttpPipeLineWithDefaultRedirect(
113-
@Nullable Configuration.AadAuthentication aadConfiguration, String aadAudienceWithScope) {
118+
@Nullable Configuration.AadAuthentication aadConfiguration, Supplier<String> aadAudienceWithScope) {
114119
return newHttpPipeLine(
115120
aadConfiguration, aadAudienceWithScope, new RedirectPolicy(new DefaultRedirectStrategy()));
116121
}
117122

118123
public static HttpPipeline newHttpPipeLine(
119124
@Nullable Configuration.AadAuthentication aadConfiguration,
120-
String aadAudienceWithScope,
125+
Supplier<String> aadAudienceWithScope,
121126
HttpPipelinePolicy... additionalPolicies) {
122127
List<HttpPipelinePolicy> policies = new ArrayList<>();
123128
if (aadConfiguration != null && aadConfiguration.enabled) {
124-
policies.add(getAuthenticationPolicy(aadConfiguration, aadAudienceWithScope));
129+
policies.add(
130+
new LazyHttpPipelinePolicy(
131+
() -> getAuthenticationPolicy(aadConfiguration, aadAudienceWithScope.get())));
125132
}
126133
policies.addAll(asList(additionalPolicies));
127134
// Add Logging Policy. Can be enabled using AZURE_LOG_LEVEL.
@@ -190,4 +197,41 @@ private static HttpPipelinePolicy getAuthenticationPolicyWithSami(String aadAudi
190197
new ManagedIdentityCredentialBuilder().build();
191198
return new BearerTokenAuthenticationPolicy(managedIdentityCredential, aadAudienceWithScope);
192199
}
200+
201+
private static class LazyHttpPipelinePolicy implements HttpPipelinePolicy {
202+
203+
private final Supplier<HttpPipelinePolicy> supplier;
204+
private volatile HttpPipelinePolicy delegate;
205+
206+
LazyHttpPipelinePolicy(Supplier<HttpPipelinePolicy> supplier) {
207+
this.supplier = supplier;
208+
}
209+
210+
@Override
211+
public Mono<HttpResponse> process(
212+
HttpPipelineCallContext context, HttpPipelineNextPolicy next) {
213+
createDelegateFirstTime();
214+
return delegate.process(context, next);
215+
}
216+
217+
@Override
218+
public HttpResponse processSync(
219+
HttpPipelineCallContext context, HttpPipelineNextSyncPolicy next) {
220+
createDelegateFirstTime();
221+
return delegate.processSync(context, next);
222+
}
223+
224+
@Override
225+
public HttpPipelinePosition getPipelinePosition() {
226+
createDelegateFirstTime();
227+
return delegate.getPipelinePosition();
228+
}
229+
230+
private void createDelegateFirstTime() {
231+
if (delegate == null) {
232+
delegate = supplier.get();
233+
}
234+
}
235+
}
236+
193237
}

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/SecondEntryPoint.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ public void customize(AutoConfigurationCustomizer autoConfiguration) {
201201
if (telemetryClient.getConnectionString() != null) {
202202
statsbeatModule.start(
203203
AzureMonitorHelper.createStatsbeatTelemetryItemExporter(
204-
LazyHttpClient.newHttpPipeLine(null, telemetryClient.getAadAudienceWithScope()),
204+
LazyHttpClient.newHttpPipeLine(null, telemetryClient::getAadAudienceWithScope),
205205
statsbeatModule,
206206
tempDir),
207207
telemetryClient::getStatsbeatConnectionString,
@@ -227,7 +227,7 @@ public void customize(AutoConfigurationCustomizer autoConfiguration) {
227227
quickPulse =
228228
QuickPulse.create(
229229
LazyHttpClient.newHttpPipeLineWithDefaultRedirect(
230-
configuration.authentication, telemetryClient.getAadAudienceWithScope()),
230+
configuration.authentication, telemetryClient::getAadAudienceWithScope),
231231
() -> {
232232
ConnectionString connectionString = telemetryClient.getConnectionString();
233233
return connectionString == null ? null : connectionString.getLiveEndpoint();

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/profiler/ProfilingInitializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ private synchronized void performInit() {
121121
httpPipeline =
122122
LazyHttpClient.newHttpPipeLine(
123123
telemetryClient.getAadAuthentication(),
124-
telemetryClient.getAadAudienceWithScope(),
124+
telemetryClient::getAadAudienceWithScope,
125125
new RedirectPolicy(
126126
new DefaultRedirectStrategy(
127127
3,

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/telemetry/TelemetryClient.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,6 @@ public class TelemetryClient {
8585
@Nullable private volatile BatchItemProcessor metricsBatchItemProcessor;
8686
@Nullable private volatile BatchItemProcessor statsbeatBatchItemProcessor;
8787

88-
private static final String APPLICATIONINSIGHTS_AUTHENTICATION_SCOPE =
89-
"https://monitor.azure.com//.default";
90-
9188
public static TelemetryClient.Builder builder() {
9289
return new TelemetryClient.Builder();
9390
}
@@ -229,7 +226,7 @@ private BatchItemProcessor initBatchItemProcessor(
229226
HttpPipeline httpPipeline =
230227
LazyHttpClient.newHttpPipeLine(
231228
aadAuthentication,
232-
getAadAudienceWithScope(),
229+
this::getAadAudienceWithScope,
233230
new NetworkStatsbeatHttpPipelinePolicy(statsbeatModule.getNetworkStatsbeat()));
234231
// TODO (heya) refactor the following by using AzureMonitorHelper.createTelemetryItemExporter by
235232
// passing in getNonessentialStatsbeat
@@ -357,9 +354,6 @@ public ConnectionString getConnectionString() {
357354
}
358355

359356
public String getAadAudienceWithScope() {
360-
if (connectionString == null) {
361-
return APPLICATIONINSIGHTS_AUTHENTICATION_SCOPE;
362-
}
363357
return connectionString.getAadAudienceWithScope();
364358
}
365359

0 commit comments

Comments
 (0)